@@ -207,12 +207,14 @@ def initialize_optimization(self, ipopt_options: dict=None, prescribed_inputs: d
207207 # Let rockit know which symbols that are prescribed inputs and which are controls
208208 for u_name in self .dae .u ():
209209 if prescribed_inputs and u_name in prescribed_inputs :
210- self .ocp .register_parameter (self .dae .var (u_name ), grid = "control+" )
210+ self .ocp .register_parameter (self .dae .var (u_name ), grid = "control+" , scale = self . dae . nominal ( u_name ) )
211211 else :
212212 self .ocp .register_control (self .dae .var (u_name ), scale = self .dae .nominal (u_name ))
213213
214214 # Let rockit know what the state dynamics are
215- self .ocp .set_der (self .x , self .f_xu_xyu (x = self .x , u = self .u )["ode" ])
215+ derivatives = self .f_xu_xyu (x = self .x , u = self .u )["ode" ]
216+ for idx , x_name in enumerate (self .dae .x ()):
217+ self .ocp .set_der (self .dae .var (x_name ), derivatives [idx ], scale = self .dae .nominal (x_name ))
216218
217219 def define_optimization (self ,
218220 x0 : np .array = None ,
@@ -234,7 +236,7 @@ def define_optimization(self,
234236
235237 # Set initial state values
236238 for x_name in self .dae .x ():
237- self .ocp .subject_to (self .ocp .at_t0 (self .dae .var (x_name )) == x0 [x_name ])
239+ self .ocp .subject_to (self .ocp .at_t0 (self .dae .var (x_name )) == x0 [x_name ], scale = self . dae . nominal ( x_name ) )
238240
239241 # Set the initial guess based on the initial state values
240242 for x_name in self .dae .x ():
0 commit comments