私はいくつかの二次計画問題を解決するためにCGALを使用しています。
(-無限大)から
。までの値x^2
を取るために最小化したいと仮定します。これは、次のようにすることで簡単に解決できます。x
-oo
+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が正半定値であることを「要求」します)。上記のスニペットを実行すると、の0
代わりに間違った結果が返され-oo
ます。
x^2
CGALのように目的関数を最大化するにはどうすればよいですか?