test_boxqp_configurations.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 from __future__ import print_function, division
3 
4 import matplotlib.pyplot as plt
5 import pyexotica as exo
6 from collections import OrderedDict
7 
8 
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'
11  # config = '{exotica_examples}/resources/configs/dynamic_time_indexed/07_control_limited_ddp_cartpole.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,
17  'MaxIterations': 100,
18  'UseNewBoxQP': use_new_boxqp,
19  'Name': u'Solver',
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,
29  'Debug': False})
30  solver = exo.Setup.create_solver(solver_config)
31  #solver.max_iterations = 1000
32  solver.specify_problem(problem)
33 
34  _ = solver.solve()
35 
36  print('Solver terminated with:', problem.termination_criterion)
37  print('Solver took:', solver.get_planning_time())
38 
39  costs = problem.get_cost_evolution()
40  return costs
41 
42 if __name__ == "__main__":
43  results = OrderedDict()
44 
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)
52 
53  fig = plt.figure(1, (12,6))
54 
55  plt.subplot(1,2,1)
56  for setting in results:
57  plt.plot(results[setting][1], label=setting)
58  plt.yscale('log')
59  #plt.xscale('log')
60  plt.ylabel('Cost')
61  plt.xlabel('Iterations')
62  plt.legend()
63 
64  plt.subplot(1,2,2)
65  for setting in results:
66  plt.plot(results[setting][0], results[setting][1], label=setting)
67  plt.yscale('log')
68  plt.ylabel('Cost')
69  plt.xlabel('Time (s)')
70  plt.legend()
71 
72  plt.tight_layout()
73  fig.savefig('boxqp_configurations.png')
74  plt.show()
75 
def test_solver(use_new_boxqp, use_polynomial_linesearch, use_cholesky)


exotica_ddp_solver
Author(s): Traiko Dinev
autogenerated on Sat Apr 10 2021 02:36:22