csu-hmc / opty

A library for using direct collocation in the optimization of dynamic systems.
http://opty.readthedocs.io
Other
86 stars 20 forks source link

key error in opty #144

Closed Peter230655 closed 2 months ago

Peter230655 commented 2 months ago

I am trying to simulate a 2D rocket. When I run it, I get this error below.

What could key error mean, so I can start looking for my mistake.

Thanks for any hints!

KeyError Traceback (most recent call last) Cell In[14], line 74 70 for i in range(2): 72 instance_constraints = tuple(xi.subs({t: t0}) - xi_val for xi, xi_val in initial_state_constraints.items()) + tuple(xi.subs({t: tf}) - xi_val for xi, xi_val in final_state_constraints.items()) ---> 74 prob = Problem(obj, obj_grad, EOM, state_symbols, num_nodes, interval_value, 75 known_parameter_map=par_map, 76 instance_constraints=instance_constraints, 77 bounds=bounds, 78 integration_method=methode) 80 prob.add_option('max_iter', 3000 ) # default is 3000 82 # Find the optimal solution.

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\direct_collocation.py:53, in _DocInherit.get_with_inst..f(*args, kwargs) 51 @wraps(self.mthd, assigned=('name', 'module')) 52 def f(*args, *kwargs): ---> 53 return self.mthd(obj, args, kwargs)

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\direct_collocation.py:121, in Problem.init(self, obj, obj_grad, *args, **kwargs) 119 self.con = self.collocator.generate_constraint_function() 120 logging.info('Constraint function generated.') --> 121 self.con_jac = self.collocator.generate_jacobian_function() 122 logging.info('Jacobian function generated.') 124 self.con_jac_rows, self.con_jac_cols = \ 125 self.collocator.jacobian_indices()

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\direct_collocation.py:1470, in ConstraintCollocator.generate_jacobian_function(self) 1467 """Returns a function which evaluates the Jacobian of the 1468 constraints given the array of free optimization variables.""" 1469 logging.info('Generating jacobian function.') -> 1470 self._gen_multi_arg_con_jac_func() 1471 return self._wrap_constraint_funcs(self._multi_arg_con_jac_func, 'jac')

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\direct_collocation.py:1273, in ConstraintCollocator._gen_multi_arg_con_jac_func(self) 1271 discrete_eom_matrix = sm.ImmutableDenseMatrix(self.discrete_eom) 1272 wrt_matrix = sm.ImmutableDenseMatrix([list(wrt)]) -> 1273 symbolic_partials = _forward_jacobian(discrete_eom_matrix, 1274 wrt_matrix.T) 1276 # This generates a numerical function that evaluates the matrix of 1277 # partial derivatives. This function returns the non-zero elements 1278 # needed to build the sparse constraint Jacobian. 1279 logging.info('Compiling the Jacobian function.')

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\utils.py:111, in _forward_jacobian(expr, wrt) 108 absolute_derivative += partial_derivative absolute_derivative_mapping.get(free_symbol, zeros) 109 absolute_derivative_mapping[symbol] = sm.ImmutableDenseMatrix([[add_to_cache(a)[0] for a in absolute_derivative]]) --> 111 replaced_jacobian = sm.ImmutableDenseMatrix.vstack([absolute_derivative_mapping[e] for e in reduced_matrix]) 112 finish = timer() 113 logging.info(f'Completed in {finish - start:.2f}s')

File c:\Users\Peter\anaconda3\envs\sympy-dev\Lib\site-packages\opty\utils.py:111, in (.0) 108 absolute_derivative += partial_derivative absolute_derivative_mapping.get(free_symbol, zeros) 109 absolute_derivative_mapping[symbol] = sm.ImmutableDenseMatrix([[add_to_cache(a)[0] for a in absolute_derivative]]) --> 111 replaced_jacobian = sm.ImmutableDenseMatrix.vstack([absolute_derivative_mapping[e] for e in reduced_matrix]) 112 finish = timer() 113 logging.info(f'Completed in {finish - start:.2f}s')

KeyError: 0

Peter230655 commented 2 months ago

Found my stupid error