Line data Source code
1 : #include <memory> 2 : #include <panoc-alm/reference-problems/himmelblau.hpp> 3 : 4 : namespace pa { 5 : namespace problems { 6 : 7 0 : Problem himmelblau_problem() { 8 0 : auto sq = [](auto x) { return x * x; }; 9 0 : Box C{vec(2), vec(2)}; 10 0 : C.lowerbound << -1, -1; 11 0 : C.upperbound << 4, 1.8; 12 0 : return Problem{ 13 : 2, 14 : 0, 15 0 : C, 16 0 : Box{}, 17 0 : [sq](crvec x) { 18 0 : return sq(sq(x(0)) + x(1) - 11) + sq(x(0) + sq(x(1)) - 7); 19 : }, 20 0 : [sq](crvec x, rvec g) { 21 0 : g(0) = 22 0 : 2 * (2 * x(0) * (sq(x(0)) + x(1) - 11) + x(0) + sq(x(1)) - 7); 23 0 : g(1) = 24 0 : 2 * (sq(x(0)) + 2 * x(1) * (x(0) + sq(x(1)) - 7) + x(1) - 11); 25 0 : }, 26 0 : [](crvec , rvec ) {}, 27 0 : [](crvec , crvec , rvec grad) { grad.setZero(); }, 28 0 : [](crvec , unsigned, rvec grad_gi) { grad_gi.setZero(); }, 29 0 : [sq](crvec x, crvec , crvec v, rvec Hv) { 30 0 : real_t H00 = 4 * (sq(x(0)) + x(1) - 11) + 8 * sq(x(0)) + 2; 31 0 : real_t H01 = 4 * x(0) + 4 * x(1); 32 0 : real_t H10 = 4 * x(0) + 4 * x(1); 33 0 : real_t H11 = 4 * (x(0) + sq(x(1)) - 7) + 8 * sq(x(1)) + 2; 34 0 : Hv(0) = H00 * v(0) + H01 * v(1); 35 0 : Hv(1) = H10 * v(0) + H11 * v(1); 36 0 : }, 37 0 : [sq](crvec x, crvec , rmat H) { 38 0 : H(0, 0) = 4 * (sq(x(0)) + x(1) - 11) + 8 * sq(x(0)) + 2; 39 0 : H(0, 1) = 4 * x(0) + 4 * x(1); 40 0 : H(1, 0) = 4 * x(0) + 4 * x(1); 41 0 : H(1, 1) = 4 * (x(0) + sq(x(1)) - 7) + 8 * sq(x(1)) + 2; 42 0 : }, 43 : }; 44 0 : } 45 : 46 : } // namespace problems 47 : } // namespace pa