Optimization[NLPSolve] - 非線形計画問題を解く
使い方
NLPSolve(obj, constr, bd, opts)
NLPSolve(opfobj, ineqcon, eqcon, opfbd, opts)
パラメータ
obj - 代数式; 目的関数
constr - (オプション) list(relation) または list(relation); 制約条件
bd - (オプション) name = range の列; 境界条件
opfobj - 手続き; 目的関数
ineqcon - (オプション) set(procedure) または list(procedure); 不等式制約条件
eqcon - (オプション) set(procedure) または list(procedure); 等式制約条件
opfbd - (オプション) 範囲の列 ; 境界
opts - (optional) option = value の形の等式。ただし option は assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit, maximize, method, optimalitytolerance または output
|
説明
|
|
•
|
NLPSolve コマンドは、のもとの () を求める (NLP)を解きます。一般に、計画問題が
でない限り最小解を返します。しかしながら、注意の章にあるような限られた場合のときは探索を行います。NLPSolve で使う算法の多くは、目的関数と制約条件が 2 階連続微分可能と仮定します。NLPSolve はこの条件を満たさない場合でも計算できることがあります。
このページは NLP が多項式またはオペレータの形で与えられたときの NLPSolve コマンドの使い方を説明します。これらの形の概要については Optimization/AlgebraicForm および Optimization/OperatorForm を参照ください。NLPSolve は行列の形の問題も認識します (NLPSolve (Matrix Form) を参照ください)。行列の形はより効率的な計算を引き出しますが、しかし形はより複雑になります。
|
•
|
代数式の入力するときの使い方です。第 1 引数 obj は代数式の目的関数を入力します。
|
|
第 2 引数 constr は制約条件をオプションで入力します。変数は obj および constr にある名前の型の不定元をとります。
|
|
境界条件 bd は varname を変数、varrange を範囲とするとき varname = varrange の形でオプションで入力します。
|
•
|
オペレータの形を入力するときの使い方です。目的関数 opfobj は変数 x1, x2, ..., xn に関する n 個の数値パラメータに対し数値を返す手続きを入力します。
|
|
不等式条制約条件および等式制約条件は ineqcon および eqcon をによりオプションで入力します。不等式制約条件 v(x1, x2, ..., xn) <= 0 は手続き v を ineqcon の要素とし、opfobj も同様に入力し制約条件を返すようにします。等式制約条件 w(x1, x2, ..., xn) = 0 は手続き w を eqcon の要素とします。 ineqcon または eqcon のどちらかは空であっても構いません。
|
|
境界条件 opfbd はオプションで入力しますが、 x1, x2, ..., xn の順序に対応するように入力する必要があります。
|
•
|
いずれの入力の形でも、はじめ変数が非負であることは仮定されていませんが、assume = nonnegative オプションを使うことで使うことができます。境界条件として infinity の型を使うことができます。
|
•
|
Maple は最小値 (最大値) およびそれを満たす点 (極値) のリストを解として返します。output = solutionmodule オプションを使うと、解としてモジュールを返します。詳しくは Optimization/Solution を参照ください。
|
|
|
オプション
|
|
•
|
assume = nonnegative -- すべての変数を非負と仮定します。
|
•
|
evaluationlimit = posint -- 目的関数の評価する最大数を指定指定します。このオプションは method オプションとして、branchandbound, modifiednewton, nonlinearsimplex または quadratic を指定したときのみ使うことができます。
|
•
|
feasibilitytolerance = realcons(positive) -- 許容できる誤差の量を指定します。
|
•
|
infinitebound = realcons(positive) -- infinitebound より大きい値を infinity とみなします。
|
•
|
initialpoint = set(equation), list(equation), または list(numeric) -- 初期点の指定を代数式の入力のときは varname=value のリストで、オペレータのときは n の値のリストで指定をします。2 次補間法を指定するとこのオプションは無視されます。詳しくは Optimization/Methods を参照ください。
|
•
|
iterationlimit = posint -- 反復回数の最大値を指定します。このオプションは method オプションで pcg または sqp を指定したときのみ使うことができます。
|
•
|
maximize or maximize = truefalse -- true のとき最大値を計算し、false のとき最小値を計算します。'maximize' オプションは maximize = true と同じです。はじめは maximize = false が指定されています。
|
•
|
method = branchandbound, modifiednewton, nonlinearsimplex, pcg, quadratic, または sqp -- 算法を指定します。詳しくは Optimization/Methods を参照ください。
|
•
|
nodelimit = posint -- 分岐木を探索するノードの最大値を指定します。このオプションは method = branchandbound オプションを指定したときのみ使うことができます。
|
•
|
objectivetarget = realcons -- このオプションは method = branchandbound オプションを指定したときのみ使うことができます。
|
•
|
optimalitytolerance = realcons(positive) -- 最適な値を見つけるため精度を指定します。
|
|
|
注意
|
|
•
|
NLPSolve コマンドはNumerical Algorithms Group (NAG) によって組み込まれたいろいろな算法を使って問題を解きます。詳しくは Optimization/Methods を参照ください。算法は反復法であり、初期点を必要とします。解は選んだ点に依存するので、initialpoint オプションを使って初期点を指定することを推奨します。指定しないときは自動的に生成します。
|
•
|
NLPSolve コマンドは 1 つの変数について境界条件が与えられ制約条件がない場合大域探索を使います。method = branchandbound オプションによって指定し、大域解を返します。
|
•
|
計算は浮動小数上で行います。データは realcons の型で与える必要があり、また問題が正確に与えられたとしても解は浮動小数で返されます。最適な計算を行うためには、ベクトルおよび行列は datatype = float オプションを用いて構成し、すべての手続きは evalh を使って行います。複素数を入力するとソルバはエラーを出すので、目的関数および制約条件は実数値をとる必要があります。最適化パッケージでの数値での計算、および行列の形の入力でよりより計算をする方法について詳しくは Optimization/Computation を参照ください。
|
•
|
asumme=nonnegative を使うことができますが、 最適化パッケージでは一般の仮定は提供されていません。
|
•
|
条件が満たされ反復が収束したとき、答えを返します。
通常、局所的最小値を返しますが、 を返すときもあります。初期点を変えて解の妥当性を検証することを推奨します。
ときどき、ソルバは反復が収束しなくても解を返すことがありますが、この値は条件を満たしています。infolevel[Optimization] を 1 以上にすることで計算の様子をメッセージとして生成することができます。
線形計画問題に対する問題でないとき、非線形の場合の有界でないことを決めることは難しく NLPSolve は警告を出します。解の値が大きくなったり小さくなる場合、解が有界でない可能性があります。
|
•
|
NLPSolve は解がないときエラーを返し、そのときは違う初期点で再度計算することやパラメータを減らすことを推奨します。
|
|
|
例
|
|
与えた区間内で関数の最小値を求めます。
>
|
NLPSolve(sin(x)/x, x=1..30);
|
| (4.1) |
初期値をもとに目的関数の最大値を計算するためには maximize オプションを使います。
>
|
NLPSolve(x^3+2*x*y-2*y^2, x=-10..10, y=-10..10, initialpoint={x=3,y=4}, maximize);
|
| (4.2) |
非負変数の仮定のもと、最小値を計算します。
>
|
NLPSolve(w^3*(v-w)^2+(w-x-1)^2+(x-y-2)^2+(y-z-3)^2, {w+x+y+z<=5, 3*z+2*v-3=0}, assume = nonnegative);
|
| (4.3) |
特殊関数の最小値を計算します。
>
|
NLPSolve(sin(x)*Psi(x), x=1..20);
|
| (4.4) |
関数 f を定義し、それの最小値を計算します。
>
|
f := proc(x)
if x < 0 then
x^2+1;
else
cos(x);
fi;
end:
NLPSolve(f, -Pi..2*Pi);
|
| (4.5) |
|
|
参照
|
|
Optimization, Optimization/AlgebraicForm, Optimization/Computation, Optimization[LPSolve], Optimization[LSSolve], Optimization/MatrixForm, Optimization/Methods, Optimization[NLPSolve] (MatrixForm), Optimization/OperatorForm, Optimization/Options, Optimization[QPSolve], Optimization/Solution, realcons
|
|