def set_up_imported_gnsf_model(acados_formulation): gnsf = acados_formulation.gnsf_model # check CasADi version # dump_casadi_version = gnsf['casadi_version'] # casadi_version = CasadiMeta.version() # if not casadi_version == dump_casadi_version: # print("WARNING: GNSF model was dumped with another CasADi version.\n" # + "This might yield errors. Please use the same version for compatibility, serialize version: " # + dump_casadi_version + " current Python CasADi verison: " + casadi_version) # input("Press any key to attempt to continue...") # load model phi_fun = Function.deserialize(gnsf['phi_fun']) phi_fun_jac_y = Function.deserialize(gnsf['phi_fun_jac_y']) phi_jac_y_uhat = Function.deserialize(gnsf['phi_jac_y_uhat']) get_matrices_fun = Function.deserialize(gnsf['get_matrices_fun']) # obtain gnsf dimensions size_gnsf_A = get_matrices_fun.size_out(0) acados_formulation.dims.gnsf_nx1 = size_gnsf_A[1] acados_formulation.dims.gnsf_nz1 = size_gnsf_A[0] - size_gnsf_A[1] acados_formulation.dims.gnsf_nuhat = max(phi_fun.size_in(1)) acados_formulation.dims.gnsf_ny = max(phi_fun.size_in(0)) acados_formulation.dims.gnsf_nout = max(phi_fun.size_out(0)) # save gnsf functions in model acados_formulation.model.phi_fun = phi_fun acados_formulation.model.phi_fun_jac_y = phi_fun_jac_y acados_formulation.model.phi_jac_y_uhat = phi_jac_y_uhat acados_formulation.model.get_matrices_fun = get_matrices_fun # get_matrices_fun = Function([model_name,'_gnsf_get_matrices_fun'], {dummy},... # {A, B, C, E, L_x, L_xdot, L_z, L_u, A_LO, c, E_LO, B_LO,... # nontrivial_f_LO, purely_linear, ipiv_x, ipiv_z, c_LO}); get_matrices_out = get_matrices_fun(0) acados_formulation.model.gnsf['nontrivial_f_LO'] = int( get_matrices_out[12]) acados_formulation.model.gnsf['purely_linear'] = int(get_matrices_out[13]) if "f_lo_fun_jac_x1k1uz" in gnsf: f_lo_fun_jac_x1k1uz = Function.deserialize(gnsf['f_lo_fun_jac_x1k1uz']) acados_formulation.model.f_lo_fun_jac_x1k1uz = f_lo_fun_jac_x1k1uz else: dummy_var_x1 = SX.sym('dummy_var_x1', acados_formulation.dims.gnsf_nx1) dummy_var_x1dot = SX.sym('dummy_var_x1dot', acados_formulation.dims.gnsf_nx1) dummy_var_z1 = SX.sym('dummy_var_z1', acados_formulation.dims.gnsf_nz1) dummy_var_u = SX.sym('dummy_var_z1', acados_formulation.dims.nu) dummy_var_p = SX.sym('dummy_var_z1', acados_formulation.dims.np) empty_var = SX.sym('empty_var', 0, 0) empty_fun = Function('empty_fun', \ [dummy_var_x1, dummy_var_x1dot, dummy_var_z1, dummy_var_u, dummy_var_p], [empty_var]) acados_formulation.model.f_lo_fun_jac_x1k1uz = empty_fun del acados_formulation.gnsf_model
def set_up_imported_gnsf_model(acados_formulation): gnsf = acados_formulation.gnsf_model # check CasADi version dump_casadi_version = gnsf['casadi_version'] casadi_version = CasadiMeta.version() if not casadi_version == dump_casadi_version: print( "WARNING: GNSF model was dumped with another CasADi version.\n" + "This might yield errors. Please use the same version for compatibility, serialize version: " + dump_casadi_version + " current Python CasADi verison: " + casadi_version) input("Press any key to attempt to continue...") # load model phi_fun = Function.deserialize(gnsf['phi_fun']) phi_fun_jac_y = Function.deserialize(gnsf['phi_fun_jac_y']) phi_jac_y_uhat = Function.deserialize(gnsf['phi_jac_y_uhat']) get_matrices_fun = Function.deserialize(gnsf['get_matrices_fun']) # obtain gnsf dimensions size_gnsf_A = get_matrices_fun.size_out(0) acados_formulation.dims.gnsf_nx1 = size_gnsf_A[1] acados_formulation.dims.gnsf_nz1 = size_gnsf_A[0] - size_gnsf_A[1] acados_formulation.dims.gnsf_nuhat = max(phi_fun.size_in(1)) acados_formulation.dims.gnsf_ny = max(phi_fun.size_in(0)) acados_formulation.dims.gnsf_nout = max(phi_fun.size_out(0)) # save gnsf functions in model acados_formulation.model.phi_fun = phi_fun acados_formulation.model.phi_fun_jac_y = phi_fun_jac_y acados_formulation.model.phi_jac_y_uhat = phi_jac_y_uhat acados_formulation.model.get_matrices_fun = get_matrices_fun if "f_lo_fun_jac_x1k1uz" in gnsf: f_lo_fun_jac_x1k1uz = Function.deserialize(gnsf['f_lo_fun_jac_x1k1uz']) acados_formulation.model.f_lo_fun_jac_x1k1uz = f_lo_fun_jac_x1k1uz else: dummy_var_x1 = SX.sym('dummy_var_x1', acados_formulation.dims.gnsf_nx1) dummy_var_x1dot = SX.sym('dummy_var_x1dot', acados_formulation.dims.gnsf_nx1) dummy_var_z1 = SX.sym('dummy_var_z1', acados_formulation.dims.gnsf_nz1) dummy_var_u = SX.sym('dummy_var_z1', acados_formulation.dims.nu) dummy_var_p = SX.sym('dummy_var_z1', acados_formulation.dims.np) empty_var = SX.sym('empty_var', 0, 0) empty_fun = Function('empty_fun', \ [dummy_var_x1, dummy_var_x1dot, dummy_var_z1, dummy_var_u, dummy_var_p], [empty_var]) acados_formulation.model.f_lo_fun_jac_x1k1uz = empty_fun del acados_formulation.gnsf_model
def set_up_imported_gnsf_model(acados_ocp): gnsf = acados_ocp.gnsf_model # check CasADi version dump_casadi_version = gnsf['casadi_version'] casadi_version = CasadiMeta.version() if not casadi_version == dump_casadi_version: raise Exception("GNSF model was dumped with another CasADi version.\n" + "Please use the same version for compatibility, serialize version:" + dump_casadi_version + " current Python CasADi verison: " + casadi_version) # load model phi_fun = Function.deserialize(gnsf['phi_fun']) phi_fun_jac_y = Function.deserialize(gnsf['phi_fun_jac_y']) phi_jac_y_uhat = Function.deserialize(gnsf['phi_jac_y_uhat']) f_lo_fun_jac_x1k1uz = Function.deserialize(gnsf['f_lo_fun_jac_x1k1uz']) get_matrices_fun = Function.deserialize(gnsf['get_matrices_fun']) # obtain gnsf dimensions size_gnsf_A = get_matrices_fun.size_out(0) acados_ocp.dims.gnsf_nx1 = size_gnsf_A[1] acados_ocp.dims.gnsf_nz1 = size_gnsf_A[0] - size_gnsf_A[1] acados_ocp.dims.gnsf_nuhat = max(phi_fun.size_in(1)) acados_ocp.dims.gnsf_ny = max(phi_fun.size_in(0)) acados_ocp.dims.gnsf_nout = max(phi_fun.size_out(0)) # save gnsf functions in model acados_ocp.model.phi_fun = phi_fun acados_ocp.model.phi_fun_jac_y = phi_fun_jac_y acados_ocp.model.phi_jac_y_uhat = phi_jac_y_uhat acados_ocp.model.f_lo_fun_jac_x1k1uz = f_lo_fun_jac_x1k1uz acados_ocp.model.get_matrices_fun = get_matrices_fun del acados_ocp.gnsf_model