Exemple #1
0
    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)
Exemple #2
0
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)
Exemple #4
0
    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")
Exemple #5
0
    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]
Exemple #6
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)
Exemple #8
0
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()
Exemple #10
0
        "../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()