Skip to content

Commit 7f59eee

Browse files
committed
test/proxqp/dense: add test with fixed size
1 parent 0d067e4 commit 7f59eee

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

test/src/dense_qp_solve.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,75 @@ using T = double;
1212
using namespace proxsuite;
1313
using namespace proxsuite::proxqp;
1414

15+
DOCTEST_TEST_CASE("proxqp::dense: test init with fixed sizes matrices")
16+
{
17+
double sparsity_factor = 0.15;
18+
T eps_abs = T(1e-9);
19+
utils::rand::set_seed(1);
20+
dense::isize dim = 10;
21+
22+
dense::isize n_eq(5), n_in(2);
23+
T strong_convexity_factor(1.e-2);
24+
proxqp::dense::Model<T> qp = proxqp::utils::dense_strongly_convex_qp(
25+
dim, n_eq, n_in, sparsity_factor, strong_convexity_factor);
26+
27+
Eigen::Matrix<T, 10, 10> H = qp.H;
28+
Eigen::Matrix<T, 10, 1> g = qp.g;
29+
Eigen::Matrix<T, 5, 10> A = qp.A;
30+
Eigen::Matrix<T, 5, 1> b = qp.b;
31+
Eigen::Matrix<T, 2, 10> C = qp.C;
32+
Eigen::Matrix<T, 2, 1> l = qp.l;
33+
Eigen::Matrix<T, 2, 1> u = qp.u;
34+
35+
{
36+
Results<T> results = dense::solve<T>(
37+
H, g, A, b, C, l, u, nullopt, nullopt, nullopt, eps_abs, 0);
38+
39+
T pri_res = std::max((qp.A * results.x - qp.b).lpNorm<Eigen::Infinity>(),
40+
(helpers::positive_part(qp.C * results.x - qp.u) +
41+
helpers::negative_part(qp.C * results.x - qp.l))
42+
.lpNorm<Eigen::Infinity>());
43+
T dua_res = (qp.H * results.x + qp.g + qp.A.transpose() * results.y +
44+
qp.C.transpose() * results.z)
45+
.lpNorm<Eigen::Infinity>();
46+
DOCTEST_CHECK(pri_res <= eps_abs);
47+
DOCTEST_CHECK(dua_res <= eps_abs);
48+
49+
std::cout << "------using API solving qp with dim: " << dim
50+
<< " neq: " << n_eq << " nin: " << n_in << std::endl;
51+
std::cout << "primal residual: " << pri_res << std::endl;
52+
std::cout << "dual residual: " << dua_res << std::endl;
53+
std::cout << "total number of iteration: " << results.info.iter
54+
<< std::endl;
55+
std::cout << "setup timing " << results.info.setup_time << " solve time "
56+
<< results.info.solve_time << std::endl;
57+
}
58+
59+
{
60+
dense::QP<T> qp_problem(dim, n_eq, 0);
61+
qp_problem.init(H, g, A, b, nullopt, nullopt, nullopt);
62+
qp_problem.settings.eps_abs = eps_abs;
63+
qp_problem.solve();
64+
65+
const Results<T>& results = qp_problem.results;
66+
67+
T pri_res = (qp.A * results.x - qp.b).lpNorm<Eigen::Infinity>();
68+
T dua_res = (qp.H * results.x + qp.g + qp.A.transpose() * results.y)
69+
.lpNorm<Eigen::Infinity>();
70+
DOCTEST_CHECK(pri_res <= eps_abs);
71+
DOCTEST_CHECK(dua_res <= eps_abs);
72+
73+
std::cout << "------using API solving qp with dim: " << dim
74+
<< " neq: " << n_eq << " nin: " << n_in << std::endl;
75+
std::cout << "primal residual: " << pri_res << std::endl;
76+
std::cout << "dual residual: " << dua_res << std::endl;
77+
std::cout << "total number of iteration: " << results.info.iter
78+
<< std::endl;
79+
std::cout << "setup timing " << results.info.setup_time << " solve time "
80+
<< results.info.solve_time << std::endl;
81+
}
82+
}
83+
1584
DOCTEST_TEST_CASE("sparse random strongly convex qp with equality and "
1685
"inequality constraints: test solve function")
1786
{

0 commit comments

Comments
 (0)