def test__getting_started__example_multinode_constraints(): from bioptim.examples.getting_started import example_multinode_constraints as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube.bioMod")
def test__getting_started__example_external_forces(): from bioptim.examples.getting_started import example_external_forces as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube_with_forces.bioMod")
def test__symmetrical_torque_driven_ocp__symmetry_by_mapping(): from bioptim.examples.symmetrical_torque_driven_ocp import symmetry_by_mapping as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cubeSym.bioMod", )
def test__getting_started__custom_objectives(): from bioptim.examples.getting_started import custom_objectives as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube.bioMod", )
def test__torque_driven_ocp__spring_load(): from bioptim.examples.torque_driven_ocp import spring_load as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/mass_point.bioMod")
def test__getting_started__example_multiphase(): from bioptim.examples.getting_started import example_multiphase as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube.bioMod", long_optim=True)
def test__acados__cube(): from bioptim.examples.acados import cube as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=10, tf=2)
def test__acados__pendulum(): from bioptim.examples.acados import pendulum as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", n_shooting=41, final_time=3)
def test__getting_started__custom_initial_guess(): from bioptim.examples.getting_started import custom_initial_guess as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp(biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=30, final_time=2)
def test__getting_started__pendulum(): from bioptim.examples.getting_started import pendulum as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=3, n_shooting=100, )
def test__torque_driven_ocp__phase_transition_uneven_variable_number(): from bioptim.examples.torque_driven_ocp import phase_transition_uneven_variable_number as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/double_pendulum.bioMod", biorbd_model_path_withTranslations=bioptim_folder + "/models/double_pendulum_with_translations.bioMod", )
def test__optimal_time_ocp__pendulum_min_time_Mayer(): from bioptim.examples.optimal_time_ocp import pendulum_min_time_Mayer as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=2, n_shooting=50, )
def test__track__track_segment_on_rt(): from bioptim.examples.track import track_segment_on_rt as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube_and_line.bioMod", n_shooting=30, final_time=1, )
def test__getting_started__example_cyclic_movement(): from bioptim.examples.getting_started import example_cyclic_movement as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=30, final_time=2, loop_from_constraint=True, )
def test__muscle_driven_ocp__static_arm(): from bioptim.examples.muscle_driven_ocp import static_arm as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/arm26.bioMod", final_time=3, n_shooting=50, weight=1000, )
def test__track__track_marker_on_segment(): from bioptim.examples.track import track_marker_on_segment as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube_and_line.bioMod", n_shooting=30, final_time=2, initialize_near_solution=True, )
def test__torque_driven_ocp__track_markers_with_torque_actuators(): from bioptim.examples.torque_driven_ocp import track_markers_with_torque_actuators as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=30, final_time=2, actuator_type=1, )
def test__torque_driven_ocp__trampo_quaternions(): from bioptim.examples.torque_driven_ocp import trampo_quaternions as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/TruncAnd2Arm_Quaternion.bioMod", n_shooting=5, final_time=0.25, )
def test__optimal_time_ocp__time_constraint(): from bioptim.examples.optimal_time_ocp import time_constraint as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=2, n_shooting=50, time_min=0.6, time_max=1, )
def test__acados__static_arm(): from bioptim.examples.acados import static_arm as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/arm26.bioMod", final_time=2, x_warm=None, n_shooting=51, use_sx=False, n_threads=6, )
def test__torque_driven_ocp__maximize_predicted_height_CoM(): from bioptim.examples.torque_driven_ocp import maximize_predicted_height_CoM as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/2segments_4dof_2contacts.bioMod", phase_time=0.5, n_shooting=20, use_actuators=False, objective_name="MINIMIZE_COM_VELOCITY", com_constraints=True, )
def test__getting_started__example_inequality_constraint(): from bioptim.examples.getting_started import example_inequality_constraint as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/../torque_driven_ocp/models/2segments_4dof_2contacts.bioMod", phase_time=0.3, n_shooting=10, min_bound=50, max_bound=np.inf, mu=0.2, )
def test_acados_custom_dynamics(problem_type_custom): if platform == "win32": print("Test for ACADOS on Windows is skipped") return from bioptim.examples.getting_started import custom_dynamics as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", problem_type_custom=problem_type_custom, ode_solver=OdeSolver.RK4(), use_sx=True, ) constraints = ConstraintList() constraints.add(ConstraintFcn.SUPERIMPOSE_MARKERS, node=Node.END, first_marker="m0", second_marker="m2") ocp.update_constraints(constraints) sol = ocp.solve(solver=Solver.ACADOS()) # Check some of the results q, qdot, tau = sol.states["q"], sol.states["qdot"], sol.controls["tau"] # initial and final position np.testing.assert_almost_equal(q[:, 0], np.array((2, 0, 0)), decimal=6) np.testing.assert_almost_equal(q[:, -1], np.array((2, 0, 1.57))) # initial and final velocities np.testing.assert_almost_equal(qdot[:, 0], np.array((0, 0, 0))) np.testing.assert_almost_equal(qdot[:, -1], np.array((0, 0, 0))) # initial and final controls np.testing.assert_almost_equal(tau[:, 0], np.array((0, 9.81, 2.27903226))) np.testing.assert_almost_equal(tau[:, -2], np.array((0, 9.81, -2.27903226)))
def test_acados_several_mayer(cost_type): if platform == "win32": print("Test for ACADOS on Windows is skipped") return from bioptim.examples.acados import cube as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=10, tf=2, ) objective_functions = ObjectiveList() objective_functions.add(ObjectiveFcn.Mayer.MINIMIZE_STATE, key="q", index=[0, 1], target=np.array([[1.0, 2.0]]).T) objective_functions.add(ObjectiveFcn.Mayer.MINIMIZE_STATE, key="q", index=[2], target=np.array([[3.0]])) ocp.update_objectives(objective_functions) solver = Solver.ACADOS() solver.set_cost_type(cost_type) sol = ocp.solve(solver=solver) # Check end state value q = sol.states["q"] np.testing.assert_almost_equal(q[0, -1], 1.0) np.testing.assert_almost_equal(q[1, -1], 2.0) np.testing.assert_almost_equal(q[2, -1], 3.0) # Clean test folder os.remove(f"./acados_ocp.json") shutil.rmtree(f"./c_generated_code/")
def test__optimal_time_ocp__multiphase_time_constraint(): from bioptim.examples.optimal_time_ocp import multiphase_time_constraint as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) final_time = [2, 5, 4] time_min = [1, 3, 0.1] time_max = [2, 4, 0.8] ns = [20, 30, 20] ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", final_time=final_time, time_min=time_min, time_max=time_max, n_shooting=ns, )
def test_acados_options(cost_type): if platform == "win32" or platform == "darwin": print("Tests for ACADOS options on Windows and Mac are skipped") return from bioptim.examples.acados import pendulum as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=0.6, n_shooting=200, ) tols = [1e-1, 1e1] iter = [] for tol in tols: solver = Solver.ACADOS() solver.set_cost_type(cost_type) solver.set_nlp_solver_tol_stat(tol) sol = ocp.solve(solver=solver) iter += [sol.iterations] # Check that tol impacted convergence for i in range(len(tols) - 1): np.testing.assert_array_less(iter[i + 1], iter[i]) # Clean test folder os.remove(f"./acados_ocp.json") shutil.rmtree(f"./c_generated_code/")
def test_acados_control_lagrange_and_state_mayer(cost_type): if platform == "win32": print("Test for ACADOS on Windows is skipped") return from bioptim.examples.acados import cube as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) n_shooting = 10 target = np.array([[2]]) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=n_shooting, tf=2, ) objective_functions = ObjectiveList() objective_functions.add(ObjectiveFcn.Lagrange.MINIMIZE_CONTROL, key="tau", multi_thread=False) objective_functions.add( ObjectiveFcn.Mayer.MINIMIZE_STATE, key="q", index=[0], target=target, weight=1000, multi_thread=False ) ocp.update_objectives(objective_functions) solver = Solver.ACADOS() solver.set_cost_type(cost_type) sol = ocp.solve(solver=solver) # Check end state value q = sol.states["q"] np.testing.assert_almost_equal(q[0, -1], target.squeeze()) # Clean test folder os.remove(f"./acados_ocp.json") shutil.rmtree(f"./c_generated_code/")
def test_acados_one_parameter(): if platform == "win32": print("Test for ACADOS on Windows is skipped") return from bioptim.examples.getting_started import custom_parameters as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=1, n_shooting=100, optim_gravity=True, optim_mass=False, min_g=np.array([-1, -1, -10]), max_g=np.array([1, 1, -5]), min_m=10, max_m=30, target_g=np.array([0, 0, -9.81]), target_m=20, use_sx=True, ) model = ocp.nlp[0].model objectives = ObjectiveList() objectives.add(ObjectiveFcn.Mayer.TRACK_STATE, key="q", target=np.array([[0, 3.14]]).T, weight=100000) objectives.add(ObjectiveFcn.Mayer.TRACK_STATE, key="qdot", target=np.array([[0, 0]]).T, weight=100) objectives.add(ObjectiveFcn.Lagrange.MINIMIZE_CONTROL, key="tau", index=1, weight=10, multi_thread=False) objectives.add(ObjectiveFcn.Lagrange.MINIMIZE_STATE, key="qdot", weight=0.000000010, multi_thread=False) ocp.update_objectives(objectives) # Path constraint x_bounds = QAndQDotBounds(model) x_bounds[[0, 1, 2, 3], 0] = 0 u_bounds = Bounds([-300] * model.nbQ(), [300] * model.nbQ()) ocp.update_bounds(x_bounds, u_bounds) solver = Solver.ACADOS() solver.set_nlp_solver_tol_eq(1e-3) sol = ocp.solve(solver=solver) # Check some of the results q, qdot, tau, gravity = sol.states["q"], sol.states["qdot"], sol.controls["tau"], sol.parameters["gravity_xyz"] # initial and final position np.testing.assert_almost_equal(q[:, 0], np.array((0, 0)), decimal=6) np.testing.assert_almost_equal(q[:, -1], np.array((0, 3.14)), decimal=6) # initial and final velocities np.testing.assert_almost_equal(qdot[:, 0], np.array((0, 0)), decimal=6) np.testing.assert_almost_equal(qdot[:, -1], np.array((0, 0)), decimal=6) # parameters np.testing.assert_almost_equal(gravity[-1, :], np.array([-9.81]), decimal=6) # Clean test folder os.remove(f"./acados_ocp.json") shutil.rmtree(f"./c_generated_code/")
def test__getting_started__custom_parameters(): from bioptim.examples.getting_started import custom_parameters as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/pendulum.bioMod", final_time=3, n_shooting=100, optim_gravity=True, optim_mass=True, min_g=np.array([-1, -1, -10]), max_g=np.array([1, 1, -5]), min_m=10, max_m=30, target_g=np.array([0, 0, -9.81]), target_m=20, )
def test_acados_one_end_constraints(): if platform == "win32": print("Test for ACADOS on Windows is skipped") return from bioptim.examples.acados import cube as ocp_module bioptim_folder = os.path.dirname(ocp_module.__file__) ocp = ocp_module.prepare_ocp( biorbd_model_path=bioptim_folder + "/models/cube.bioMod", n_shooting=10, tf=2, ) model = ocp.nlp[0].model objective_functions = ObjectiveList() objective_functions.add( ObjectiveFcn.Mayer.TRACK_STATE, index=0, key="q", weight=100, target=np.array([[1]]), multi_thread=False ) objective_functions.add(ObjectiveFcn.Lagrange.MINIMIZE_CONTROL, key="tau", weight=100, multi_thread=False) ocp.update_objectives(objective_functions) # Path constraint x_bounds = QAndQDotBounds(model) x_bounds[1:6, [0, -1]] = 0 x_bounds[0, 0] = 0 ocp.update_bounds(x_bounds=x_bounds) constraints = ConstraintList() constraints.add(ConstraintFcn.SUPERIMPOSE_MARKERS, node=Node.END, first_marker="m0", second_marker="m2") ocp.update_constraints(constraints) sol = ocp.solve(solver=Solver.ACADOS()) # Check some of the results q, qdot, tau = sol.states["q"], sol.states["qdot"], sol.controls["tau"] # final position np.testing.assert_almost_equal(q[:, -1], np.array((2, 0, 0)), decimal=6) # initial and final controls np.testing.assert_almost_equal(tau[:, 0], np.array((2.72727272, 9.81, 0)), decimal=6) np.testing.assert_almost_equal(tau[:, -2], np.array((-2.72727272, 9.81, 0)), decimal=6)