예제 #1
0
def run_and_save_ocp(model_path, phase_time, number_shooting_points):
    ocp = prepare_ocp(model_path=model_path,
                      phase_time=phase_time,
                      number_shooting_points=number_shooting_points,
                      use_symmetry=True,
                      use_actuators=False)
    for i in range(len(model_path)):
        ocp.add_plot("CoM",
                     lambda x, u, p: plot_CoM(x, model_path[i]),
                     phase_number=i,
                     plot_type=PlotType.PLOT)
        ocp.add_plot("CoM_dot",
                     lambda x, u, p: plot_CoM_dot(x, model_path[i]),
                     phase_number=i,
                     plot_type=PlotType.PLOT)
    sol = ocp.solve(solver_options={
        "hessian_approximation": "exact",
        "max_iter": 10000
    },
                    show_online_optim=True)

    OptimalControlProgram.save(ocp, sol, "../Results/jumper5phases_exact_sol")
    tic = time.time()
    sol, sol_obj = ocp.solve(
        show_online_optim=True,
        return_iterations=False,
        return_objectives=True,
        solver_options={
            "tol": 1e-3,
            "max_iter": 500000,
            "ipopt.bound_push": 1e-10,
            "ipopt.bound_frac": 1e-10,
            "ipopt.hessian_approximation": "limited-memory",
            "output_file": "output.bot",
            "ipopt.linear_solver": "mumps",  # "mumps",  # "ma57", "ma86"
            # "file_print_level": 5,
        },
    )
    toc = time.time() - tic
    print(f"Time to solve : {toc}sec")

    analyse = Objective.Printer(ocp, sol_obj)

    t = time.localtime(time.time())
    date = f"{t.tm_year}_{t.tm_mon}_{t.tm_mday}"
    OptimalControlProgram.save(ocp, sol, f"results/{date}_upDown.bo")
    OptimalControlProgram.save_get_data(ocp, sol, f"results/{date}_upDown.bob")
    OptimalControlProgram.save_get_data(ocp, sol, f"results/{date}_upDown_interpolate.bob", interpolate_nb_frames=100)

    # --- Show results --- #
    result = ShowResult(ocp, sol)
    result.graphs()
예제 #3
0
    # --- Solve the program --- #
    tic = time.time()
    sol, sol_iterations = ocp.solve(
        show_online_optim=True,
        return_iterations=True,
        solver_options={
            "tol": 1e-4,
            "max_iter": 3000,
            "ipopt.hessian_approximation": "limited-memory"
        },
    )
    toc = time.time() - tic
    print(f"Time to solve : {toc}sec")

    t = time.localtime(time.time())
    date = f"{t.tm_year}_{t.tm_mon}_{t.tm_mday}"
    OptimalControlProgram.save(ocp, sol, f"results/{date}_xiaModel.bo")
    OptimalControlProgram.save_get_data(ocp,
                                        sol,
                                        f"results/{date}_xiaModel.bob",
                                        sol_iterations=sol_iterations)
    OptimalControlProgram.save_get_data(
        ocp,
        sol,
        f"results/{date}_xiaModel_interpolate.bob",
        interpolate_nb_frames=100)

    # --- Show results --- #
    result = ShowResult(ocp, sol)
    result.graphs()