CGAL二次规划求解器,如何输入" x ^ 4"在目标函数?在约束?

时间:2012-11-22 16:59:18

标签: c++ exponent cgal quadratic

我正在尝试最小化以下功能:

a*x^4+b*y

和约束如:

x^2 <= a
<{3>}中的

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

qp.set_d(X, X, 2);

但是“x ^ 4”呢?

添加像“x&lt; = a”这样的约束:

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

但是“x ^ 2&lt; = a”呢?

2 个答案:

答案 0 :(得分:2)

解决此问题的解决方案

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));

答案 1 :(得分:1)

从给定的链接:

  

这个软件包可以让你解决一般的凸二次程序   形式......

为什么你决定使用二次求解器来求解四次幂的多项式? Quadratic不代表“quadra”作为“四”,它代表一个正方形作为“quadragon”并且意味着二次幂。

简而言之:您无法使用此工具来解决问题。