【问题标题】:Maximization in quadratic programming using CGAL使用 CGAL 最大化二次规划
【发布时间】:2012-12-04 00:58:45
【问题描述】:

我正在使用 CGAL 解决一些quadratic programming 问题。

假设我想最小化 x^2x 将值从 -oo(-infinity) 到 +oo。这可以通过以下方式轻松解决:

      Program qp (CGAL::SMALLER, false, 0, false, 0);
      qp.set_d(0, 0, 2);

      Solution s = CGAL::solve_quadratic_program(qp, ET());

结果当然会返回0。现在假设我想最大化 x^2。为此,我必须最小化-x^2。但以下 “工作” 在 CGAL 中:

      Program qp (CGAL::SMALLER, false, 0, false, 0);
      qp.set_d(0, 0, -2);

      Solution s = CGAL::solve_quadratic_program(qp, ET());

因为现在的矩阵 D = [-2] 不是半正定的(二次规划问题的 API “要求” D 是半正定的)。通过运行上面的sn-p,返回错误的结果0而不是-oo

为了最大化像x^2 CGAL 中的目标函数,我应该怎么做?

【问题讨论】:

    标签: linear-algebra linear-programming cgal quadratic


    【解决方案1】:

    CGAL 的documentation 说您的目标函数必须是凸函数的最小化。您正在尝试最小化 -x^2,它不是凸的 - 所以您不能使用 CGAL 来做到这一点。

    此外,在我链接的文档的第 10.2.2 节中,它说尝试最小化非凸函数甚至可能不会警告您问题是非凸的,而是返回一条消息而不是最佳解决方案被找到。也就是说,如果您要将 CGAL 用于 QP,请确保它是凸二次的,否则您将得到错误的答案。

    您可以考虑使用可以处理非凸非线性优化的求解器。 IPOPT 是开源的,如果您的目标函数和约束是两次连续可微分,它将起作用。 COIN-OR 有几个可能适合您的求解器(请参阅“优化确定性非线性”)。 KNITRO 是一位出色的商业求解器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多