【问题标题】:CGAL Quadratic Programming Solver, how to enter "x^4" in objective function? and in the constraints?CGAL二次规划求解器,如何在目标函数中输入“x^4”?并在约束中?
【发布时间】:2012-11-22 16:59:17
【问题描述】:

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

a*x^4+b*y

以及以下约束:

x^2 <= a

CGAL::Quadratic_program.

要在目标函数中输入“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


    【解决方案1】:

    解决这个问题的办法

    一种问题是修改目标函数和约束,在这种情况下通过设置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】:

      来自给定的链接:

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

      您为什么决定可以使用 二次 求解器来求解四次幂多项式? Quadratic 不代表“quadra”为“四”,它代表正方形为“quadragon”,表示二的幂。

      简而言之:你不能用这个工具来解决你的问题。

      【讨论】:

      • 无论是使用线性程序还是二次程序都可以做到这一点。 this 是我必须使用 CGAL 解决的实际优化问题。
      • 我猜诀窍是设置z=z^2并求解ax^2+by+z^2,然后使用sqrt(z)求结果.问题是,例如 a=32 b=-9 我得到“不可行”,而解决方案应该是 82944.. mh.
      • @fusio 如果您认为这是一个错误,请在 cgal-discuss 邮件列表中报告。
      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      相关资源
      最近更新 更多