CGAL Quadratic Programming Solver, как ввести & quot; x ^ 4 & quot; в целевой функции? а в ограничениях?

Я пытаюсь свернуть функцию, подобную следующей:

a*x^4+b*y

и ограничения, такие как:

x^2 <= a

в CGAL :: Quadratic_program.

Для ввода «x ^ 2» в целевую функцию я могу сделать следующее:

qp.set_d(X, X, 2);

а как насчет «х ^ 4»?

Чтобы добавить ограничение типа «x<= А «:

hp.set_a(X, 0, 1);
hp.set_b(0, a);

но как насчет «х ^ 2 <?

2

Решение

Решение, чтобы решить это

введите описание изображения здесь

Вид проблем состоит в том, чтобы изменить целевую функцию и ограничения, в этом случае, установив z ^ 2 = z.

        //>=
Program hp(CGAL::LARGER, false, 0, false, 0);
//x+y >= -4
hp.set_a(X, 0, 1); hp.set_a(Y, 0, 1);
hp.set_b(0, -4);
//4x+2y+z^2 >= -a*b
//z^2 = z
hp.set_a(X, 1, 4); hp.set_a(Y, 1, 2); hp.set_a(Z, 1, 1);
hp.set_b(1, -a * b);
//-x + y >= −1
hp.set_a(X, 2, -1); hp.set_a(Y, 2, 1);
hp.set_b(2, -1);
//x <= 0
hp.set_a(X,3,1);
hp.set_b(3,0);
hp.set_r(3,CGAL::SMALLER);
//y <= 0
hp.set_a(Y,4,1);
hp.set_b(4,0);
hp.set_r(4,CGAL::SMALLER);
//objective function
//min a*x^2 + b*y + z^4
//z^2 = z
//min a*x^2 + b*y + z^2
hp.set_d(X, X, 2 * a); //2D
hp.set_c(Y, b);
hp.set_d(Z, Z, 2); //2D

// solve the program
Solution s = CGAL::solve_quadratic_program(hp, ET());
assert(s.solves_quadratic_program(hp));
2

Другие решения

Из приведенной ссылки:

Этот пакет позволяет решать выпуклые квадратный программы общего
форма …

Почему вы решили, что можете использовать квадратный решатель, чтобы решить ваш полином четырех степеней? Квадратик не означает «квадра» как «четыре», он означает квадрат как «четырехугольник» и означает степень двойки.

Короче говоря: вы не можете использовать этот инструмент для решения вашей проблемы.

1

По вопросам рекламы [email protected]