diff --git a/changelog/fragments/1450.fixed.rst b/changelog/fragments/1450.fixed.rst new file mode 100644 index 0000000000000000000000000000000000000000..145a57ec0530be8ada8b31eb91fab73d70722648 --- /dev/null +++ b/changelog/fragments/1450.fixed.rst @@ -0,0 +1 @@ +The method ``OptimizationResult.from_optimization_problem()`` properly returns an ``OptimizationResult`` object when giving an ``OptimizationProblem`` as an argument. diff --git a/src/gemseo/algos/optimization_result.py b/src/gemseo/algos/optimization_result.py index 90480f709db346c98b3288a051afe35c96c32383..1baf6126e43f37f93f22358ac73b2be41dd6d999 100644 --- a/src/gemseo/algos/optimization_result.py +++ b/src/gemseo/algos/optimization_result.py @@ -237,6 +237,8 @@ class OptimizationResult(metaclass=ABCGoogleDocstringInheritanceMeta): Returns: The optimization result associated with the optimization problem. """ + if problem.solution and not hasattr(problem.objective, "n_calls"): + problem.objective.n_calls = problem.solution.n_obj_call if not problem.database: return cls(n_obj_call=0, **fields_) diff --git a/tests/algos/opt/test_opt_result.py b/tests/algos/opt/test_opt_result.py index 430c8291d523451021fca4c1cb6e7b5c07a74dca..84bcf3aedee062aa9f0b2ca3490ef016d9b7b1ca 100644 --- a/tests/algos/opt/test_opt_result.py +++ b/tests/algos/opt/test_opt_result.py @@ -24,10 +24,12 @@ from numpy import array from gemseo import execute_algo from gemseo.algos.design_space import DesignSpace +from gemseo.algos.opt.factory import OptimizationLibraryFactory from gemseo.algos.optimization_problem import OptimizationProblem from gemseo.algos.optimization_result import OptimizationResult from gemseo.core.mdo_functions.mdo_function import MDOFunction from gemseo.disciplines.analytic import AnalyticDiscipline +from gemseo.problems.optimization.power_2 import Power2 from gemseo.scenarios.doe_scenario import DOEScenario from gemseo.utils.repr_html import REPR_HTML_WRAPPER @@ -229,3 +231,14 @@ def test_from_optimization_problem( constraint_values={f"[g{sign}1.0]": array([constraint])}, constraints_grad={f"[g{sign}1.0]": None}, ) + + +def test_opt_result_from_opt_problem(tmp_path): + """Test the creation of an OptimizationResult from an OptimizationProblem.""" + problem = Power2() + OptimizationLibraryFactory().execute(problem, algo_name="SLSQP", max_iter=50) + out_file = tmp_path / "output.hdf" + problem.to_hdf(out_file) + read_problem = OptimizationProblem.from_hdf(out_file) + opt_result = OptimizationResult.from_optimization_problem(read_problem) + assert isinstance(opt_result, OptimizationResult)