test_Solvers.py
Go to the documentation of this file.
1 import numpy as np
2 import tsid
3 
4 print("")
5 print("Test Solvers")
6 print("")
7 
8 EPS = 1e-3
9 nTest = 100
10 n = 60
11 neq = 36
12 nin = 40
13 damping = 1e-10
14 
15 NORMAL_DISTR_VAR = 10.0
16 GRADIENT_PERTURBATION_VARIANCE = 1e-2
17 HESSIAN_PERTURBATION_VARIANCE = 1e-1
18 MARGIN_PERC = 1e-3
19 
20 print(
21  "Gonna perform",
22  nTest,
23  "tests with",
24  n,
25  "variables, ",
26  neq,
27  "equalities",
28  nin,
29  "inequalities",
30 )
31 
32 solver_list = []
33 
34 solver_eiquadprog = tsid.SolverHQuadProg("eiquadprog solver")
35 solver_eiquadprog.resize(n, neq, nin)
36 solver_list.append(("eiquadprog", solver_eiquadprog))
37 print("Adding eiquadprog to list of solvers to test")
38 
39 try:
40  solver_proxqp = tsid.SolverProxQP("proxqp solver")
41  solver_proxqp.resize(n, neq, nin)
42  solver_list.append(("proxqp", solver_proxqp))
43  print("Adding proxqp to list of solvers to test")
44 
45 except AttributeError:
46  pass
47 
48 try:
49  solver_osqp = tsid.SolverOSQP("osqp solver")
50  solver_osqp.resize(n, neq, nin)
51  solver_list.append(("osqp", solver_osqp))
52  print("Adding osqp to list of solvers to test")
53 
54 except AttributeError:
55  pass
56 
57 HQPData = tsid.HQPData()
58 A1 = np.random.rand(n, n) + 0.001 * np.eye(n)
59 b1 = np.random.rand(n)
60 cost = tsid.ConstraintEquality("c1", A1, b1)
61 
62 x = np.linalg.inv(A1).dot(b1)
63 A_in = np.random.rand(nin, n)
64 A_lb = np.random.rand(nin) * NORMAL_DISTR_VAR
65 A_ub = np.random.rand(nin) * NORMAL_DISTR_VAR
66 constrVal = A_in.dot(x)
67 
68 for i in range(0, nin):
69  if A_ub[i] <= A_lb[i]:
70  A_ub[i] = A_lb[i] + MARGIN_PERC * np.abs(A_lb[i])
71  A_lb[i] = A_lb[i] - MARGIN_PERC * np.abs(A_lb[i])
72 
73  if constrVal[i] > A_ub[i]:
74  A_ub[i] = constrVal[i] + MARGIN_PERC * np.abs(constrVal[i])
75  elif constrVal[i] < A_lb[i]:
76  A_lb[i] = constrVal[i] - MARGIN_PERC * np.abs(constrVal[i])
77 
78 in_const = tsid.ConstraintInequality("ini1", A_in, A_lb, A_ub)
79 A_eq = np.random.rand(neq, n)
80 b_eq = A_eq.dot(x)
81 eq_const = tsid.ConstraintEquality("eq1", A_eq, b_eq)
82 
83 const1 = tsid.ConstraintLevel()
84 const1.append(1.0, eq_const)
85 const1.append(1.0, in_const)
86 print("check constraint level #0")
87 const1.print_all()
88 
89 const2 = tsid.ConstraintLevel()
90 const2.append(1.0, cost)
91 print("check constraint level #1")
92 const2.print_all()
93 
94 HQPData.append(const1)
95 HQPData.append(const2)
96 print("Check HQP DATA")
97 HQPData.print_all()
98 
99 gradientPerturbations = []
100 hessianPerturbations = []
101 for i in range(0, nTest):
102  gradientPerturbations.append(np.random.rand(n) * GRADIENT_PERTURBATION_VARIANCE)
103  hessianPerturbations.append(np.random.rand(n, n) * HESSIAN_PERTURBATION_VARIANCE)
104 
105 for name, solver in solver_list:
106  print(f"Using {name}")
107  for i in range(0, nTest):
108  cost.setMatrix(cost.matrix + hessianPerturbations[i])
109  cost.setVector(cost.vector + gradientPerturbations[i])
110 
111  HQPoutput = solver.solve(HQPData)
112 
113  assert np.linalg.norm(A_eq.dot(HQPoutput.x) - b_eq, 2) < EPS
114  assert (A_in.dot(HQPoutput.x) <= A_ub + EPS).all()
115  assert (A_in.dot(HQPoutput.x) > A_lb - EPS).all()
116  print("-> succesful")


tsid
Author(s): Andrea Del Prete, Justin Carpentier
autogenerated on Sun Jul 2 2023 02:21:51