Optimization[QPSolve](Matrix Form) - 行列の形で与えられる 2 次計画問題を解く
使い方
QPSolve(obj, lc, bd, opts)
パラメータ
obj - 行列またはリスト; 2 次の目的関数
lc - (オプション) リスト; 線形制約条件
bd - (オプション) リスト; 境界条件
opts - (オプション) option = value は次の形。 optionは assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit, maximize, または output
|
説明
|
|
•
|
QPSolve コマンドは線形のもと 2 次のの () を計算する 2 (QP) を解きます。QP は次の形で与えられます。
最小化 (最大化) c' x + (1/2) x' H x
制約
A x <= b (不等式線形制約条件)
Aeq x = beq (等式線形制約条件)
bl <= x <= bu (境界)
ただし、x は変数のベクトル;c, b, beq, bl および bu はそれぞれベクトル;A および Aeq は行列;H は対称行列を表します。行列とベクトルの関係は要素に関するものです。関数の定義の中で、c' および x' は転置ベクトルを表します。
|
•
|
第 1 引数 obj は、目的関数に 1 次項部分がないときは行列 H を、1 次項部分 c があるときはリスト [c,H] を入力します。引数 obj は必要であり、変数の個数 n は対称行列 H の次元より計算します。ベクトル c は次元が n でなければいけません。
第 2 引数 lc は線形制約条件のリストをオプションで入力します。A および Aeq を行列、b および beq をベクトルとするとき、一般的な入力の形は [A,b,Aeq,beq] です。 この引数は不等式制約条件または等式制約条件の一方がない場合、別の形で入力することができます。線形制約条件の記述に関する詳細は Optimization/MatrixForm を参照ください。
第 3 引数 bd は下界と上界のリスト [bl,bu] をオプションで入力します。一般に、bl と bu は n 次元ベクトルである必要があります。Optimization/MatrixForm は境界条件が存在しない場合やベクトルにより効率的な方法で書かれたとき代わりの形について述べています。はじめは非負変数であることは仮定しませんが、assume = nonnegative オプションを指定することができます。
|
•
|
Maple は解として最小値 (最大値) とそれを満たす点 (極値) のリストを返します。output = solutionmodule オプションを指定されているときは、モジュールを返します。詳しくは Optimization/Solution を参照ください。
もし 2 次計画問題ならば、最小値を返します。そうでないとき、解は最小値であるかもしれません。
|
|
|
オプション
|
|
•
|
assume = nonnegative -- すべての変数を非負に指定します。
|
•
|
feasibilitytolerance = realcons(positive) -- 許容できる誤差の量を指定します。
|
•
|
infinitebound = realcons(positive) -- infinitebound より大きい値を infinity とみなします。
|
•
|
initialpoint = list(numeric) -- 初期値を n 次元ベクトルで与えます。
|
•
|
iterationlimit = posint -- 有効制約法による反復回数を指定します。
|
•
|
maximize or maximize = truefalse -- true のとき最大値を計算し、false のとき最小値を計算します。'maximize' オプションは maximize = true と同じです。はじめは maximize = false が指定されています。
|
|
|
注意
|
|
•
|
The QPSolve コマンドは Numerical Algorithms Group (NAG) によって組み込まれた有効制約法を使います。初期店は initialpoint オプションを使って指定します。指定しない場合、デフォルトの点を使います。
|
•
|
計算は浮動小数を用いて行います。問題が正確な値で与えても解は浮動小数で返されます。最適に計算を行うには、datatype = float オプションを用いてベクトルおよび行列を与え、対称ヘッセ行列 H を shape = symmetric および storage = rectangular オプションを使って構成します。 最適化パッケージで行列を入力とし最適な計算を行うための数値による計算については Optimization/Computation を参照ください。
|
•
|
QPSolve は問題がのであるならエラーを返します。 問題がとき、QPSolve は警告を出し計算途中の値を返します。この結果は意味を持たないかもしれません。
|
•
|
assume = nonnegative オプションを使うことはできますが、最適化パッケージでは一般の仮定は提供されていません。.
|
|
|
例
|
|
1 次の制約条件のもとで 2 次計画問題を解くには QPSolve を使います。
>
|
c := Vector([2,5], datatype = float):
H := Matrix([[6,3],[3,4]], datatype = float):
A := Matrix([[-1,1]], datatype = float):
b := Vector([-2], datatype = float):
QPSolve([c, H], [A, b]);
|
| (4.1) |
変数を非負変数に指定するには assume = nonnegative を使います。
>
|
QPSolve([c, H], [A, b], assume = nonnegative);
|
| (4.2) |
制約条件を非負条件から区間に置き換えます。
>
|
bl := <1.5,-infinity>:
bu := <infinity,infinity>:
QPSolve([c, H], [A, b], [bl, bu]);
|
| (4.3) |
不等式を含む制約条件を持つ 2 次計画問題を解きます。
>
|
H := Matrix([[8,-1], [-1, -2]], datatype = float):
A := Matrix([[7,3]], datatype = float):
b := Vector([16], datatype = float):
Aeq := Matrix([[2,1]], datatype = float):
beq := Vector([10], datatype = float):
QPSolve(H, [A, b, Aeq, beq]);
|
| (4.4) |
2 次計画問題の最大値を求めるために maximize オプションを使います。
>
|
H := Matrix([[-2,0,0], [0,-2,0], [0,0,-2]], datatype = float):
A := Matrix([[-1,-1,-1]], datatype = float):
b := Vector([-15], datatype = float):
QPSolve(H, [A, b], maximize);
|
| (4.5) |
|
|