【发布时间】:2012-11-22 16:59:17
【问题描述】:
我正在尝试最小化如下函数:
a*x^4+b*y
以及以下约束:
x^2 <= a
要在目标函数中输入“x^2”,我可以执行以下操作:
qp.set_d(X, X, 2);
但是“x^4”呢?
要添加像“x
hp.set_a(X, 0, 1);
hp.set_b(0, a);
但是 "x^2
【问题讨论】:
标签: c++ exponent cgal quadratic
我正在尝试最小化如下函数:
a*x^4+b*y
以及以下约束:
x^2 <= a
要在目标函数中输入“x^2”,我可以执行以下操作:
qp.set_d(X, X, 2);
但是“x^4”呢?
要添加像“x
hp.set_a(X, 0, 1);
hp.set_b(0, a);
但是 "x^2
【问题讨论】:
标签: c++ exponent cgal quadratic
解决这个问题的办法
一种问题是修改目标函数和约束,在这种情况下通过设置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));
【讨论】:
来自给定的链接:
这个包让你解决一般的凸二次程序 形式...
您为什么决定可以使用 二次 求解器来求解四次幂多项式? Quadratic 不代表“quadra”为“四”,它代表正方形为“quadragon”,表示二的幂。
简而言之:你不能用这个工具来解决你的问题。
【讨论】: