c++ - Cgal二次规划目标函数

标签 c++ function optimization cgal quadratic

我正在尝试最小化如下函数:

25*x^2 + 45*x*y + y^2

和类似的约束,如:

(25 + y) + 25*x <= 1

CGAL::Quadratic_program .

要在目标函数中输入“25x^2”和“y^2”,我可以执行以下操作:

qp.set_d(X, X, 50);
qp.set_d(Y, Y, 2);

但是“45*x*y”呢?

以及如何添加此约束“(25 + y) + 25*x <= 1” 在我看来是这样的,但我不确定 25:

qp.set_a(X, 0, 25);
qp.set_a(Y, 0, 1);
qp.set_b(0, 1);

一个解决方案应该是将函数更新为这种形式“y + 25*x <= -24”

qp.set_a(X, 0, 25);
qp.set_a(Y, 0, 1);
qp.set_b(0, -24);

(如有错误请指正)

如果有任何建议,我将不胜感激,尤其是“45*x*y”问题。

最佳答案

您将“(25 + y) + 25*x <= 1”替换为“y + 25*x <= -24”的方法显然是正确的。

对于目标函数尝试:

qp.set_d(X, Y, 90);

但是你的矩阵 D:

25     22.5
22.5    1

不是半正定的,因此求解器可能会失败。

关于c++ - Cgal二次规划目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922432/

相关文章:

c++ - 如何在 Doxygen 中为不同范围的模板值添加行为描述?

c++ - 像 32i64 这样的操作数是什么意思?

javascript - NODE.JS 访问 EJS 模板中的函数

function - 如何使用 interface{} 作为灵活的函数参数和返回类型?

c# - MSBuild maxcpucount > 1 导致生成错误

python - 为什么我的优化求解器在 docker 中运行速度较慢?

sql - 根据使用的 where 子句对正确的列建立索引

c++ - 使用什么设计模式?

c++ - 可变/不可变 lambda 的编译时开关

python - 如何随机化您名字和姓氏的首字母