Multi-Disciplinary Optimization library
Project description
MDO - Multi-Disciplinary Optimization Library
MDO is a comprehensive Python library for optimization, surrogate modeling, sensitivity analysis, reliability analysis, and uncertainty optimization.
Features
- Parameter Management: Define and manage optimization parameters with bounds and constraints
- Design of Experiments (DOE): Generate samples using various DOE methods
- Surrogate Modeling: Build surrogate models for efficient function approximation
- Sensitivity Analysis: Analyze the impact of parameters on objectives
- Optimization Algorithms: Implement various optimization algorithms
- Reliability Analysis: Assess the reliability of designs under uncertainty
- Uncertainty Optimization: Optimize designs considering parameter uncertainty
Installation
pip install .
Dependencies
- numpy
- scipy
- pandas
- scikit-learn (for surrogate models)
- matplotlib (for visualization)
Usage Examples
Basic Optimization
from mdo import Problem, Parameter, Objective, Constraint
from mdo.optimization import GeneticAlgorithm
# Define parameters
x1 = Parameter('x1', 0.5, bounds=[0, 1])
x2 = Parameter('x2', 0.5, bounds=[0, 1])
# Define objective function
def objective_function(x):
return (x[0] - 0.5)**2 + (x[1] - 0.5)**2
obj = Objective('f', 'minimize')
obj.evaluate = objective_function
# Define constraint function
def constraint_function(x):
return x[0] + x[1] - 1.0
con = Constraint('g', 'inequality', upper_bound=0.0)
con.evaluate = constraint_function
# Create problem
problem = Problem([x1, x2], [obj], [con])
# Create optimizer
optimizer = GeneticAlgorithm(problem)
# Run optimization
result = optimizer.optimize()
print("Best point:", result.sample.values)
print("Objective value:", result.objectives[0])
Surrogate Modeling
from mdo import Problem, Parameter, Objective
from mdo.doe import LatinHypercube
from mdo.surrogate import Kriging
from mdo.core import Evaluator
# Define parameters and objective function
x1 = Parameter('x1', 0.5, bounds=[0, 1])
x2 = Parameter('x2', 0.5, bounds=[0, 1])
def objective_function(x):
return np.sin(2 * np.pi * x[0]) * np.cos(2 * np.pi * x[1])
obj = Objective('f', 'minimize')
obj.evaluate = objective_function
# Create problem
problem = Problem([x1, x2], [obj])
# Generate samples
doe = LatinHypercube(problem, n_samples=50)
samples = doe.generate()
# Evaluate samples
evaluator = Evaluator(problem)
results = evaluator.evaluate(samples)
# Extract X and y
X = [sample.values for sample in samples]
y = [result.objectives[0] for result in results]
# Train surrogate model
model = Kriging()
model.fit(X, y)
# Predict
print(model.predict([[0.25, 0.25]]))
Sensitivity Analysis
from mdo import Problem, Parameter, Objective
from mdo.doe import LatinHypercube
from mdo.surrogate import Kriging
from mdo.sensitivity import SobolIndices
from mdo.core import Evaluator
# Define parameters and objective function
x1 = Parameter('x1', 0.5, bounds=[0, 1])
x2 = Parameter('x2', 0.5, bounds=[0, 1])
x3 = Parameter('x3', 0.5, bounds=[0, 1])
def objective_function(x):
return (x[0] - 0.5)**2 + 2*(x[1] - 0.5)**2 + 3*(x[2] - 0.5)**2
obj = Objective('f', 'minimize')
obj.evaluate = objective_function
# Create problem
problem = Problem([x1, x2, x3], [obj])
# Generate samples and evaluate
doe = LatinHypercube(problem, n_samples=100)
samples = doe.generate()
evaluator = Evaluator(problem)
results = evaluator.evaluate(samples)
# Train surrogate model
X = [sample.values for sample in samples]
y = [result.objectives[0] for result in results]
model = Kriging()
model.fit(X, y)
# Perform sensitivity analysis
sobol = SobolIndices(model, problem)
results = sobol.analyze()
print(results)
Reliability Analysis
from mdo import Problem, Parameter, Objective
from mdo.doe import LatinHypercube
from mdo.surrogate import Kriging
from mdo.reliability import MonteCarlo
from mdo.core import Evaluator
# Define parameters and limit state function
x1 = Parameter('x1', 0.5, bounds=[0, 1])
x2 = Parameter('x2', 0.5, bounds=[0, 1])
def limit_state_function(x):
return (x[0] - 0.7)**2 + (x[1] - 0.7)**2 - 0.1
obj = Objective('g', 'minimize')
obj.evaluate = limit_state_function
# Create problem
problem = Problem([x1, x2], [obj])
# Generate samples and evaluate
doe = LatinHypercube(problem, n_samples=50)
samples = doe.generate()
evaluator = Evaluator(problem)
results = evaluator.evaluate(samples)
# Train surrogate model
X = [sample.values for sample in samples]
y = [result.objectives[0] for result in results]
model = Kriging()
model.fit(X, y)
# Perform reliability analysis
monte_carlo = MonteCarlo(problem, model, n_samples=10000)
results = monte_carlo.analyze()
print(results)
Modules
- core: Core functionality for parameter management, problem definition, and evaluation
- doe: Design of Experiments methods
- surrogate: Surrogate models for function approximation
- sensitivity: Sensitivity analysis methods
- optimization: Optimization algorithms
- reliability: Reliability analysis methods
- uncertainty: Uncertainty optimization methods
- utils: Utility functions for parallel computing and visualization
- examples: Usage examples
- tests: Test cases
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mdo_lib-0.1.0.tar.gz
(23.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
mdo_lib-0.1.0-py3-none-any.whl
(38.0 kB
view details)
File details
Details for the file mdo_lib-0.1.0.tar.gz.
File metadata
- Download URL: mdo_lib-0.1.0.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ab1e9bb8a0ebe2317cfa0e2c57a372459b8c386b3c4b88fa0c167b986272bab
|
|
| MD5 |
100e1292121256540c051335e718ce34
|
|
| BLAKE2b-256 |
ccab33832b8b043b0bdbe2e1ef768c2008fa408ea333abf53d449ed6a27a1aba
|
File details
Details for the file mdo_lib-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mdo_lib-0.1.0-py3-none-any.whl
- Upload date:
- Size: 38.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
890cdc819ee4d8fc4e2b99b57d2eadf3f091957641def6eb2f625a9271d1a378
|
|
| MD5 |
483d2b8a93b931197372d013e834e6e3
|
|
| BLAKE2b-256 |
ada46036a1cdd554e87a8475ceeda19aa6a451a0816606b9f396b86558dba303
|