Skip to main content

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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mdo_lib-0.1.0-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

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

Hashes for mdo_lib-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8ab1e9bb8a0ebe2317cfa0e2c57a372459b8c386b3c4b88fa0c167b986272bab
MD5 100e1292121256540c051335e718ce34
BLAKE2b-256 ccab33832b8b043b0bdbe2e1ef768c2008fa408ea333abf53d449ed6a27a1aba

See more details on using hashes here.

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

Hashes for mdo_lib-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 890cdc819ee4d8fc4e2b99b57d2eadf3f091957641def6eb2f625a9271d1a378
MD5 483d2b8a93b931197372d013e834e6e3
BLAKE2b-256 ada46036a1cdd554e87a8475ceeda19aa6a451a0816606b9f396b86558dba303

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page