最適化コマンドの入力の形
|
代数式
|
|
•
|
代数式は最適化問題を与える中で最も使われる形です。The および は sin(x+y) または v^2+exp(v) のような代数式の形で与えられます。
|
•
|
最適化パッケージの中のソルバによる計算は浮動小数要素のベクトルおよび行列を使います。代数式で与えられた問題はソルバによって行列に変換されます。正確なデータを与えたとしても数値によって計算した値を返します。
|
|
|
オペレータの形
|
|
•
|
オペレータの形を使うと、目的関数および制約条件は 1 つ以上のパラメータを持ちスカラーを返す手続きで表されます。
|
•
|
オペレータで与えられた入力はソルバによって行列の形に変換されます。特に、手続きはベクトルに変換されます。
|
|
|
行列の形
|
|
•
|
行列の形で問題を指定することで、ソルバによって効率的に結果を出すことができます。しかし、入力が複雑になります。目的関数および制約条件をベクトルおよび行列、および手続きを指定すると解をベクトルで返します。
|
•
|
入力が行列の形で、要素が浮動小数の型ででないときは浮動小数のデータに変換されます。最適化ソルバは可能な限りハードウェア浮動小数使うことを試みます。行列やベクトルの不必要な複製を避けるため、最適化コマンドのヘルプページを見て適したデータの形を入力することを推奨します。
|
|
|
例
|
|
代数式で与えられる線形計画問題を解きます。目的関数および制約条件は x および y を変数とする関数です。
>
|
LPSolve(-4*x-5*y, {x+2*y<=6, 5*x+4*y<=20, x>=0, y>=0});
|
| (4.1) |
行列の形で与えられた線形計画問題を使って解きます。
>
|
LPSolve(<4,5>,[<<-3|1>,<5|1>>,<1/2,2>],[0,infinity],maximize);
|
| (4.2) |
2 次計画問題では代数式または行列の形の入力を使うことができます。
>
|
QPSolve(2*x+5*y+3*x^2+3*x*y+2*y^2,{x-y>=2});
|
| (4.3) |
>
|
QPSolve([<2,5>,<<6|3>,<3|4>>],[<<-1|1>>,<-2>],assume=nonnegative);
|
| (4.4) |
非線形問題では代数式または行列の形の入力を使うことができます。
>
|
NLPSolve(sin(x)^3-1/(1+x^4), initialpoint={x=2});
|
| (4.5) |
行列の形の入力で NLPSolve を使うときは、目的関数の勾配を使うべきです。
>
|
obj := proc(v)
10*v[1]^2 - 2*v[1]*v[2]^2 + v[2]^4 + 1 - 2*v[2] + v[2]^2
end proc:
objgrad := proc(v, w)
w[1] := 20*v[1] - 2*v[2]^2:
w[2] := -4*v[1]*v[2] + 4*v[2]^3 - 2 + 2*v[2]
end proc:
NLPSolve(2, obj, objectivegradient=objgrad);
|
| (4.6) |
|
|
参照
|
|
Optimization, Optimization/AlgebraicForm, Optimization[Interactive], Optimization[LPSolve], Optimization[LSSolve], Optimization/MatrixForm, Optimization[Maximize], Optimization[Minimize], Optimization[NLPSolve], Optimization/OperatorForm, Optimization[QPSolve]
|
|