このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,ソルバーベースのアプローチを使用して,問題を数学的な形式から优化工具箱™ソルバーの構文に変換する方法を示します。この問題は線形計画法ですが,この手法はすべてのソルバーに適用できます。
問題に含まれる変数や式は,化学工場の運営モデルを表しており,埃德加と库普による[1]から引用しています。この問題について説明するビデオが2つあります。
数学建模与优化,第1部分では問題が図解され,図からモデルの説明の数式を作成する方法が説明されています。
优化建模,第2部分:转换为求解形式では,これらの数式を优化工具箱ソルバーの構文に変換する方法が説明されています。また,問題の解法や,結果の解釈方法も示されています。
この例の残りの部分では,問題をソルバー構文に変換することのみに注目します。この例は次のビデオとほぼ同じです。优化建模,第2部分:转换为求解形式。ビデオと例の主な相違点は,この例ではハッシュキーと同様の名前付き変数(つまり,インデックス変数)の使用方法が示されているという点です。これは変数を1つのベクトルに統合に説明されています。
ビデオ数学建模与优化,第1部分では,問題を数学的な形式に変換する方法の1つとして,次の手順が示されています。
問題の概要の理解
ゴールの特定(何らかの要素の最大化または最小化)
変数の識別(命名)
制約の特定
制御できる変数の判別
すべての数量の数学的表記による指定
モデルの完全性と正確さのチェック
この節の変数の意味については,ビデオ数学建模与优化,第1部分を参照してください。
最適化の問題では,すべての他の式を制約として,目的関数を最小化します。
ここでは,目的関数は次のとおりです。
0.002614 HPS + 0.0239 pp + 0.009825 ep
.
制約は次のとおりです。
2500
≤P1
≤6250
I1
≤192000年
C
≤62000年
I1 - HE1
≤132000年
I1 = le1 + he1 + c
1359.8 i1 = 1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1
3000
≤P2
≤9000
I2
≤244000年
LE2
≤142000年
I2 = le2 + he2
1359.8 i2 = 1267.8 he2 + 1251.4 le2 + 3413 p2
HPS = i1 + i2 + bf1
HPS = c + MPS + LPS
LPS = le1 + le2 + bf2
MPS = he1 + he2 + bf1 - bf2
P1 + p2 + pp
≥24550年
EP +页
≥12000年
国会议员
≥271536年
有限合伙人
≥100623年
すべての変数が正です。
この最適化の問題を解くには,以下の手順に従います。
この手順は,次のビデオでも説明されています。优化建模,第2部分:转换为求解形式。
この問題に対して適切なソルバーを見つけるには,最適化の意思決定表を参考にしてください。この表では,問題を目的関数の種類と,制約の種類で分類するように求められます。この問題では,目的関数,制約ともに線形です。判定表ではlinprog
ソルバーを使用することが推奨されています。
优化工具箱の関数が扱う問題や関数linprog
のリファレンスページに説明されているように,linprog
ソルバーでは次の形式の問題を解きます。
(1) |
fTxは,定数fの行ベクトルを変数xの列ベクトルと乗算することを意味します。つまり,次のようになります。
fTX = f(1) X (1) + f(2) X(2) +…+ f (n) x (n),
ここでnはfの長さです。
A x≤bは線形不等式を表します。一个は k 行 n 列の行列で、k は不等式の数、n は変数の数 (x のサイズ) です。b は長さが k のベクトルです。詳細は、線形不等式制約を参照してください。
aq x =は線形等式を表します。Aeqは m 行 n 列の行列で、m は等式の数、n は変数の数 (x のサイズ) です。beq は長さが m のベクトルです。詳細は、線形等式制約を参照してください。
Lb≤x≤ubは,ベクトルxの各要素が,磅の対応する要素よりも大きくなければならないこと,また,乌兰巴托の対応する要素よりも小さくなければならないことを意味します。詳細は,範囲制約を参照してください。
linprog
ソルバーの構文は,この関数のリファレンスページに示されているとおり,次のようになります。
[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);
linprog
ソルバーへの入力は,式 1の行列とベクトルです。
モデルの説明の方程式には16個の変数が含まれています。これらの変数を1つのベクトルに統合します。変数のベクトルの名前は,式 1のxです。次数を決定し,変数を使用してxの要素を作成します。
次のコードでは,変数の名前の细胞配列を使用してベクトルを作成します。
变量= {I1、I2,‘HE1’,‘合’,‘LE1’,‘LE2’,‘C’,‘BF1’,……BF2, HPS”,“议员”、“有限合伙人”,P1, P2, '页',' EP '};N =长度(变量);eval([variables{v},' = ', num2str(v),';']);结束
これらのコマンドを実行すると,次の名前付き変数がワークスペースに作成されます。
これらの名前付き変数は,xの要素のインデックス番号を表します。名前付き変数を作成する必要はありません。ビデオ优化建模,第2部分:转换为求解形式ではxの成分のインデックス番号を使用するだけで問題を解く方法を示しています。
モデルの説明の方程式には,下限のある変数が4つ上限のある変数が6つ含まれています。下限が指定されている変数は以下のとおりです。
P1
≥2500
P2
≥3000
国会议员
≥271536年
有限合伙人
≥100623年
.
また,すべての変数は正なので,下限はゼロになります。
下限ベクトル磅
を0
のベクトルとして作成し,4つの下限を追加します。
磅= 0(大小(变量));磅([P1, P2,国会议员,有限合伙人])=…(2500、3000、271536、100623);
上限が指定されている変数は以下のとおりです。
P1
≤6250
P2
≤9000
I1
≤192000年
I2
≤244000年
C
≤62000年
LE2
≤142000
.
上限ベクトルを正
のベクトルとして作成し,6つの上限を追加します。
乌兰巴托=正(大小(变量));乌兰巴托([P1, P2, I1、I2 C, LE2]) =…(6250, 9000, 192000, 244000, 62000, 142000];
モデルの説明の方程式には,次の3つの線形不等式が含まれています。
I1 - HE1
≤132000年
EP +页
≥12000年
P1 + p2 + pp
≥24550年
.
一个x≤bの形式の方程式にするために,すべての変数を不等式の左辺に移項します。これらの方程式はすべて,既にこの形式になっています。必要に応じて両辺に1を乗算して,各不等式が”より小なり”の形式になるようにします。
I1 - HE1
≤132000年
ep -页
≤-12000年
- p1 - p2 - pp
≤-24550年
.
MATLAB®ワークスペースで16個の変数の3つの線形不等式に合わせ,一个
行列を3行16列の行列として作成します。3つの要素をもつb
ベクトルを作成します。
一个= 0 (16);(1, I1) = 1;(1) HE1) = 1;b (1) = 132000;(2) EP) = 1;(2页)= 1;b (2) = -12000;(3, (P1, P2, PP)) = (1 1 1);b (3) = -24550;
モデルの説明の方程式には8つの線形等式が含まれています。
I2 = le2 + he2
LPS = le1 + le2 + bf2
HPS = i1 + i2 + bf1
HPS = c + MPS + LPS
I1 = le1 + he1 + c
MPS = he1 + he2 + bf1 - bf2
1359.8 i1 = 1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1
1359.8 i2 = 1267.8 he2 + 1251.4 le2 + 3413 p2
.
これらの等式をAeq x =说真的の形式にするために,すべての変数を等式の片方にまとめます。等式は次のようになります。
Le2 + he2 - i2 = 0
Le1 + le2 + bf2 - LPS = 0
I1 + i2 + bf1 - HPS = 0
C + MPS + LPS - HPS = 0
Le1 + he1 + c - i1 = 0
He1 + he2 + bf1 - bf2 - MPS = 0
p1 - 1359.8 i1 = 0
p2 - 1359.8 i2 = 0
.
次に,これらの等式に対応するAeq
行列と说真的
ベクトルを作成します。MATLABワークスペースで、16 個の変数の 8 つの線形等式に合わせ、Aeq
行列を8行16列の行列として作成します。すべてゼロの8つの要素をもつ说真的
ベクトルを作成します。
Aeq = 0 (8, 16);说真的= 0 (8,1);Aeq ([LE2 HE2, I2]) = (1 1 1);Aeq (2, [LE1 LE2, BF2,有限合伙人))= (1,1,1,1);Aeq ([I1、I2 BF1, HPS]) = (1, 1, 1, 1);Aeq (4, [C、议员、有限合伙人,HPS]) = (1, 1, 1, 1);Aeq (5, [LE1 HE1 C, I1)) = (1, 1, 1, 1);Aeq(6日[HE1 HE2, BF1 BF2,议员))= [1,1,1,1,1);Aeq(7日[HE1 LE1 C, P1, I1)) =(1267.8、1251.4,192,3413,-1359.8);Aeq (8, [HE2 LE2, P2, I2]) = (1267.8, 1251.4, 3413, -1359.8);
目的関数は次のとおりです。
fTx =0.002614 HPS + 0.0239 pp + 0.009825 ep
.
この式をxベクトルの乗数のf
ベクトルとして記述します。
f = 0(大小(变量));f([HPS PP EP]) = [0.002614 0.0239 0.009825];
これで,linprog
ソルバーで必要な入力が揃いました。ソルバーを呼び出し,出力結果を以下のフォーマットで印刷します。
选择= optimoptions(“linprog”、“算法”、“对偶单纯形”);[x fval] = linprog(f,A,b,Aeq,beq,lb,ub,options);for d = 1:N fprintf('%12.2f \t%s\ N ',x(d),variables{d}) end fval . fprintf('%12.2f \t%s\ N ',x(d),variables{d}
結果は以下のとおりです。
找到最优解。136328.74 I1 244000.00 I2 128159.00 HE1 143377.00 HE2 0.00 LE1 100623.00 LE2 8169.74 C 0.00 BF1 0.00 BF2 380328.74 HPS 271536.00 MPS 100623.00 LPS 6250.00 P1 7060.71 P2 11239.29 PP 760.71 EP fval = 1.2703e+03
fval
からの出力では,すべての実行可能点で目的関数の値が最小になります。
解ベクトルx
は,目的関数が最小の値をもつ点です。次の点に注意してください。
BF1
、BF2
,およびLE1
は,下限値である0
です。
I2
は上限値である244000年
です。
f
ベクトルのゼロでない要素は以下のとおりです。
HPS
- - - - - -380328 .74点
页
- - - - - -11239 .29
EP
- - - - - -760.71
ビデオ优化建模,第2部分:转换为求解形式では,元の問題に関して,これらの特性が説明されています。
[1]埃德加,托马斯F.和大卫M. Himmelblau。化学过程的优化。麦格劳-希尔,纽约,1988年。