2 from __future__
import print_function, division
4 import matplotlib.pyplot
as plt
5 import pyexotica
as exo
6 from collections
import OrderedDict
9 def test_solver(use_new_boxqp, use_polynomial_linesearch, use_cholesky):
10 config =
'{exotica_examples}/resources/configs/dynamic_time_indexed/13_control_limited_ddp_quadrotor.xml' 12 _, problem_config = exo.Initializers.load_xml_full(config)
13 problem = exo.Setup.create_problem(problem_config)
14 solver_config = (
'exotica/ControlLimitedDDPSolver',
15 {
'RegularizationRate': 1e-05,
16 'UseSecondOrderDynamics':
False,
18 'UseNewBoxQP': use_new_boxqp,
20 'BoxQPUsePolynomialLinesearch': use_polynomial_linesearch,
21 'FunctionTolerancePatience': 10,
22 'FunctionTolerance': 0.001,
23 'MinimumRegularization': 1e-12,
24 'ThresholdRegularizationDecrease': 0.5,
25 'BoxQPUseCholeskyFactorization': use_cholesky,
26 'MaximumRegularization': 1000.0,
27 'ClampControlsInForwardPass':
True,
28 'ThresholdRegularizationIncrease': 0.01,
30 solver = exo.Setup.create_solver(solver_config)
32 solver.specify_problem(problem)
36 print(
'Solver terminated with:', problem.termination_criterion)
37 print(
'Solver took:', solver.get_planning_time())
39 costs = problem.get_cost_evolution()
42 if __name__ ==
"__main__":
43 results = OrderedDict()
45 for use_new_boxqp
in [
True,
False]:
46 for use_polynomial_linesearch
in [
True,
False]:
47 for use_cholesky
in [
True,
False]:
48 name =
'{0}, {1}, {2}'.format(
'New' if use_new_boxqp
else 'Old',
49 'Polynomial Linesearch' if use_polynomial_linesearch
else 'Linear Linesearch',
50 'Cholesky' if use_cholesky
else 'Regular Inverse')
51 results[name] =
test_solver(use_new_boxqp, use_polynomial_linesearch, use_cholesky)
53 fig = plt.figure(1, (12,6))
56 for setting
in results:
57 plt.plot(results[setting][1], label=setting)
61 plt.xlabel(
'Iterations')
65 for setting
in results:
66 plt.plot(results[setting][0], results[setting][1], label=setting)
69 plt.xlabel(
'Time (s)')
73 fig.savefig(
'boxqp_configurations.png')
def test_solver(use_new_boxqp, use_polynomial_linesearch, use_cholesky)