gemseo-multi-fidelity 0.0.1__py3-none-any.whl

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.
Files changed (76) hide show
  1. gemseo_multi_fidelity/__init__.py +17 -0
  2. gemseo_multi_fidelity/core/MFMapperAdapter_input.json +22 -0
  3. gemseo_multi_fidelity/core/MFMapperAdapter_output.json +22 -0
  4. gemseo_multi_fidelity/core/MFMapperLinker_input.json +22 -0
  5. gemseo_multi_fidelity/core/MFMapperLinker_output.json +22 -0
  6. gemseo_multi_fidelity/core/MFScenarioAdapter_input.json +39 -0
  7. gemseo_multi_fidelity/core/MFScenarioAdapter_output.json +23 -0
  8. gemseo_multi_fidelity/core/__init__.py +16 -0
  9. gemseo_multi_fidelity/core/boxed_domain.py +242 -0
  10. gemseo_multi_fidelity/core/corr_function.py +411 -0
  11. gemseo_multi_fidelity/core/criticality.py +124 -0
  12. gemseo_multi_fidelity/core/ds_mapper.py +307 -0
  13. gemseo_multi_fidelity/core/errors.py +42 -0
  14. gemseo_multi_fidelity/core/eval_mapper.py +188 -0
  15. gemseo_multi_fidelity/core/id_mapper_adapter.py +61 -0
  16. gemseo_multi_fidelity/core/mapper_adapter.py +126 -0
  17. gemseo_multi_fidelity/core/mapper_linker.py +72 -0
  18. gemseo_multi_fidelity/core/mf_formulation.py +635 -0
  19. gemseo_multi_fidelity/core/mf_logger.py +216 -0
  20. gemseo_multi_fidelity/core/mf_opt_problem.py +480 -0
  21. gemseo_multi_fidelity/core/mf_scenario.py +205 -0
  22. gemseo_multi_fidelity/core/noise_criterion.py +94 -0
  23. gemseo_multi_fidelity/core/projpolytope.out +0 -0
  24. gemseo_multi_fidelity/core/scenario_adapter.py +568 -0
  25. gemseo_multi_fidelity/core/stop_criteria.py +201 -0
  26. gemseo_multi_fidelity/core/strict_chain.py +75 -0
  27. gemseo_multi_fidelity/core/utils_model_quality.py +74 -0
  28. gemseo_multi_fidelity/corrections/__init__.py +16 -0
  29. gemseo_multi_fidelity/corrections/add_corr_function.py +80 -0
  30. gemseo_multi_fidelity/corrections/correction_factory.py +65 -0
  31. gemseo_multi_fidelity/corrections/mul_corr_function.py +86 -0
  32. gemseo_multi_fidelity/drivers/__init__.py +16 -0
  33. gemseo_multi_fidelity/drivers/mf_algo_factory.py +38 -0
  34. gemseo_multi_fidelity/drivers/mf_driver_lib.py +462 -0
  35. gemseo_multi_fidelity/drivers/refinement.py +234 -0
  36. gemseo_multi_fidelity/drivers/settings/__init__.py +16 -0
  37. gemseo_multi_fidelity/drivers/settings/base_mf_driver_settings.py +59 -0
  38. gemseo_multi_fidelity/drivers/settings/mf_refine_settings.py +50 -0
  39. gemseo_multi_fidelity/formulations/__init__.py +16 -0
  40. gemseo_multi_fidelity/formulations/refinement.py +144 -0
  41. gemseo_multi_fidelity/mapping/__init__.py +16 -0
  42. gemseo_multi_fidelity/mapping/identity_mapper.py +74 -0
  43. gemseo_multi_fidelity/mapping/interp_mapper.py +422 -0
  44. gemseo_multi_fidelity/mapping/mapper_factory.py +70 -0
  45. gemseo_multi_fidelity/mapping/mapping_errors.py +46 -0
  46. gemseo_multi_fidelity/mapping/subset_mapper.py +122 -0
  47. gemseo_multi_fidelity/mf_rosenbrock/__init__.py +16 -0
  48. gemseo_multi_fidelity/mf_rosenbrock/delayed_disc.py +136 -0
  49. gemseo_multi_fidelity/mf_rosenbrock/refact_rosen_testcase.py +46 -0
  50. gemseo_multi_fidelity/mf_rosenbrock/rosen_mf_case.py +284 -0
  51. gemseo_multi_fidelity/mf_rosenbrock/rosen_mf_funcs.py +350 -0
  52. gemseo_multi_fidelity/models/__init__.py +16 -0
  53. gemseo_multi_fidelity/models/fake_updater.py +112 -0
  54. gemseo_multi_fidelity/models/model_updater.py +91 -0
  55. gemseo_multi_fidelity/models/rbf/__init__.py +16 -0
  56. gemseo_multi_fidelity/models/rbf/kernel_factory.py +66 -0
  57. gemseo_multi_fidelity/models/rbf/kernels/__init__.py +16 -0
  58. gemseo_multi_fidelity/models/rbf/kernels/gaussian.py +93 -0
  59. gemseo_multi_fidelity/models/rbf/kernels/matern_3_2.py +101 -0
  60. gemseo_multi_fidelity/models/rbf/kernels/matern_5_2.py +101 -0
  61. gemseo_multi_fidelity/models/rbf/kernels/rbf_kernel.py +172 -0
  62. gemseo_multi_fidelity/models/rbf/rbf_model.py +422 -0
  63. gemseo_multi_fidelity/models/sparse_rbf_updater.py +96 -0
  64. gemseo_multi_fidelity/models/taylor/__init__.py +16 -0
  65. gemseo_multi_fidelity/models/taylor/taylor.py +212 -0
  66. gemseo_multi_fidelity/models/taylor_updater.py +66 -0
  67. gemseo_multi_fidelity/models/updater_factory.py +62 -0
  68. gemseo_multi_fidelity/settings/__init__.py +16 -0
  69. gemseo_multi_fidelity/settings/drivers.py +22 -0
  70. gemseo_multi_fidelity/settings/formulations.py +16 -0
  71. gemseo_multi_fidelity-0.0.1.dist-info/METADATA +99 -0
  72. gemseo_multi_fidelity-0.0.1.dist-info/RECORD +76 -0
  73. gemseo_multi_fidelity-0.0.1.dist-info/WHEEL +5 -0
  74. gemseo_multi_fidelity-0.0.1.dist-info/entry_points.txt +2 -0
  75. gemseo_multi_fidelity-0.0.1.dist-info/licenses/LICENSE.txt +165 -0
  76. gemseo_multi_fidelity-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,212 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ # Copyright (c) 2018 AIRBUS OPERATIONS
17
+
18
+ #
19
+ # Contributors:
20
+ # INITIAL AUTHORS - API and implementation and/or documentation
21
+ # :author: Romain Olivanti
22
+ # OTHER AUTHORS - MACROSCOPIC CHANGES
23
+ """Taylor Model."""
24
+
25
+ from __future__ import annotations
26
+
27
+ from typing import TYPE_CHECKING
28
+
29
+ from numpy import any as np_any
30
+ from numpy import array
31
+ from numpy import asarray
32
+ from numpy import atleast_1d
33
+ from numpy import atleast_2d
34
+ from numpy import einsum
35
+ from numpy import zeros
36
+
37
+ if TYPE_CHECKING:
38
+ from numpy.typing import NDArray
39
+
40
+
41
+ class TaylorModel:
42
+ """Taylor model class.
43
+
44
+ Simple truncated Taylor Series model up to degree 2 for multiple inputs-outputs.
45
+ """
46
+
47
+ def __init__(self) -> None:
48
+ """Constructor."""
49
+ self._n_out = None
50
+ self._dim = None
51
+ self._x_ref = None
52
+ self._coef_0 = None
53
+ self._coef_1 = None
54
+ self._coef_2 = None
55
+
56
+ @staticmethod
57
+ def safe_set(ref_id: int, arr: NDArray):
58
+ """Trigger a copy.
59
+
60
+ Convenience method to trigger a copy if the id or arr is not different from the
61
+ reference id.
62
+
63
+ Args:
64
+ ref_id: The reference id.
65
+ arr: The array to check.
66
+
67
+ Returns:
68
+ The array or a copy of the array.
69
+ """
70
+ return arr.copy() if ref_id == id(arr) else arr
71
+
72
+ @staticmethod
73
+ def _to_3d(arg: NDArray) -> NDArray:
74
+ """Convenience function as atleast_3d does not behave as required.
75
+
76
+ Args:
77
+ arg: The input array.
78
+
79
+ Returns:
80
+ The 3D array.
81
+ """
82
+ arg = asarray(arg)
83
+ len_arg = len(asarray(arg).shape)
84
+ if len_arg == 0:
85
+ return array([[[arg]]])
86
+ if len_arg == 1:
87
+ return array([[arg]])
88
+ if len_arg == 2:
89
+ return array([arg])
90
+ return arg
91
+
92
+ def _check_input(self, x_vect: NDArray) -> NDArray:
93
+ """Check the input.
94
+
95
+ Args:
96
+ x_vect: The input array.
97
+
98
+ Returns:
99
+ The checked 1D array.
100
+ """
101
+ x_vect = atleast_1d(x_vect)
102
+ if x_vect.shape[0] != self._dim:
103
+ msg = (
104
+ "dim of x_vect not consistent with x_ref: "
105
+ "{x_vect.shape[0]:d} != {self._dim}"
106
+ )
107
+ raise ValueError(msg)
108
+ return x_vect
109
+
110
+ def update(
111
+ self,
112
+ x_ref: NDArray,
113
+ coef_0: NDArray,
114
+ coef_1: NDArray = None,
115
+ coef_2: NDArray = None,
116
+ ) -> None:
117
+ """Update the model. All inputs are copied.
118
+
119
+ Args:
120
+ x_ref: The reference point.
121
+ coef_0: The degree 0 coefficient.
122
+ coef_1: The degree 1 coefficient.
123
+ coef_2: The degree 2 coefficient.
124
+ """
125
+ self._x_ref = self.safe_set(id(x_ref), atleast_1d(x_ref).flatten())
126
+ self._coef_0 = self.safe_set(id(coef_0), atleast_1d(coef_0))
127
+
128
+ self._dim = len(self._x_ref)
129
+ self._n_out = len(self._coef_0)
130
+ if coef_1 is not None:
131
+ self._coef_1 = self.safe_set(id(coef_1), atleast_2d(coef_1))
132
+ if self._coef_1.shape != (self._n_out, self._dim):
133
+ msg = "coef_1 not consistent"
134
+ raise ValueError(msg)
135
+ if coef_2 is not None:
136
+ self._coef_2 = self.safe_set(id(coef_2), self._to_3d(coef_2))
137
+ if self._coef_2.shape != (self._n_out, self._dim, self._dim):
138
+ msg = "coef_2 not consistent"
139
+ raise ValueError(msg)
140
+
141
+ def __call__(self, x_vect: NDArray) -> float:
142
+ """Compute the value of the truncated Taylor Series.
143
+
144
+ Args:
145
+ x_vect: The input array.
146
+
147
+ Returns:
148
+ The value of the truncated Taylor Series.
149
+ """
150
+ out = self._coef_0.copy()
151
+ diff_x = self._check_input(x_vect) - self._x_ref
152
+ if np_any(diff_x):
153
+ if self._coef_1 is not None:
154
+ out += self._coef_1.dot(diff_x)
155
+ if self._coef_2 is not None:
156
+ out += 0.5 * einsum("ijk,k,j->i", self._coef_2, diff_x, diff_x)
157
+ return out[0] if self._n_out == 1 else out
158
+
159
+ def jac(self, x_vect: NDArray) -> NDArray:
160
+ """Compute the jacobian of the truncated Taylor Series.
161
+
162
+ Args:
163
+ x_vect: The input array.
164
+
165
+ Returns:
166
+ The jacobian.
167
+ """
168
+ x_vect = self._check_input(x_vect)
169
+ if self._coef_1 is not None:
170
+ out = self._coef_1.copy()
171
+ else:
172
+ out = zeros((self._dim, len(x_vect)))
173
+ if self._coef_2 is not None:
174
+ diff_x = x_vect - self._x_ref
175
+ if np_any(diff_x):
176
+ out += self._coef_2.dot(diff_x)
177
+ return out[0] if self._n_out == 1 else out
178
+
179
+ def hess(self, x_vect: NDArray) -> NDArray:
180
+ """Hessian of the truncated Taylor Series.
181
+
182
+ Args:
183
+ x_vect: The input array.
184
+
185
+ Returns:
186
+ The hessian.
187
+ """
188
+ if self._coef_2 is not None:
189
+ out = self._coef_2.copy()
190
+ else:
191
+ dim_vect = len(self._check_input(x_vect))
192
+ out = zeros((self._dim, dim_vect, dim_vect))
193
+ return out[0] if self._n_out == 1 else out
194
+
195
+ def __str__(self) -> str:
196
+ """String representation of the model.
197
+
198
+ Returns:
199
+ The string representation.
200
+ """
201
+ expr = "("
202
+ diff_x = f"(x - {self._x_ref})"
203
+ for i in range(self._n_out):
204
+ if i != 0:
205
+ expr += ", "
206
+ expr += f"{self._coef_0[i]}"
207
+ if self._coef_1 is not None:
208
+ expr += f" + {self._coef_1[i, :]} {diff_x}"
209
+ if self._coef_2 is not None:
210
+ expr += f" + 1/2 {diff_x} {self._coef_2[i, :, :]} {diff_x}"
211
+ expr += ")"
212
+ return expr
@@ -0,0 +1,66 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ # Copyright (c) 2018 AIRBUS OPERATIONS
17
+
18
+ #
19
+ # Contributors:
20
+ # INITIAL AUTHORS - API and implementation and/or documentation
21
+ # :author: Romain Olivanti
22
+ # OTHER AUTHORS - MACROSCOPIC CHANGES
23
+ """Taylor model updater."""
24
+
25
+ from __future__ import annotations
26
+
27
+ import contextlib
28
+ from typing import TYPE_CHECKING
29
+
30
+ from gemseo.core.mdo_functions.mdo_function import MDOFunction
31
+
32
+ from gemseo_multi_fidelity.models.model_updater import ModelUpdater
33
+ from gemseo_multi_fidelity.models.taylor.taylor import TaylorModel
34
+
35
+ if TYPE_CHECKING:
36
+ from numpy.typing import NDArray
37
+
38
+
39
+ class TaylorUpdater(ModelUpdater):
40
+ """Updater relying on a Taylor model."""
41
+
42
+ HANDLES_MULTI_UPDATE = False
43
+
44
+ def __init__(self, **kwargs) -> None:
45
+ """Constructor.
46
+
47
+ Args:
48
+ kwargs: keywords arguments.
49
+ """
50
+ self._model = TaylorModel()
51
+ super().__init__()
52
+
53
+ def _set_function(self) -> None:
54
+ self.function = MDOFunction(
55
+ self._model, "Taylor", input_names=["x"], dim=1, jac=self._model.jac
56
+ )
57
+ with contextlib.suppress(AttributeError):
58
+ self.function.hess = self._model.hess
59
+
60
+ def _update(
61
+ self, vects: NDArray, vals: NDArray, grads: NDArray = None, hess: NDArray = None
62
+ ) -> None:
63
+ coef_1 = grads[0] if grads is not None else None
64
+ coef_2 = hess[0] if hess is not None else None
65
+ self._model.update(vects[0], vals[0], coef_1=coef_1, coef_2=coef_2)
66
+ self.function.expr = str(self._model)
@@ -0,0 +1,62 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ # Copyright (c) 2018 AIRBUS OPERATIONS
17
+
18
+ #
19
+ # Contributors:
20
+ # INITIAL AUTHORS - API and implementation and/or documentation
21
+ # :author: Romain Olivanti
22
+ # OTHER AUTHORS - MACROSCOPIC CHANGES
23
+ """Updater factory."""
24
+
25
+ from __future__ import annotations
26
+
27
+ from typing import TYPE_CHECKING
28
+ from typing import ClassVar
29
+
30
+ from gemseo_multi_fidelity.models.sparse_rbf_updater import SparseRBFUpdater
31
+ from gemseo_multi_fidelity.models.taylor_updater import TaylorUpdater
32
+
33
+ if TYPE_CHECKING:
34
+ from gemseo_multi_fidelity.models.model_updater import ModelUpdater
35
+
36
+
37
+ class UpdaterFactory:
38
+ """Factory to create a model updater from its name."""
39
+
40
+ TAYLOR = "taylor"
41
+ SPARSE_RBF = "sparse_rbf"
42
+ AVAILABLE_MODELS: ClassVar[list] = [TAYLOR, SPARSE_RBF]
43
+ """The available models."""
44
+
45
+ def create(self, name: str, **kwargs) -> ModelUpdater:
46
+ """Factory method to create a model updater.
47
+
48
+ Args:
49
+ name: The name of the model updater.
50
+ kwargs: The keyword arguments to set the updater.
51
+
52
+ Returns:
53
+ The ``ModelUpdater`` object.
54
+ """
55
+ if name == self.TAYLOR:
56
+ model = TaylorUpdater
57
+ elif name == self.SPARSE_RBF:
58
+ model = SparseRBFUpdater
59
+ else:
60
+ msg = f"{name} not in {self.AVAILABLE_MODELS}"
61
+ raise ValueError(msg)
62
+ return model(**kwargs)
@@ -0,0 +1,16 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ """Settings."""
@@ -0,0 +1,22 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ """Drivers settings."""
17
+
18
+ from __future__ import annotations
19
+
20
+ from gemseo_multi_fidelity.drivers.settings.mf_refine_settings import (
21
+ MFRefine_Settings, # noqa: E501 F401
22
+ )
@@ -0,0 +1,16 @@
1
+ # Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 3 as published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public License
13
+ # along with this program; if not, write to the Free Software Foundation,
14
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+
16
+ """Formulations settings."""
@@ -0,0 +1,99 @@
1
+ Metadata-Version: 2.4
2
+ Name: gemseo-multi-fidelity
3
+ Version: 0.0.1
4
+ Summary: A plugin for multi-fidelity MDO
5
+ Author-email: GEMSEO Team <contact@gemseo.org>
6
+ License-Expression: LGPL-3.0
7
+ Project-URL: Homepage, https://gemseo.org
8
+ Project-URL: Source, https://gitlab.com/gemseo/dev/gemseo-multi-fidelity
9
+ Project-URL: Issues, https://gitlab.com/gemseo/dev/gemseo-multi-fidelity/-/issues
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Topic :: Scientific/Engineering
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Operating System :: MacOS
14
+ Classifier: Operating System :: Microsoft :: Windows
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Requires-Python: <3.14,>=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE.txt
23
+ Requires-Dist: gemseo[all]<7,>=6.1
24
+ Dynamic: license-file
25
+
26
+ <!--
27
+ Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
28
+
29
+ This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
30
+ International License. To view a copy of this license, visit
31
+ http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative
32
+ Commons, PO Box 1866, Mountain View, CA 94042, USA.
33
+ -->
34
+
35
+ # gemseo-multi-fidelity
36
+
37
+ [![PyPI - License](https://img.shields.io/pypi/l/gemseo-multi-fidelity)](https://www.gnu.org/licenses/lgpl-3.0.en.html)
38
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/gemseo-multi-fidelity)](https://pypi.org/project/gemseo-multi-fidelity/)
39
+ [![PyPI](https://img.shields.io/pypi/v/gemseo-multi-fidelity)](https://pypi.org/project/gemseo-multi-fidelity/)
40
+ [![Codecov branch](https://img.shields.io/codecov/c/gitlab/gemseo:dev/gemseo-multi-fidelity/develop)](https://app.codecov.io/gl/gemseo:dev/gemseo-multi-fidelity)
41
+
42
+ ## Overview
43
+ A preliminary version of the GEMSEO&reg; plugin for Multi-fidelity MDO.
44
+
45
+ This plugin originates from works performed at Airbus, in the frame of Romain Olivanti's CIFRE PhD funded by Airbus:
46
+
47
+ - Olivanti, R., [Multi-fidelity aerodynamic shape optimization considering flexible adjoint at multiple operating conditions](https://theses.fr/2021ESAE0046). PhD thesis manuscript. ISAE, Toulouse. 2021.
48
+ - Olivanti, R., Gallard, F., Brézillon, J. and Gourdain, N., [Comparison of generic multi-fidelity approaches for bound-constrained nonlinear optimization applied to adjoint-based CFD applications](https://arc.aiaa.org/doi/10.2514/6.2019-3102). AIAA Aviation 2019 Forum. 2019.
49
+
50
+ It was later improved and ported by IRT Saint Exupéry, in the frame of the MDA/MDO project funded by
51
+ [Investments for the Future Programme](https://www.gouvernement.fr/le-programme-d-investissements-d-avenir) (French acronym: PIA)
52
+ and the European Union's Clean Aviation project [ODE4HERA](https://www.ode4hera.eu/).
53
+
54
+ The goal of Multi-fidelity is to speed up optimization processes using degraded levels of fidelity (_low_ fidelity), in addition to high-fidelity levels that are generally more accurate but as well more costly.
55
+
56
+ The plugin eases the creation of a main _Multi-fidelity scenario_, relying on several GEMSEO MDO scenarios based on different levels of fidelity.
57
+
58
+ This main scenario is executed as a usual GEMSEO scenario, however, during the process the driver is able to switch from a level of fidelity to another, based on criteria defined by the chosen Multi-fidelity formulation.
59
+
60
+ The level of fidelity associated with a scenario is defined from a variety of parameters (related to disciplines, MDO formulations, ...) that can be consulted in the following [list of opportunities](./user_guide/How_To_Create_Multiple_Scenario_Fidelity_Levels.md).
61
+
62
+ The Multi-fidelity scenario can be created and executed with simple commands, specifying pre-defined sub-scenarios and the formulation settings:
63
+
64
+ ```py
65
+ mf_scenario = MFMDOScenario(scenarios, formulation_name="Refinement", name="mf_process")
66
+ mf_scenario.execute(algo_settings_model=MFRefine_Settings(n_levels=2))
67
+ ```
68
+
69
+ ## Installation
70
+
71
+ Install the latest version with `pip install gemseo-multi-fidelity`.
72
+
73
+ See [pip](https://pip.pypa.io/en/stable/getting-started/) for more information.
74
+
75
+ ## Bugs and questions
76
+
77
+ Please use the [gitlab issue tracker](https://gitlab.com/gemseo/dev/gemseo-multi-fidelity/-/issues)
78
+ to submit bugs or questions.
79
+
80
+ You can also contact the authors using our [Discourse channel](https://gemseo.discourse.group/).
81
+
82
+ ## Contributing
83
+
84
+ See the [contributing section of GEMSEO](https://gemseo.readthedocs.io/en/stable/software/developing.html#dev).
85
+
86
+ ## Contributors
87
+
88
+ - Romain Olivanti (Airbus)
89
+ - François Gallard (IRT Saint Exupéry)
90
+ - Yann David (IRT Saint Exupéry)
91
+ - Sylvain Béchet (IRT Saint Exupéry)
92
+ - Jean-Christophe Giret (IRT Saint Exupéry)
93
+ - Antoine Dechaume (IRT Saint Exupéry)
94
+
95
+ The funding comes from ANR FR2030 [Investments for the Future Programme](https://www.gouvernement.fr/le-programme-d-investissements-d-avenir),
96
+ in the frame of the MDA/MDO project, and European Union [Clean Aviation](https://www.clean-aviation.eu/) project [ODE4HERA](https://www.ode4hera.eu/), co-funded by the European Union under GA no. 101140510
97
+
98
+ The authors wish to acknowledge the PIA framework (SGPI, ANR) and the industrial members of the project Airbus,
99
+ Airbus Defence and Space, Capgemini, Cenaero, CERFACS, Expleo, Liebherr, for their support, financial funding and own knowledge.
@@ -0,0 +1,76 @@
1
+ gemseo_multi_fidelity/__init__.py,sha256=tNlrD432F4H1MzmqoZanf6X51JKHDv31XJQrNc3A7zc,795
2
+ gemseo_multi_fidelity/core/MFMapperAdapter_input.json,sha256=JqTBJvRKEctafAXTJ9hNL3BvgbLa-tPVEOxx8iJCKl4,407
3
+ gemseo_multi_fidelity/core/MFMapperAdapter_output.json,sha256=E24EhXzhDRoW7TBAjCX9-hkuGjhdP_hb0gFddKunOjE,410
4
+ gemseo_multi_fidelity/core/MFMapperLinker_input.json,sha256=E24EhXzhDRoW7TBAjCX9-hkuGjhdP_hb0gFddKunOjE,410
5
+ gemseo_multi_fidelity/core/MFMapperLinker_output.json,sha256=JqTBJvRKEctafAXTJ9hNL3BvgbLa-tPVEOxx8iJCKl4,407
6
+ gemseo_multi_fidelity/core/MFScenarioAdapter_input.json,sha256=TPVPOpKMwveXA96kDRJdNtAKiKDrXDkRjvlEDsO_t8Q,776
7
+ gemseo_multi_fidelity/core/MFScenarioAdapter_output.json,sha256=dM1ikb-F0c3l8PMiRlOtmvopX8SqXs8DOraSiJMExfY,434
8
+ gemseo_multi_fidelity/core/__init__.py,sha256=XUh6j5hMIG3FQduTlauc8yAGZZcocHa58TDLi14SaHY,748
9
+ gemseo_multi_fidelity/core/boxed_domain.py,sha256=GSm9ZkvoJMWP4IItQD6uuGKYqt6vgL4NPFwdjHgWXcc,7371
10
+ gemseo_multi_fidelity/core/corr_function.py,sha256=rNDfmQW84l_Pct-fAOYz8fSj_jVX6bMc1xD5bS8-acQ,14656
11
+ gemseo_multi_fidelity/core/criticality.py,sha256=W-qYR2H_38PcnQhre4FJl7YP1cxMX4hud9n99hiqjyI,3494
12
+ gemseo_multi_fidelity/core/ds_mapper.py,sha256=4b4JXgTn2PJ3Pk_EKlLo9sOjxLtFPxudz_ue72g8cyY,10515
13
+ gemseo_multi_fidelity/core/errors.py,sha256=4C8mc3Rpf-1fT9EYYxKNsCzj_YlE_hl4UebpqxJjIPg,1357
14
+ gemseo_multi_fidelity/core/eval_mapper.py,sha256=FQqqKG6lXuBUif6Sf8AUEG0aMCl09Mj8Tjx2PL8DdW4,6348
15
+ gemseo_multi_fidelity/core/id_mapper_adapter.py,sha256=4GSGruhOyxtUiOxD_dzhZqUzzyWJVKQZtHPxeUgjc9E,2220
16
+ gemseo_multi_fidelity/core/mapper_adapter.py,sha256=AgkLWjmLKYdzqy4-yhZPdFpis2Zmw4tGaGenjPASSgY,4822
17
+ gemseo_multi_fidelity/core/mapper_linker.py,sha256=PC7xadsL0o5OzXQKjIsvw7Ik6a2O_nhsoas5G5mGgLU,2649
18
+ gemseo_multi_fidelity/core/mf_formulation.py,sha256=6R89EjykgN5LAxzvLSgjr4FDy48nz9n7kCBTieEIWOM,24733
19
+ gemseo_multi_fidelity/core/mf_logger.py,sha256=lLbezI9IOY9xnHagYbF4QiN23VmDOMY0UnWOGImiM0k,7083
20
+ gemseo_multi_fidelity/core/mf_opt_problem.py,sha256=b71tU1IVDAtWIvFFce6tqDO7gMeVNthE4e6qavZB2rM,17871
21
+ gemseo_multi_fidelity/core/mf_scenario.py,sha256=IXd_rWTwbZmtg7-jQJ7_SkRHNuYcSGvx5toZS8ch_FA,7677
22
+ gemseo_multi_fidelity/core/noise_criterion.py,sha256=qltxSu8ymINFVR3o5TNvZUUNS_JnpTbPoJyJOemPOJw,2976
23
+ gemseo_multi_fidelity/core/projpolytope.out,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ gemseo_multi_fidelity/core/scenario_adapter.py,sha256=z_-X1j78_gwYDvJ8jbx2KQDSlCJUCmWptTkL8kIOnL4,19481
25
+ gemseo_multi_fidelity/core/stop_criteria.py,sha256=anHRZObkhKipLfH7zXDz-VTLpiVpMkOFM0HN4vyo3Bo,5569
26
+ gemseo_multi_fidelity/core/strict_chain.py,sha256=IoJRIshfbw9Rf4SCiKhy0KZstku5MzrnKiJI4mMXpOk,2918
27
+ gemseo_multi_fidelity/core/utils_model_quality.py,sha256=umGA7DVPz-O3YxvY5QiA5PaGjo8A90ObYpYgJs0E-Gs,2594
28
+ gemseo_multi_fidelity/corrections/__init__.py,sha256=3SUal12zYm5NV1DJdm1zP6FVFx3NIdDPOIvS7zqRoqg,755
29
+ gemseo_multi_fidelity/corrections/add_corr_function.py,sha256=2ve65PUdR5mj-nPj2Z4Gw2LoR0lblChmU80ee1JN2ig,2566
30
+ gemseo_multi_fidelity/corrections/correction_factory.py,sha256=GiM9QeXEbd2sqncyjxPdaT1XwzXclvbYZqjLDdgQXiE,2290
31
+ gemseo_multi_fidelity/corrections/mul_corr_function.py,sha256=Om2MVVeXPTjZnL0M2CeoPRd0MDNs_jGnZILZ0rQaf70,2799
32
+ gemseo_multi_fidelity/drivers/__init__.py,sha256=hhffhvfsvFEGoOAdnJnlo_2nUunqQ5WsegevExqIEAU,751
33
+ gemseo_multi_fidelity/drivers/mf_algo_factory.py,sha256=0JBSGjzvctJv0ctiqzlr9a57ei5mn_cN1dTKReWifNo,1369
34
+ gemseo_multi_fidelity/drivers/mf_driver_lib.py,sha256=OjiAw0oCH8MaJHYbI0IkO9JkBWnHdhWP8EacTHj1nIg,16037
35
+ gemseo_multi_fidelity/drivers/refinement.py,sha256=PHNG_ZRBlQX1DHnhSP3FhnW49vWmXeXfrXwpG9k8P00,8341
36
+ gemseo_multi_fidelity/drivers/settings/__init__.py,sha256=VMLuTRfXVuFYR2ySRp5uHAcfVZoKekn8-8DqVe5WRh4,760
37
+ gemseo_multi_fidelity/drivers/settings/base_mf_driver_settings.py,sha256=fHFcp2qgoX8JJ0pm1xNxFiA9UjSlP6FZe8vdQZsYbrI,2152
38
+ gemseo_multi_fidelity/drivers/settings/mf_refine_settings.py,sha256=9ssQicPLt8D89LXRI2ByDur1aePdj2ZVFiKPJj7TocI,1895
39
+ gemseo_multi_fidelity/formulations/__init__.py,sha256=6fB1XPRUt8bTn6omOq80tmB8y0ldor4RJEKUvm6AyoM,756
40
+ gemseo_multi_fidelity/formulations/refinement.py,sha256=fToBw9eWouLGzy9pgj2tz2efMA2CZ3OdfpxbWg0rAOE,5174
41
+ gemseo_multi_fidelity/mapping/__init__.py,sha256=YtKLui1Ls-QeZw_rYLkrSkbj5w7zH1QP39pd-jTW5xo,751
42
+ gemseo_multi_fidelity/mapping/identity_mapper.py,sha256=a0sUP7BxbgUto5Va5E2gKZaJmrWimQ284wj-KLUpodw,2157
43
+ gemseo_multi_fidelity/mapping/interp_mapper.py,sha256=XFw7Z9eFM4xHkZwUA1lcLqXorK1hT9zQhf2wo4jWtjQ,15368
44
+ gemseo_multi_fidelity/mapping/mapper_factory.py,sha256=7C0d4WvnfgFttsWXmAyH31R_3R9M4P443ZRYlrvOWsU,2360
45
+ gemseo_multi_fidelity/mapping/mapping_errors.py,sha256=DR-hDDHMpVztWLGBy5kKY9A2g74_xZtZGhb7JSmLG5M,1468
46
+ gemseo_multi_fidelity/mapping/subset_mapper.py,sha256=NgTiNhERqU1AbjM-KUGgpxWefyVbOnzz2D5LH8vvf-Q,4143
47
+ gemseo_multi_fidelity/mf_rosenbrock/__init__.py,sha256=xqXUDeYCX0D4irq1GW4RwIh4k5nRShKqghv-1THV9M8,783
48
+ gemseo_multi_fidelity/mf_rosenbrock/delayed_disc.py,sha256=V2HQFGloSc6dbRTG0zFpQQvu3C7If4mfViQbv0G9e-Q,4520
49
+ gemseo_multi_fidelity/mf_rosenbrock/refact_rosen_testcase.py,sha256=NxzrPUxdYV43yK8EklxlWZQxsmpVWs4ShscIws99SL4,1681
50
+ gemseo_multi_fidelity/mf_rosenbrock/rosen_mf_case.py,sha256=Zw2ijEzY3V4RRBawRHdNQyfKsLxPDhq8zb0zC-Y7u6I,9685
51
+ gemseo_multi_fidelity/mf_rosenbrock/rosen_mf_funcs.py,sha256=7ctiHdhxmKGdXG9KMx-fDwLIFGH03FDp62Jaltutae0,10137
52
+ gemseo_multi_fidelity/models/__init__.py,sha256=qwwI4jMw_dBA55OaUSoe8-nJjsEDtf0Gmevy5Eek5O4,750
53
+ gemseo_multi_fidelity/models/fake_updater.py,sha256=kfI5smL1wpv1r4lxa5xY7Ki9gIkQhl8Ts4nATAwQGgs,3508
54
+ gemseo_multi_fidelity/models/model_updater.py,sha256=lpszwD13vp9cJ8Xtz9y5jKf9YFLMXn4aoFgTg8nLoW0,2956
55
+ gemseo_multi_fidelity/models/sparse_rbf_updater.py,sha256=xhaO9C-Imoe7hTHk0ScsOFU1QUAz2zUyfBh79AwP6N0,3155
56
+ gemseo_multi_fidelity/models/taylor_updater.py,sha256=A72T4y878gd03gDcSNGbS4UQoMbUR5zY2ga4ezpekcE,2243
57
+ gemseo_multi_fidelity/models/updater_factory.py,sha256=ZHOSHoP5b69EQyMMAE7_sKPt4j9Dyrdbk6RyqaQ2Z8g,2113
58
+ gemseo_multi_fidelity/models/rbf/__init__.py,sha256=5SVyPalVLngGg6wYT0aIIlivP6kAsHKcWGHh6cFAAA8,753
59
+ gemseo_multi_fidelity/models/rbf/kernel_factory.py,sha256=6VwvDsZAYdCX4hzAcDZveMAeBxcy3Cl8B1epeu0Sdhw,2350
60
+ gemseo_multi_fidelity/models/rbf/rbf_model.py,sha256=M1p65Lp2GHrXskQ3ZvdfzAts4Pv8QyDyxtG5M3QYQ4o,14360
61
+ gemseo_multi_fidelity/models/rbf/kernels/__init__.py,sha256=-eZ13ygWYoqaPehH6fCQmT9sXLmUijW8pDS18qJqetU,761
62
+ gemseo_multi_fidelity/models/rbf/kernels/gaussian.py,sha256=PiYUQzLN-amGWl7bhryvJ7PUD2dR2j_iKULXOMrUd20,2732
63
+ gemseo_multi_fidelity/models/rbf/kernels/matern_3_2.py,sha256=6i_-hSKj8wEoLWw7GdOwd4mMxmB8cdooqDeMfB5bGX4,2972
64
+ gemseo_multi_fidelity/models/rbf/kernels/matern_5_2.py,sha256=Ze2HxzDvNWRkVWQbuBjvotOPMee3ChsOWCavLRiavGE,3049
65
+ gemseo_multi_fidelity/models/rbf/kernels/rbf_kernel.py,sha256=PlZ87Oub1Diywy4p4fzXX04TnLKHeLO8mjKpYaaSGaY,4865
66
+ gemseo_multi_fidelity/models/taylor/__init__.py,sha256=mfcc1DQQ-oPCgKwEJ-vYfzle02U2RmOCeYQZl77WGnA,756
67
+ gemseo_multi_fidelity/models/taylor/taylor.py,sha256=ooABF8NBiB9k51Qc3Dq7EThrd9HlyOz4G0tEc5Wx4SU,6490
68
+ gemseo_multi_fidelity/settings/__init__.py,sha256=sPw16cvTcks8kaGFLLpptvSOZ1IppM3OWInjhHx2k0o,752
69
+ gemseo_multi_fidelity/settings/drivers.py,sha256=ee5TSyXlzyKNFfpsxDSJYmm1NGY6IyPmhBBVIfcTHDo,913
70
+ gemseo_multi_fidelity/settings/formulations.py,sha256=69Ztrrh9893k1NrYMXJLLjSJ-KEopXzglD13aXynO90,765
71
+ gemseo_multi_fidelity-0.0.1.dist-info/licenses/LICENSE.txt,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
72
+ gemseo_multi_fidelity-0.0.1.dist-info/METADATA,sha256=xQUBj1IC4o7JzrVRG5ynqUUNJ3jUbmli-5RncY8THAs,5482
73
+ gemseo_multi_fidelity-0.0.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
74
+ gemseo_multi_fidelity-0.0.1.dist-info/entry_points.txt,sha256=Zlt8OWNRJxPl9GE3kSB9NQuA_o2WDT8jhOnVKyzX_hw,63
75
+ gemseo_multi_fidelity-0.0.1.dist-info/top_level.txt,sha256=3lf1tfqayaamjBIdrmON5_EUyISasTMnhgZkSUBLKg0,22
76
+ gemseo_multi_fidelity-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [gemseo_plugins]
2
+ gemseo-multi-fidelity = gemseo_multi_fidelity