diff --git a/bioptim/optimization/optimal_control_program.py b/bioptim/optimization/optimal_control_program.py index d9c03f1ab..3bccdb009 100644 --- a/bioptim/optimization/optimal_control_program.py +++ b/bioptim/optimization/optimal_control_program.py @@ -1093,6 +1093,8 @@ def update_bounds( ) for key in parameter_bounds.keys(): + if parameter_bounds[key].type != InterpolationType.CONSTANT: + raise ValueError(f"Parameter bounds for '{key}' must use InterpolationType.CONSTANT") self.parameter_bounds.add(key, parameter_bounds[key], phase=0) for nlp in self.nlp: @@ -1156,6 +1158,8 @@ def update_initial_guess( ) for key in parameter_init.keys(): + if parameter_init[key].type != InterpolationType.CONSTANT: + raise ValueError(f"Parameter initial guess for '{key}' must use InterpolationType.CONSTANT") self.parameter_init.add(key, parameter_init[key], phase=0) def add_plot(self, fig_name: Str, update_function: Callable, phase: Int = -1, **parameters: Any) -> None: diff --git a/bioptim/optimization/receding_horizon_optimization.py b/bioptim/optimization/receding_horizon_optimization.py index a0dd3e4af..557a26e25 100644 --- a/bioptim/optimization/receding_horizon_optimization.py +++ b/bioptim/optimization/receding_horizon_optimization.py @@ -918,7 +918,7 @@ def _initialize_one_cycle(self, dt: Float, states: AnyDict, controls: AnyDict, p p_init.add( key, parameters_tp, - interpolation=InterpolationType.EACH_FRAME, + interpolation=InterpolationType.CONSTANT, phase=0, ) diff --git a/tests/shard6/test_update_bounds_and_init.py b/tests/shard6/test_update_bounds_and_init.py index e9573e346..6e915307c 100644 --- a/tests/shard6/test_update_bounds_and_init.py +++ b/tests/shard6/test_update_bounds_and_init.py @@ -212,6 +212,16 @@ def my_parameter_function(bio_model, parameter: Parameter, extra_value): parameter_bounds=parameter_bounds, ) + invalid_parameter_bounds = BoundsList() + invalid_parameter_bounds.add("gravity_z", min_bound=[g_min], max_bound=[g_max]) + with pytest.raises(ValueError, match="Parameter bounds for 'gravity_z' must use InterpolationType.CONSTANT"): + ocp.update_bounds(parameter_bounds=invalid_parameter_bounds) + + invalid_parameter_init = InitialGuessList() + invalid_parameter_init.add("gravity_z", [[g_init, g_init]], interpolation=InterpolationType.LINEAR) + with pytest.raises(ValueError, match="Parameter initial guess for 'gravity_z' must use InterpolationType.CONSTANT"): + ocp.update_initial_guess(parameter_init=invalid_parameter_init) + # Before modifying expected = np.array([[0.1] + [-np.inf] * (nq * 2) * (ns + 1) + [-np.inf] * nq * ns + [g_min]]).T npt.assert_almost_equal(ocp.bounds_vectors[0], expected)