c++ - CGAL二次规划求解器,如何在目标函数中输入 "x^4"?并在限制条件下?

标签 c++ exponent cgal quadratic

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

a*x^4+b*y

以及诸如以下的约束:

x^2 <= a

CGAL::Quadratic_program .

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

qp.set_d(X, X, 2);

但是“x^4”呢?

要添加“x<=a”等约束:

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

但是“x^2 <= a”呢?

最佳答案

解决这个问题的方案

enter image description here

这类问题是修改目标函数和约束,在本例中是通过设置 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));

关于c++ - CGAL二次规划求解器,如何在目标函数中输入 "x^4"?并在限制条件下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517203/

相关文章:

windows-10 - CGAL 错误 : LNK1104: cannot open file CGAL-. ..4.11.lib

c++ - 对 B::B & B::~B 的 undefined reference

c++ - 是否可以在邻接列表中删除我的 Boost Graph 中的顶点?

opengl - GLSL:整数指数的 pow 与乘法

ruby - Ruby 在使用整数和 float 时如何解释指数?

c++ - 具有非常大指数的 GMP mpz_pow_ui

c++ - 如何为模板类中定义的类定义 friend

c++ - 为什么我的信号在没有 Qt::DirectConnection 的情况下不能触发插槽?

c++ - 如何轻松地用CGAL在球体上构造Voronoi图?

c++ - 无法在 CGAL 中创建 AABB 树类型的 STL 容器