def save_and_load(sol, ocp, test_solve_of_loaded=False): file_path = "test.bo" ocp.save(sol, file_path) ocp_load, sol_load = OptimalControlProgram.load(file_path) TestUtils.deep_assert(sol, sol_load) TestUtils.deep_assert(sol_load, sol) if test_solve_of_loaded: sol_from_load = ocp_load.solve() TestUtils.deep_assert(sol, sol_from_load) TestUtils.deep_assert(sol_from_load, sol) TestUtils.deep_assert(ocp_load, ocp) TestUtils.deep_assert(ocp, ocp_load) os.remove(file_path) file_path_bob = "test.bob" ocp.save_get_data(sol, file_path_bob, interpolate_nb_frames=-1, concatenate=True) data = Data.get_data(ocp, sol, file_path_bob, interpolate_nb_frames=-1, concatenate=True) with open(file_path_bob, "rb") as file: data_load = pickle.load(file)["data"] TestUtils.deep_assert(data, data_load) TestUtils.deep_assert(data_load, data) os.remove(file_path_bob)
def test_add_new_plot(): # Load graphs_one_phase PROJECT_FOLDER = Path(__file__).parent / ".." spec = importlib.util.spec_from_file_location( "align_markers", str(PROJECT_FOLDER) + "/examples/torque_driven_ocp/align_markers.py") graphs_one_phase = importlib.util.module_from_spec(spec) spec.loader.exec_module(graphs_one_phase) ocp = graphs_one_phase.prepare_ocp( biorbd_model_path=str(PROJECT_FOLDER) + "/examples/torque_driven_ocp/cube.bioMod", number_shooting_points=20, final_time=0.5, ) sol = ocp.solve(solver_options={"max_iter": 1}) # Saving/loading files reset the plot settings to normal save_name = "test_plot.bo" ocp.save(sol, save_name) # Test 1 - Working plot ocp.add_plot("My New Plot", lambda x, u, p: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Test 2 - Combine using combine_to is not allowed ocp, sol = OptimalControlProgram.load(save_name) with pytest.raises(RuntimeError): ocp.add_plot("My New Plot", lambda x, u, p: x[0:2, :], combine_to="NotAllowed") # Test 3 - Create a completely new plot ocp, sol = OptimalControlProgram.load(save_name) ocp.add_plot("My New Plot", lambda x, u, p: x[0:2, :]) ocp.add_plot("My Second New Plot", lambda x, p, u: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Test 4 - Combine to the first using fig_name ocp, sol = OptimalControlProgram.load(save_name) ocp.add_plot("My New Plot", lambda x, u, p: x[0:2, :]) ocp.add_plot("My New Plot", lambda x, u, p: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Delete the saved file os.remove(save_name)
def test_add_new_plot(): ocp = graphs_one_phase.prepare_ocp( biorbd_model_path=str(PROJECT_FOLDER) + "/examples/torque_driven_ocp/cube.bioMod", number_shooting_points=20, final_time=0.5, ) sol = ocp.solve(options_ipopt={"max_iter": 1}) # Saving/loading files reset the plot settings to normal save_name = "test_plot.bo" ocp.save(sol, save_name) # Test 1 - Working plot ocp.add_plot("My New Plot", lambda x, u: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Test 2 - Combine using combine_to is not allowed ocp, sol = OptimalControlProgram.load(save_name) with pytest.raises(RuntimeError): ocp.add_plot("My New Plot", lambda x, u: x[0:2, :], combine_to="NotAllowed") # Test 3 - Create a completely new plot ocp, sol = OptimalControlProgram.load(save_name) ocp.add_plot("My New Plot", lambda x, u: x[0:2, :]) ocp.add_plot("My Second New Plot", lambda x, u: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Test 4 - Combine to the first using fig_name ocp, sol = OptimalControlProgram.load(save_name) ocp.add_plot("My New Plot", lambda x, u: x[0:2, :]) ocp.add_plot("My New Plot", lambda x, u: x[0:2, :]) ShowResult(ocp, sol).graphs(automatically_organize=False) # Delete the saved file os.remove(save_name)
def save_and_load(sol, ocp, test_solve_of_loaded=False): ocp.save(sol, "test.bo") ocp_load, sol_load = OptimalControlProgram.load("test.bo") TestUtils.deep_assert(sol, sol_load) TestUtils.deep_assert(sol_load, sol) if test_solve_of_loaded: sol_from_load = ocp_load.solve() TestUtils.deep_assert(sol, sol_from_load) TestUtils.deep_assert(sol_from_load, sol) TestUtils.deep_assert(ocp_load, ocp) TestUtils.deep_assert(ocp, ocp_load) os.remove("test.bo")
OptimalControlProgram, Data, ShowResult, ) mat_contents = sio.loadmat("./data/excitations.mat") excitations_ref = mat_contents["excitations"] excitations_ref = excitations_ref[:, :] mat_contents = sio.loadmat("./data/markers.mat") marker_ref = mat_contents["markers"] marker_ref = marker_ref[:, 4:, :] mat_contents = sio.loadmat("./data/x_init.mat") x_init = mat_contents["x_init"][: 2 * 6, :] ocp, sol = OptimalControlProgram.load("activation_driven_ipopt.bo") states, controls = Data.get_data(ocp, sol["x"]) biorbd_model = biorbd.Model("arm_Belaise.bioMod") q = states["q"] qdot = states["q_dot"] x = vertcat(states["q"], states["q_dot"]) u = controls["muscles"] nlp = ocp.nlp[0] result = ShowResult(ocp, sol) # result.animate() # result.graphs() with open("sol_marker_activation_tracking_acados.bob", 'rb' ) as file : data = pickle.load(file) states_ac = data['data'][0]
ocp = prepare_ocp(biorbd_model_path="pendulum.bioMod", final_time=3, number_shooting_points=100, nb_threads=4) # --- Solve the program --- # tic = time() sol = ocp.solve(show_online_optim=False) toc = time() - tic print(f"Time to solve : {toc}sec") # --- Save result of get_data --- # ocp.save_get_data( sol, "pendulum.bob") # you don't have to specify the extension ".bob" # --- Load result of get_data --- # with open("pendulum.bob", "rb") as file: data = pickle.load(file)["data"] # --- Save the optimal control program and the solution --- # ocp.save(sol, "pendulum.bo") # you don't have to specify the extension ".bo" # --- Load the optimal control program and the solution --- # ocp_load, sol_load = OptimalControlProgram.load("pendulum.bo") # --- Show results --- # result = ShowResult(ocp_load, sol_load) result.graphs() result.animate()
import time import sys import pickle from biorbd_optim import OptimalControlProgram, ShowResult, Data, Simulate from up_and_down_bow import xia_model_dynamic, xia_model_configuration, xia_model_fibers, xia_initial_fatigue_at_zero file_path = "results/xia 5 phases/2020_7_25_upDown.bo" if len(sys.argv) > 1: file_path = str(sys.argv[1]) if not isinstance(file_path, str): t = time.localtime(time.time()) file_path = f"results/{t.tm_year}_{t.tm_mon}_{t.tm_mday}_upDown.bo" ocp, sol = OptimalControlProgram.load(file_path) d = Data.get_data(ocp, Simulate.from_solve(ocp, sol, single_shoot=True)) dict = {"data": d} with open(file_path[:-3] + "_single.bob", "wb") as file: pickle.dump(dict, file)
import numpy as np import biorbd import seaborn as sns ; sns.set() from casadi import MX, Function, vertcat, jacobian from matplotlib import pyplot as plt import csv from biorbd_optim import ( OptimalControlProgram, Data, ShowResult, PlotType, ) # --- Load OCP --- # biorbd_model = biorbd.Model("/home/amedeo/Documents/programmation/Article_Colombe/arm_Belaise_buchanan_de_groote.bioMod") ocp, sol , param = OptimalControlProgram.load("/home/amedeo/Documents/programmation/Article_Colombe/results/Q_tracking_with_residual_torque2020-08-06 15:32:25.127113.bo") states, controls, params = Data.get_data(ocp, sol["x"], get_parameters=True) print(params["shape_factor"]) q = states["q"] qdot = states["q_dot"] u = states["muscles"] x = vertcat(states["q"], states["q_dot"], states["muscles"]) e = controls["muscles"] nlp = ocp.nlp[0] # --- Casadi stuff ---# symbolic_states = MX.sym("x", nlp["nbQ"] + nlp["nbQdot"] + nlp["nbMuscle"], 1) symbolic_controls = MX.sym("e", nlp["nbMuscle"], 1) symbolic_length = MX.sym("l", nlp["nbMuscle"], 1) symbolic_force = MX.sym("f", nlp["nbMuscle"], 1) symbolic_tsl = MX.sym("tsl", nlp["nbMuscle"], 1)
final_time, X_init, U_init, X_bounds, U_bounds, objective_functions, constraints, ) if __name__ == "__main__": for initial_guess in InterpolationType: print(f"Solving problem using {initial_guess} initial guess") ocp = prepare_ocp("cube.bioMod", number_shooting_points=30, final_time=2, initial_guess=initial_guess) sol = ocp.solve() print("\n") # Save the last ocp ocp.save(sol, "cube_ocp_sol") ocp_loaded, sol_loaded = OptimalControlProgram.load("cube_ocp_sol.bo") # Rerun the loaded OCP sol_loaded_and_reran = ocp_loaded.solve() # Print the last solution result_plot = ShowResult(ocp, sol) result_plot.graphs()
"../models/jumper1contacts.bioMod", "../models/jumper1contacts.bioMod", "../models/jumper1contacts.bioMod", "../models/jumper2contacts.bioMod", ) # time_min = [0.1, 0.3, 0.2, 0.1, 0.1] # time_max = [0.4, 0.6, 2, 0.4, 0.4] phase_time = [0.2, 0.4, 1, 0.3, 0.3] number_shooting_points = [20, 20, 20, 20, 20] tic = time() run_and_save_ocp(model_path, phase_time=phase_time, number_shooting_points=number_shooting_points) ocp, sol = OptimalControlProgram.load("../Results/jumper5phases_sol.bo") # ocp = prepare_ocp(model_path=model_path, phase_time=phase_time, number_shooting_points=number_shooting_points, use_symmetry=True) # sol = ocp.solve(show_online_optim=False, options_ipopt={"hessian_approximation": "limited-memory", "max_iter": 2}) # --- Show results --- # # param = Data.get_data(ocp, sol["x"], get_states=False, get_controls=False, get_parameters=True) # print( # f"The optimized phases times are: {param['time'][0, 0]}s, {param['time'][1, 0]}s, {param['time'][2, 0]}s, {param['time'][3, 0]}s and {param['time'][4, 0]}s." # ) toc = time() - tic print(f"Time to solve : {toc}sec") result = ShowResult(ocp, sol) result.graphs()