mdo-lib 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mdo-lib might be problematic. Click here for more details.
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/LICENSE +21 -21
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/PKG-INFO +1 -3
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/README.md +209 -209
- mdo_lib-0.1.2/mdo/__init__.py +52 -0
- mdo_lib-0.1.2/mdo/constraints/__init__.py +5 -0
- mdo_lib-0.1.0/mdo_lib/core/constraint.py → mdo_lib-0.1.2/mdo/constraints/base.py +2 -2
- mdo_lib-0.1.2/mdo/core/__init__.py +32 -0
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/doe/__init__.py +13 -13
- mdo_lib-0.1.2/mdo/doe/base_doe.py +270 -0
- mdo_lib-0.1.2/mdo/doe/central_composite.py +87 -0
- mdo_lib-0.1.2/mdo/doe/full_factorial.py +76 -0
- mdo_lib-0.1.2/mdo/doe/latin_hypercube.py +186 -0
- mdo_lib-0.1.2/mdo/objectives/__init__.py +5 -0
- mdo_lib-0.1.0/mdo_lib/core/objective.py → mdo_lib-0.1.2/mdo/objectives/base.py +2 -2
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/bayesian.py +117 -117
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/genetic.py +184 -184
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/gradient.py +88 -88
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/pso.py +132 -132
- mdo_lib-0.1.2/mdo/parameters/__init__.py +61 -0
- mdo_lib-0.1.2/mdo/parameters/array.py +68 -0
- mdo_lib-0.1.2/mdo/parameters/base_variable.py +661 -0
- mdo_lib-0.1.2/mdo/parameters/binary.py +27 -0
- mdo_lib-0.1.2/mdo/parameters/boolean.py +22 -0
- mdo_lib-0.1.2/mdo/parameters/categorical.py +56 -0
- mdo_lib-0.1.2/mdo/parameters/constant.py +61 -0
- mdo_lib-0.1.2/mdo/parameters/continuous.py +64 -0
- mdo_lib-0.1.2/mdo/parameters/continuous_random.py +31 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/BaseDistribution.py +57 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/BinomialDistribution.py +27 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/DistributionFactory.py +46 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/NormalDistribution.py +29 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/PoissonDistribution.py +30 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/UniformDistribution.py +27 -0
- mdo_lib-0.1.2/mdo/parameters/distributions/__init__.py +11 -0
- mdo_lib-0.1.2/mdo/parameters/file.py +64 -0
- mdo_lib-0.1.2/mdo/parameters/integer.py +58 -0
- mdo_lib-0.1.2/mdo/parameters/integer_random.py +27 -0
- mdo_lib-0.1.2/mdo/parameters/ordinal.py +92 -0
- mdo_lib-0.1.2/mdo/parameters/random.py +101 -0
- mdo_lib-0.1.2/mdo/parameters/string.py +198 -0
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/reliability/__init__.py +13 -13
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/reliability/base.py +22 -22
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/reliability/form.py +90 -90
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/reliability/monte_carlo.py +73 -73
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/reliability/sorm.py +103 -103
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/sensitivity/__init__.py +13 -13
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/sensitivity/base.py +22 -22
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/sensitivity/fast.py +67 -67
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/sensitivity/morris.py +74 -74
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/sensitivity/sobol.py +79 -79
- mdo_lib-0.1.2/mdo/space/__init__.py +8 -0
- mdo_lib-0.1.2/mdo/space/space.py +505 -0
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/surrogate/__init__.py +13 -13
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/surrogate/base.py +39 -39
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/surrogate/kriging.py +116 -116
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/surrogate/polynomial.py +56 -56
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/surrogate/rbf.py +74 -74
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/uncertainty/__init__.py +11 -11
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/uncertainty/base.py +24 -24
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/uncertainty/reliability_based.py +114 -114
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/uncertainty/robust.py +93 -93
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/utils/__init__.py +14 -14
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/utils/decorators.py +40 -40
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/utils/parallel.py +23 -23
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/utils/visualization.py +110 -110
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/mdo_lib.egg-info/PKG-INFO +1 -3
- mdo_lib-0.1.2/mdo_lib.egg-info/SOURCES.txt +72 -0
- mdo_lib-0.1.2/mdo_lib.egg-info/top_level.txt +1 -0
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/pyproject.toml +42 -30
- mdo_lib-0.1.0/mdo_lib/__init__.py +0 -45
- mdo_lib-0.1.0/mdo_lib/core/__init__.py +0 -18
- mdo_lib-0.1.0/mdo_lib/core/evaluator.py +0 -60
- mdo_lib-0.1.0/mdo_lib/core/parameter.py +0 -41
- mdo_lib-0.1.0/mdo_lib/core/problem.py +0 -24
- mdo_lib-0.1.0/mdo_lib/core/result.py +0 -39
- mdo_lib-0.1.0/mdo_lib/doe/base.py +0 -22
- mdo_lib-0.1.0/mdo_lib/doe/central_composite.py +0 -61
- mdo_lib-0.1.0/mdo_lib/doe/full_factorial.py +0 -39
- mdo_lib-0.1.0/mdo_lib/doe/latin_hypercube.py +0 -43
- mdo_lib-0.1.0/mdo_lib/examples/__init__.py +0 -13
- mdo_lib-0.1.0/mdo_lib/examples/basic_optimization.py +0 -51
- mdo_lib-0.1.0/mdo_lib/examples/reliability_analysis.py +0 -61
- mdo_lib-0.1.0/mdo_lib/examples/sensitivity_analysis.py +0 -62
- mdo_lib-0.1.0/mdo_lib/examples/surrogate_modeling.py +0 -58
- mdo_lib-0.1.0/mdo_lib/tests/__init__.py +0 -1
- mdo_lib-0.1.0/mdo_lib.egg-info/SOURCES.txt +0 -57
- mdo_lib-0.1.0/mdo_lib.egg-info/top_level.txt +0 -1
- mdo_lib-0.1.0/setup.py +0 -31
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/__init__.py +0 -0
- {mdo_lib-0.1.0/mdo_lib → mdo_lib-0.1.2/mdo}/optimization/base.py +0 -0
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/mdo_lib.egg-info/dependency_links.txt +0 -0
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/mdo_lib.egg-info/requires.txt +0 -0
- {mdo_lib-0.1.0 → mdo_lib-0.1.2}/setup.cfg +0 -0
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 MDO Contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MDO Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mdo-lib
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Multi-Disciplinary Optimization library
|
|
5
|
-
Home-page: https://github.com/yourusername/mdo-lib
|
|
6
|
-
Author: Your Name
|
|
7
5
|
Author-email: Your Name <your.email@example.com>
|
|
8
6
|
License: MIT License
|
|
9
7
|
|
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
# MDO - Multi-Disciplinary Optimization Library
|
|
2
|
-
|
|
3
|
-
MDO is a comprehensive Python library for optimization, surrogate modeling, sensitivity analysis, reliability analysis, and uncertainty optimization.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Parameter Management**: Define and manage optimization parameters with bounds and constraints
|
|
8
|
-
- **Design of Experiments (DOE)**: Generate samples using various DOE methods
|
|
9
|
-
- **Surrogate Modeling**: Build surrogate models for efficient function approximation
|
|
10
|
-
- **Sensitivity Analysis**: Analyze the impact of parameters on objectives
|
|
11
|
-
- **Optimization Algorithms**: Implement various optimization algorithms
|
|
12
|
-
- **Reliability Analysis**: Assess the reliability of designs under uncertainty
|
|
13
|
-
- **Uncertainty Optimization**: Optimize designs considering parameter uncertainty
|
|
14
|
-
|
|
15
|
-
## Installation
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pip install .
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Dependencies
|
|
22
|
-
|
|
23
|
-
- numpy
|
|
24
|
-
- scipy
|
|
25
|
-
- pandas
|
|
26
|
-
- scikit-learn (for surrogate models)
|
|
27
|
-
- matplotlib (for visualization)
|
|
28
|
-
|
|
29
|
-
## Usage Examples
|
|
30
|
-
|
|
31
|
-
### Basic Optimization
|
|
32
|
-
|
|
33
|
-
```python
|
|
34
|
-
from mdo import Problem, Parameter, Objective, Constraint
|
|
35
|
-
from mdo.optimization import GeneticAlgorithm
|
|
36
|
-
|
|
37
|
-
# Define parameters
|
|
38
|
-
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
39
|
-
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
40
|
-
|
|
41
|
-
# Define objective function
|
|
42
|
-
def objective_function(x):
|
|
43
|
-
return (x[0] - 0.5)**2 + (x[1] - 0.5)**2
|
|
44
|
-
|
|
45
|
-
obj = Objective('f', 'minimize')
|
|
46
|
-
obj.evaluate = objective_function
|
|
47
|
-
|
|
48
|
-
# Define constraint function
|
|
49
|
-
def constraint_function(x):
|
|
50
|
-
return x[0] + x[1] - 1.0
|
|
51
|
-
|
|
52
|
-
con = Constraint('g', 'inequality', upper_bound=0.0)
|
|
53
|
-
con.evaluate = constraint_function
|
|
54
|
-
|
|
55
|
-
# Create problem
|
|
56
|
-
problem = Problem([x1, x2], [obj], [con])
|
|
57
|
-
|
|
58
|
-
# Create optimizer
|
|
59
|
-
optimizer = GeneticAlgorithm(problem)
|
|
60
|
-
|
|
61
|
-
# Run optimization
|
|
62
|
-
result = optimizer.optimize()
|
|
63
|
-
|
|
64
|
-
print("Best point:", result.sample.values)
|
|
65
|
-
print("Objective value:", result.objectives[0])
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Surrogate Modeling
|
|
69
|
-
|
|
70
|
-
```python
|
|
71
|
-
from mdo import Problem, Parameter, Objective
|
|
72
|
-
from mdo.doe import LatinHypercube
|
|
73
|
-
from mdo.surrogate import Kriging
|
|
74
|
-
from mdo.core import Evaluator
|
|
75
|
-
|
|
76
|
-
# Define parameters and objective function
|
|
77
|
-
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
78
|
-
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
79
|
-
|
|
80
|
-
def objective_function(x):
|
|
81
|
-
return np.sin(2 * np.pi * x[0]) * np.cos(2 * np.pi * x[1])
|
|
82
|
-
|
|
83
|
-
obj = Objective('f', 'minimize')
|
|
84
|
-
obj.evaluate = objective_function
|
|
85
|
-
|
|
86
|
-
# Create problem
|
|
87
|
-
problem = Problem([x1, x2], [obj])
|
|
88
|
-
|
|
89
|
-
# Generate samples
|
|
90
|
-
doe = LatinHypercube(problem, n_samples=50)
|
|
91
|
-
samples = doe.generate()
|
|
92
|
-
|
|
93
|
-
# Evaluate samples
|
|
94
|
-
evaluator = Evaluator(problem)
|
|
95
|
-
results = evaluator.evaluate(samples)
|
|
96
|
-
|
|
97
|
-
# Extract X and y
|
|
98
|
-
X = [sample.values for sample in samples]
|
|
99
|
-
y = [result.objectives[0] for result in results]
|
|
100
|
-
|
|
101
|
-
# Train surrogate model
|
|
102
|
-
model = Kriging()
|
|
103
|
-
model.fit(X, y)
|
|
104
|
-
|
|
105
|
-
# Predict
|
|
106
|
-
print(model.predict([[0.25, 0.25]]))
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Sensitivity Analysis
|
|
110
|
-
|
|
111
|
-
```python
|
|
112
|
-
from mdo import Problem, Parameter, Objective
|
|
113
|
-
from mdo.doe import LatinHypercube
|
|
114
|
-
from mdo.surrogate import Kriging
|
|
115
|
-
from mdo.sensitivity import SobolIndices
|
|
116
|
-
from mdo.core import Evaluator
|
|
117
|
-
|
|
118
|
-
# Define parameters and objective function
|
|
119
|
-
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
120
|
-
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
121
|
-
x3 = Parameter('x3', 0.5, bounds=[0, 1])
|
|
122
|
-
|
|
123
|
-
def objective_function(x):
|
|
124
|
-
return (x[0] - 0.5)**2 + 2*(x[1] - 0.5)**2 + 3*(x[2] - 0.5)**2
|
|
125
|
-
|
|
126
|
-
obj = Objective('f', 'minimize')
|
|
127
|
-
obj.evaluate = objective_function
|
|
128
|
-
|
|
129
|
-
# Create problem
|
|
130
|
-
problem = Problem([x1, x2, x3], [obj])
|
|
131
|
-
|
|
132
|
-
# Generate samples and evaluate
|
|
133
|
-
doe = LatinHypercube(problem, n_samples=100)
|
|
134
|
-
samples = doe.generate()
|
|
135
|
-
evaluator = Evaluator(problem)
|
|
136
|
-
results = evaluator.evaluate(samples)
|
|
137
|
-
|
|
138
|
-
# Train surrogate model
|
|
139
|
-
X = [sample.values for sample in samples]
|
|
140
|
-
y = [result.objectives[0] for result in results]
|
|
141
|
-
model = Kriging()
|
|
142
|
-
model.fit(X, y)
|
|
143
|
-
|
|
144
|
-
# Perform sensitivity analysis
|
|
145
|
-
sobol = SobolIndices(model, problem)
|
|
146
|
-
results = sobol.analyze()
|
|
147
|
-
print(results)
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Reliability Analysis
|
|
151
|
-
|
|
152
|
-
```python
|
|
153
|
-
from mdo import Problem, Parameter, Objective
|
|
154
|
-
from mdo.doe import LatinHypercube
|
|
155
|
-
from mdo.surrogate import Kriging
|
|
156
|
-
from mdo.reliability import MonteCarlo
|
|
157
|
-
from mdo.core import Evaluator
|
|
158
|
-
|
|
159
|
-
# Define parameters and limit state function
|
|
160
|
-
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
161
|
-
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
162
|
-
|
|
163
|
-
def limit_state_function(x):
|
|
164
|
-
return (x[0] - 0.7)**2 + (x[1] - 0.7)**2 - 0.1
|
|
165
|
-
|
|
166
|
-
obj = Objective('g', 'minimize')
|
|
167
|
-
obj.evaluate = limit_state_function
|
|
168
|
-
|
|
169
|
-
# Create problem
|
|
170
|
-
problem = Problem([x1, x2], [obj])
|
|
171
|
-
|
|
172
|
-
# Generate samples and evaluate
|
|
173
|
-
doe = LatinHypercube(problem, n_samples=50)
|
|
174
|
-
samples = doe.generate()
|
|
175
|
-
evaluator = Evaluator(problem)
|
|
176
|
-
results = evaluator.evaluate(samples)
|
|
177
|
-
|
|
178
|
-
# Train surrogate model
|
|
179
|
-
X = [sample.values for sample in samples]
|
|
180
|
-
y = [result.objectives[0] for result in results]
|
|
181
|
-
model = Kriging()
|
|
182
|
-
model.fit(X, y)
|
|
183
|
-
|
|
184
|
-
# Perform reliability analysis
|
|
185
|
-
monte_carlo = MonteCarlo(problem, model, n_samples=10000)
|
|
186
|
-
results = monte_carlo.analyze()
|
|
187
|
-
print(results)
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## Modules
|
|
191
|
-
|
|
192
|
-
- **core**: Core functionality for parameter management, problem definition, and evaluation
|
|
193
|
-
- **doe**: Design of Experiments methods
|
|
194
|
-
- **surrogate**: Surrogate models for function approximation
|
|
195
|
-
- **sensitivity**: Sensitivity analysis methods
|
|
196
|
-
- **optimization**: Optimization algorithms
|
|
197
|
-
- **reliability**: Reliability analysis methods
|
|
198
|
-
- **uncertainty**: Uncertainty optimization methods
|
|
199
|
-
- **utils**: Utility functions for parallel computing and visualization
|
|
200
|
-
- **examples**: Usage examples
|
|
201
|
-
- **tests**: Test cases
|
|
202
|
-
|
|
203
|
-
## Contributing
|
|
204
|
-
|
|
205
|
-
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
206
|
-
|
|
207
|
-
## License
|
|
208
|
-
|
|
209
|
-
MIT License
|
|
1
|
+
# MDO - Multi-Disciplinary Optimization Library
|
|
2
|
+
|
|
3
|
+
MDO is a comprehensive Python library for optimization, surrogate modeling, sensitivity analysis, reliability analysis, and uncertainty optimization.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Parameter Management**: Define and manage optimization parameters with bounds and constraints
|
|
8
|
+
- **Design of Experiments (DOE)**: Generate samples using various DOE methods
|
|
9
|
+
- **Surrogate Modeling**: Build surrogate models for efficient function approximation
|
|
10
|
+
- **Sensitivity Analysis**: Analyze the impact of parameters on objectives
|
|
11
|
+
- **Optimization Algorithms**: Implement various optimization algorithms
|
|
12
|
+
- **Reliability Analysis**: Assess the reliability of designs under uncertainty
|
|
13
|
+
- **Uncertainty Optimization**: Optimize designs considering parameter uncertainty
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install .
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Dependencies
|
|
22
|
+
|
|
23
|
+
- numpy
|
|
24
|
+
- scipy
|
|
25
|
+
- pandas
|
|
26
|
+
- scikit-learn (for surrogate models)
|
|
27
|
+
- matplotlib (for visualization)
|
|
28
|
+
|
|
29
|
+
## Usage Examples
|
|
30
|
+
|
|
31
|
+
### Basic Optimization
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from mdo import Problem, Parameter, Objective, Constraint
|
|
35
|
+
from mdo.optimization import GeneticAlgorithm
|
|
36
|
+
|
|
37
|
+
# Define parameters
|
|
38
|
+
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
39
|
+
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
40
|
+
|
|
41
|
+
# Define objective function
|
|
42
|
+
def objective_function(x):
|
|
43
|
+
return (x[0] - 0.5)**2 + (x[1] - 0.5)**2
|
|
44
|
+
|
|
45
|
+
obj = Objective('f', 'minimize')
|
|
46
|
+
obj.evaluate = objective_function
|
|
47
|
+
|
|
48
|
+
# Define constraint function
|
|
49
|
+
def constraint_function(x):
|
|
50
|
+
return x[0] + x[1] - 1.0
|
|
51
|
+
|
|
52
|
+
con = Constraint('g', 'inequality', upper_bound=0.0)
|
|
53
|
+
con.evaluate = constraint_function
|
|
54
|
+
|
|
55
|
+
# Create problem
|
|
56
|
+
problem = Problem([x1, x2], [obj], [con])
|
|
57
|
+
|
|
58
|
+
# Create optimizer
|
|
59
|
+
optimizer = GeneticAlgorithm(problem)
|
|
60
|
+
|
|
61
|
+
# Run optimization
|
|
62
|
+
result = optimizer.optimize()
|
|
63
|
+
|
|
64
|
+
print("Best point:", result.sample.values)
|
|
65
|
+
print("Objective value:", result.objectives[0])
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Surrogate Modeling
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from mdo import Problem, Parameter, Objective
|
|
72
|
+
from mdo.doe import LatinHypercube
|
|
73
|
+
from mdo.surrogate import Kriging
|
|
74
|
+
from mdo.core import Evaluator
|
|
75
|
+
|
|
76
|
+
# Define parameters and objective function
|
|
77
|
+
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
78
|
+
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
79
|
+
|
|
80
|
+
def objective_function(x):
|
|
81
|
+
return np.sin(2 * np.pi * x[0]) * np.cos(2 * np.pi * x[1])
|
|
82
|
+
|
|
83
|
+
obj = Objective('f', 'minimize')
|
|
84
|
+
obj.evaluate = objective_function
|
|
85
|
+
|
|
86
|
+
# Create problem
|
|
87
|
+
problem = Problem([x1, x2], [obj])
|
|
88
|
+
|
|
89
|
+
# Generate samples
|
|
90
|
+
doe = LatinHypercube(problem, n_samples=50)
|
|
91
|
+
samples = doe.generate()
|
|
92
|
+
|
|
93
|
+
# Evaluate samples
|
|
94
|
+
evaluator = Evaluator(problem)
|
|
95
|
+
results = evaluator.evaluate(samples)
|
|
96
|
+
|
|
97
|
+
# Extract X and y
|
|
98
|
+
X = [sample.values for sample in samples]
|
|
99
|
+
y = [result.objectives[0] for result in results]
|
|
100
|
+
|
|
101
|
+
# Train surrogate model
|
|
102
|
+
model = Kriging()
|
|
103
|
+
model.fit(X, y)
|
|
104
|
+
|
|
105
|
+
# Predict
|
|
106
|
+
print(model.predict([[0.25, 0.25]]))
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Sensitivity Analysis
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from mdo import Problem, Parameter, Objective
|
|
113
|
+
from mdo.doe import LatinHypercube
|
|
114
|
+
from mdo.surrogate import Kriging
|
|
115
|
+
from mdo.sensitivity import SobolIndices
|
|
116
|
+
from mdo.core import Evaluator
|
|
117
|
+
|
|
118
|
+
# Define parameters and objective function
|
|
119
|
+
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
120
|
+
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
121
|
+
x3 = Parameter('x3', 0.5, bounds=[0, 1])
|
|
122
|
+
|
|
123
|
+
def objective_function(x):
|
|
124
|
+
return (x[0] - 0.5)**2 + 2*(x[1] - 0.5)**2 + 3*(x[2] - 0.5)**2
|
|
125
|
+
|
|
126
|
+
obj = Objective('f', 'minimize')
|
|
127
|
+
obj.evaluate = objective_function
|
|
128
|
+
|
|
129
|
+
# Create problem
|
|
130
|
+
problem = Problem([x1, x2, x3], [obj])
|
|
131
|
+
|
|
132
|
+
# Generate samples and evaluate
|
|
133
|
+
doe = LatinHypercube(problem, n_samples=100)
|
|
134
|
+
samples = doe.generate()
|
|
135
|
+
evaluator = Evaluator(problem)
|
|
136
|
+
results = evaluator.evaluate(samples)
|
|
137
|
+
|
|
138
|
+
# Train surrogate model
|
|
139
|
+
X = [sample.values for sample in samples]
|
|
140
|
+
y = [result.objectives[0] for result in results]
|
|
141
|
+
model = Kriging()
|
|
142
|
+
model.fit(X, y)
|
|
143
|
+
|
|
144
|
+
# Perform sensitivity analysis
|
|
145
|
+
sobol = SobolIndices(model, problem)
|
|
146
|
+
results = sobol.analyze()
|
|
147
|
+
print(results)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Reliability Analysis
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from mdo import Problem, Parameter, Objective
|
|
154
|
+
from mdo.doe import LatinHypercube
|
|
155
|
+
from mdo.surrogate import Kriging
|
|
156
|
+
from mdo.reliability import MonteCarlo
|
|
157
|
+
from mdo.core import Evaluator
|
|
158
|
+
|
|
159
|
+
# Define parameters and limit state function
|
|
160
|
+
x1 = Parameter('x1', 0.5, bounds=[0, 1])
|
|
161
|
+
x2 = Parameter('x2', 0.5, bounds=[0, 1])
|
|
162
|
+
|
|
163
|
+
def limit_state_function(x):
|
|
164
|
+
return (x[0] - 0.7)**2 + (x[1] - 0.7)**2 - 0.1
|
|
165
|
+
|
|
166
|
+
obj = Objective('g', 'minimize')
|
|
167
|
+
obj.evaluate = limit_state_function
|
|
168
|
+
|
|
169
|
+
# Create problem
|
|
170
|
+
problem = Problem([x1, x2], [obj])
|
|
171
|
+
|
|
172
|
+
# Generate samples and evaluate
|
|
173
|
+
doe = LatinHypercube(problem, n_samples=50)
|
|
174
|
+
samples = doe.generate()
|
|
175
|
+
evaluator = Evaluator(problem)
|
|
176
|
+
results = evaluator.evaluate(samples)
|
|
177
|
+
|
|
178
|
+
# Train surrogate model
|
|
179
|
+
X = [sample.values for sample in samples]
|
|
180
|
+
y = [result.objectives[0] for result in results]
|
|
181
|
+
model = Kriging()
|
|
182
|
+
model.fit(X, y)
|
|
183
|
+
|
|
184
|
+
# Perform reliability analysis
|
|
185
|
+
monte_carlo = MonteCarlo(problem, model, n_samples=10000)
|
|
186
|
+
results = monte_carlo.analyze()
|
|
187
|
+
print(results)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Modules
|
|
191
|
+
|
|
192
|
+
- **core**: Core functionality for parameter management, problem definition, and evaluation
|
|
193
|
+
- **doe**: Design of Experiments methods
|
|
194
|
+
- **surrogate**: Surrogate models for function approximation
|
|
195
|
+
- **sensitivity**: Sensitivity analysis methods
|
|
196
|
+
- **optimization**: Optimization algorithms
|
|
197
|
+
- **reliability**: Reliability analysis methods
|
|
198
|
+
- **uncertainty**: Uncertainty optimization methods
|
|
199
|
+
- **utils**: Utility functions for parallel computing and visualization
|
|
200
|
+
- **examples**: Usage examples
|
|
201
|
+
- **tests**: Test cases
|
|
202
|
+
|
|
203
|
+
## Contributing
|
|
204
|
+
|
|
205
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
MIT License
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""MDO (Multi-Disciplinary Optimization) library"""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.1.2"
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from .parameters import (
|
|
7
|
+
Constant,
|
|
8
|
+
Continuous,
|
|
9
|
+
Integer,
|
|
10
|
+
Ordinal,
|
|
11
|
+
Categorical,
|
|
12
|
+
Binary,
|
|
13
|
+
Boolean,
|
|
14
|
+
String
|
|
15
|
+
)
|
|
16
|
+
except ImportError:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
from .space import Space
|
|
21
|
+
except ImportError:
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
from .doe import BaseDOE, FullFactorial, LatinHypercube, CentralComposite
|
|
26
|
+
except ImportError:
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from .surrogate import SurrogateModel, PolynomialRegression, Kriging, RBF
|
|
31
|
+
except ImportError:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
from .sensitivity import SensitivityAnalysis, SobolIndices, MorrisMethod, FAST
|
|
36
|
+
except ImportError:
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
from .optimization import Optimizer, GradientDescent, GeneticAlgorithm, ParticleSwarmOptimization, BayesianOptimization
|
|
41
|
+
except ImportError:
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
from .reliability import ReliabilityAnalysis, MonteCarlo, FORM, SORM
|
|
46
|
+
except ImportError:
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
from .uncertainty import UncertaintyOptimizer, RobustOptimization, ReliabilityBasedOptimization
|
|
51
|
+
except ImportError:
|
|
52
|
+
pass
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Base constraint classes"""
|
|
2
2
|
|
|
3
3
|
class Constraint:
|
|
4
4
|
"""Constraint class for optimization problems"""
|
|
@@ -26,4 +26,4 @@ class Constraint:
|
|
|
26
26
|
Returns:
|
|
27
27
|
float: Constraint value
|
|
28
28
|
"""
|
|
29
|
-
raise NotImplementedError("Subclass must implement evaluate method")
|
|
29
|
+
raise NotImplementedError("Subclass must implement evaluate method")
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Core module for MDO library"""
|
|
2
|
+
|
|
3
|
+
from ..parameters import (
|
|
4
|
+
Variable,
|
|
5
|
+
Constant,
|
|
6
|
+
ContinuousVariable,
|
|
7
|
+
IntegerVariable,
|
|
8
|
+
DiscreteVariable,
|
|
9
|
+
BooleanVariable,
|
|
10
|
+
CategoricalVariable,
|
|
11
|
+
RandomVariable
|
|
12
|
+
)
|
|
13
|
+
from ..objectives import Objective
|
|
14
|
+
from ..constraints import Constraint
|
|
15
|
+
from .evaluator import Evaluator
|
|
16
|
+
from .result import Sample, Result
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"Variable",
|
|
20
|
+
"Constant",
|
|
21
|
+
"ContinuousVariable",
|
|
22
|
+
"IntegerVariable",
|
|
23
|
+
"DiscreteVariable",
|
|
24
|
+
"BooleanVariable",
|
|
25
|
+
"CategoricalVariable",
|
|
26
|
+
"RandomVariable",
|
|
27
|
+
"Objective",
|
|
28
|
+
"Constraint",
|
|
29
|
+
"Evaluator",
|
|
30
|
+
"Sample",
|
|
31
|
+
"Result",
|
|
32
|
+
]
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
"""DOE (Design of Experiments) module"""
|
|
2
|
-
|
|
3
|
-
from .
|
|
4
|
-
from .full_factorial import FullFactorial
|
|
5
|
-
from .latin_hypercube import LatinHypercube
|
|
6
|
-
from .central_composite import CentralComposite
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
"
|
|
10
|
-
"FullFactorial",
|
|
11
|
-
"LatinHypercube",
|
|
12
|
-
"CentralComposite",
|
|
13
|
-
]
|
|
1
|
+
"""DOE (Design of Experiments) module"""
|
|
2
|
+
|
|
3
|
+
from .base_doe import BaseDOE
|
|
4
|
+
from .full_factorial import FullFactorial
|
|
5
|
+
from .latin_hypercube import LatinHypercube
|
|
6
|
+
from .central_composite import CentralComposite
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"BaseDOE",
|
|
10
|
+
"FullFactorial",
|
|
11
|
+
"LatinHypercube",
|
|
12
|
+
"CentralComposite",
|
|
13
|
+
]
|