2

私は次のような関数を最小化しようとしています:

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」はどうですか?

4

2 に答える 2

2

これを解決するソリューション

ここに画像の説明を入力

問題の種類は、目的関数と制約を変更することです。この場合、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));
于 2012-11-27T10:20:24.783 に答える
1

指定されたリンクから:

このパッケージを使用すると、一般的な形式の凸二次計画を解くことができます...

二次ソルバーを使用して 4 乗多項式を解くことができると決めたのはなぜですか? Quadratic は「quadra」を「4」として表すのではなく、正方形を「quadragon」として表し、2 のべき乗を意味します。

つまり、このツールを使用して問題を解決することはできません。

于 2012-11-22T20:25:22.507 に答える