プログラムを書きますが、
最小化: f = x^2 + y^2
制約: c: x-1 < 0 ceq: x+y-5=0
私は答えを得ました: x = 0.12219 y = 5.678 これは ceq を満たしていません。修正方法がわかりません。
私の完全なソースコードはこちら
主な機能は次のとおりです。
int main()
{
nlopt_opt opt;
opt = nlopt_create(NLOPT_LD_MMA, 2); /* algorithm and dimensionality */
nlopt_set_min_objective(opt, myfunc, NULL);
nlopt_add_equality_constraint(opt, ceq1, NULL, 1e-8);
nlopt_add_inequality_constraint(opt, c1, NULL, 1e-8);
nlopt_set_xtol_rel(opt, 1e-4);
double x[2] = { 1.234, 5.678 }; /* some initial guess */
double minf; /* the minimum objective value, upon return */
if (nlopt_optimize(opt, x, &minf) < 0) {
printf("nlopt failed!\n");
}
else {
printf("found minimum at f(%g,%g) = %0.10g\n", x[0], x[1], minf);
}
nlopt_destroy(opt);
return 0;
}
アップデート!!!!!ドキュメントを読んだ後、アルゴリズム「MMA」が「等しい制約」をサポートしていないことがわかりました。
「MMA」を「SLSQP」に置き換えると、この問題が解決する場合があります。