Optimization[LPSolve](Matrix Form) - 行列の形で与えられた線形計画問題を解く
使い方
LPSolve(c, lc, bd, opts)
パラメータ
c - Vector; 線形目的関数
lc - (オプション) list; 線形制約条件
bd - (オプション) list; 境界条件
opts - (オプション) option = value の等式。 option は assume, binaryvariables, depthlimit, feasibilitytolerance, infinitebound, initialpoint, integertolerance, integervariables, iterationlimit, maximize, nodelimit または output
|
説明
|
|
•
|
LPSolve コマンドは線形のもとの () を計算するを解きます。LP は次の形で与えられます。
|
|
最小化 (最大化) c' x
制約条件
A x <= b (線形不等式制約条件)
Aeq x = beq (線形等式制約条件)
bl <= x <= bu (境界条件)
|
|
ただし、x は変数のベクトル;c, b, beq, bl と bu はベクトル;A と Aeq は行列です。c' はベクトルの転置をあらわします。
|
•
|
ネットワーク、整数計画、混合整数計画およびバイナリ (0-1) LP を解くことができます。整数計画問題は assume, integervariables または binaryvariables オプションを使って指定をします。 詳しくは整数計画問題のオプションを参照ください。
|
•
|
第 1 引数 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 オプションで指定することができます。
|
•
|
解として、最小値 (最大値) とそれを満たす点 (極値) を返します。output = solutionmodule を指定すると、解としてモジュールを返します。詳しくは Optimization/Solution を参照ください。
|
•
|
は点だけが必要ならば、第 1 引数 c に NoUserValue を入力します。
|
|
|
オプション
|
|
|
引数 opts には次のオプションを複数指定することができます。LPSolve コマンドで使えるオプションについて詳しくは Optimization/Options を参照ください。整数計画問題で使えるオプションについては整数計画問題のオプションを参照ください。
|
•
|
assume = nonnegative -- すべての変数を非負変数とします。
|
•
|
feasibilitytolerance = realcons(positive) -- 許容できる誤差の量を指定します。
|
•
|
infinitebound = realcons(positive) -- infinitebound より大きい値を infinity とみなします。
|
•
|
initialpoint = list(numeric) -- 初期点を n 次元ベクトルで指定します。
|
•
|
iterationlimit = posint -- 有効制約法による反復回数を指定します。
|
•
|
maximize または maximize = truefalse -- true のとき最大値を計算し、false のとき最小値を計算します。'maximize' オプションは maximize = true と同じです。はじめは maximize = false が指定されています。
|
|
|
整数計画法
|
|
•
|
assume = binary, integer または nonnegint -- すべての変数はバイナリ (0-1) または非負の値を値をとるように指定します。
|
•
|
binaryvariables = list(posint) または set(posint) -- 指定した変数が 0 または 1 の値のみをとるようにベクトルで指定します。
|
•
|
depthlimit = posint -- 分岐木の最大の深さを指定します。
|
•
|
integertolerance = realcons(positive) -- 許容できる誤差の量を整数で指定します。
|
•
|
integervariables = list(posint) または set(posint) -- 指定した変数が整数の値をとるようにベクトルで指定します。。
|
•
|
nodelimit = nonnegint -- 分岐木の最大探索ノードを指定します。0 を指定したときは、すべてのノードの探索を行います。
|
|
|
注意
|
|
•
|
ネットワーク問題について、LPSolve は Numerical Algorithms Group (NAG) によって組み込まれた反復有効制約法を使います。初期点は initialpoint オプションで指定することができます。指定しないときは、デフォルトの点を使います。
|
•
|
整数計画問題はノード木を使って計算するを使って解きます。各ノードは、有効制約法を使って解くネットワーク LP 部分問題に対応します。
|
•
|
パラメータ constr および bd はオプションで入力しますが、LPSolve は 1 つも制約条件および境界条件または、assume = nonnegative オプションがないときはエラーを返します。
|
•
|
LPSolve は問題がであるときエラーを返します。 問題がとき、LPSolve コマンドは警告を出し、反復計算の最後の結果を出します。この結果は意味がない場合があります。
|
•
|
assume オプションを使うことができますが、一般に最適化パッケージではサポートされていません。
|
|
|
例
|
|
4 つの不等式制約条件のもと、2 変数の目的関数を最小値を求めるには LPSolve を使います。等式制約条件がない場合、第 2 引数の Aeq および beq を省略することができます。
>
|
c := Vector([-2, 1], datatype = float):
A := Matrix([[-1,1],[1,1],[-1,0],[0,-1]], datatype = float):
b := Vector([3,5,0,0], datatype = float):
LPSolve(c, [A, b]);
|
| (5.1) |
非負変数という制約条件の代わりに assume = nonnegative オプションを使います。
>
|
c := Vector([-1,-1], datatype = float):
A := Matrix([[-3,1],[5,1]], datatype = float):
b := Vector([1/2,2], datatype = float):
LPSolve(c, [A, b], assume = nonnegative);
|
| (5.2) |
境界条件は分けて指定することができます。次の例は制約条件を持ちません。
>
|
c := Vector([-2,5,-3], datatype = float):
bl := Vector([2,3,1], datatype = float):
bu := Vector([6,10,3.5], datatype = float):
LPSolve(c, [], [bl, bu]);
|
| (5.3) |
等式制約条件のみが与えられたとき、第 2 引数の A and b の代わりに名前 NoUserValue を入力します。
>
|
c := Vector([4,5], datatype = float):
Aeq := Matrix([[-1,1.5],[-3,2]], datatype = float):
beq := Vector([2,3], datatype = float):
LPSolve(c, [NoUserValue, NoUserValue, Aeq, beq]);
|
| (5.4) |
目的関数の最大値を計算するために maximize オプションを使います。
>
|
c := Vector([4,5], datatype = float):
A := Matrix([[-3,1],[5,1]], datatype = float):
b := Vector([1/2,2], datatype = float):
bl := -2.5:
bu := 2.5:
LPSolve(c, [A, b], [bl, bu], maximize);
|
| (5.5) |
整数計画問題を解くには assume = integer オプションを使います。
>
|
c := Vector([-1,-1], datatype = float):
A := Matrix([[-1,3],[1,0]], datatype = float):
b := Vector([1,1], datatype = float):
Optimization[LPSolve](c, [A, b], assume = integer);
|
| (5.6) |
integervariables オプションは混合整数計画問題に指定することができます。
>
|
c := Vector([2,-3,-5], datatype = float):
A := Matrix([[-5,4,-5],[2,5,7],[2,-3,4]], datatype = float):
b := Vector([3,1,-2], datatype = float):
Optimization[LPSolve](c, [A, b], integervariables = [1,3]);
|
| (5.7) |
|
|