線形計画法の設定,問題ベ,ス
ソルバ,形式への問題の変換
この例では,問題ベースのアプローチを使用して,線形問題を数学的な形式から优化工具箱™ソルバーの構文に変換する方法を示します。
問題に含まれる変数や式は,化学工場の運営モデルを表しており,埃德加と库普による[1]から引用しています。2の関連するビデオで問題が解説されます。
数学建模与优化,第1部分では,問題が図解され,モデルの説明の数式の生成方法が示されています。
优化建模,第2部分:基于问题的数学模型求解では,これらの数式を优化工具箱ソルバーの構文に変換する方法が説明されています。また,問題の解法や,結果の解釈方法も示されています。
第2部分のビデオに厳密に従っているこの例は,問題をソルバー構文に変換することに焦点が当てられています。
モデルの説明
第一部分のビデオは,問題を数学的形式に変換するための次のアプロ,チを提案しています。
問題の概要を示す。
ゴ,ルを特定する(何らかの要素の最大化または最小化)。
変数を特定(指定)する。
制約を特定する。
制御可能な変数を判別する。
すべての数量の数学的表記で指定する。
モデルの完全性と正確さをチェックする。
このセクションでの変数の意味にいては,Part 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 + pp
≥12000年
国会议员
≥271536年
有限合伙人
≥100623年
すべての変数が正です。
最初の解法:各問題変数の最適化変数の作成
最初の解法では,各問題変数の最適化変数を作成します。変数を作成する際に,それらの範囲を含めます。
P1 = optimvar(“P1”,下界的, 2500,“UpperBound”, 6250);P2 = optimvar(“P2”,下界的, 3000,“UpperBound”, 9000);I1 = optimvar(“I1”,下界的0,“UpperBound”, 192000);I2 = optimvar(“I2”,下界的0,“UpperBound”, 244000);C = optimvar(“C”,下界的0,“UpperBound”, 62000);LE1 = optimvar(“LE1”,下界的, 0);LE2 = optimvar(“LE2”,下界的0,“UpperBound”, 142000);HE1 = optimvar(“HE1”,下界的, 0);HE2 = optimvar(“何”,下界的, 0);HPS = optimvar(“HPS”,下界的, 0);MPS = optimvar(“议员”,下界的, 271536);LPS = optimvar(“有限合伙人”,下界的, 100623);BF1 = optimvar(BF1的,下界的, 0);BF2 = optimvar(“BF2”,下界的, 0);EP = optimvar(“EP”,下界的, 0);PP = optimvar(“页”,下界的, 0);
問題および目的の作成
最適化問題コンテナ,を作成します。目的関数を問題に含めます。
Linprob =优化问题(“目标”,0.002614* hps + 0.0239* pp + 0.009825* ep);
線形制約を作成して含める
問題の式には,次の3の線形不等式が含まれています。
I1 - he1 ≤132000年 Ep + pp ≥12000年 P1 + p2 + pp ≥24550年 |
(1) |
これらの不等式制約を作成し,問題に含めます。
linprob.Constraints。con1 = I1 - HE1 <= 132000;linprob.Constraints。con2 = EP + PP >= 12000;linprob.Constraints。con3 = P1 + P2 + PP >= 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 . |
(2) |
これらの制約も含めます。
linprob.Constraints。econs1 = LE2 + HE2 == I2;linprob.Constraints。econs2 = LE1 + LE2 + BF2 == LPS;linprob.Constraints。econs3 = I1 + I2 + BF1 == HPS;linprob.Constraints。econs4 = C + MPS + LPS == HPS;linprob.Constraints。econs5 = LE1 + HE1 + C == I1; linprob.Constraints.econs6 = HE1 + HE2 + BF1 == BF2 + MPS; linprob.Constraints.econs7 = 1267.8*HE1 + 1251.4*LE1 + 192*C + 3413*P1 == 1359.8*I1; linprob.Constraints.econs8 = 1267.8*HE2 + 1251.4*LE2 + 3413*P2 == 1359.8*I2;
問題を解く
問題の定式化は完了です。解决
を使用して,問題を解きます。
Linsol = solve(linprob);
找到最优解。
解の検証
目的関数を評価します。([linsol,fval] = solve(linprob)
を呼び出すことで,この値を取得することもできます。)
评估(linprob.Objective linsol)
Ans = 1.2703e+03
この工場の運営にかかる最低コストは$1,207.30です。
解の変数値を調べます。
TBL = struct2table(linsol)
台= 1×16表BF1 BF2 C EP HE1 HE2 HPS I1 I2 LE1 LE2有限合伙人议员P1 P2页 ___ ___ ______ ______ __________ __________ __________ __________ ________ ___ __________ __________ __________ ____ ______ _____ 0 0 8169.7 760.71 1.2816 3.8033 1.4338 e + e + 05年05年1.3633 e + e + 05年05年2.44 1.0062 e + e + 05 0 05年1.0062 2.7154 e + e + 05年05 6250 7060.7 11239
この表は幅が広すぎて内容を簡単に把握できません。変数を縦に並べて見やすくします。
Vars = {“P1”,“P2”,“I1”,“I2”,“C”,“LE1”,“LE2”,“HE1”,“何”,...“HPS”,“议员”,“有限合伙人”,BF1的,“BF2”,“EP”,“页”};Outputvars = stack(tbl,vars,“NewDataVariableName”,“Amt”,“IndexVariableName”,“Var”)
outputvars = 16×2 table Var Amt ___ __________ P1 6250 P2 7060.7 I1 1.3633e+05 I2 2.44e+05 C 8169.7 LE1 0 LE2 1.0062e+05 HE1 1.2816e+05 HE2 1.4338e+05 HPS 3.8033e+05 MPS 2.7154e+05 LPS 1.0062e+05 BF1 0 BF2 0 EP 760.71 PP 11239
BF1
、BF2
,およびLE1
は,下限値である0
です。I2
は上限値である244000年
です。目的関数(コスト)のゼロでない成分は以下のとおりです。
HPS
- - - - - -380328 .74点
页
- - - - - -11239 .29
EP
- - - - - -760.71
第二部分のビデオでは,元の問題に関して,これらの特性が説明されています。
2番目の解法:1
別の方法として,問題変数の名前をインデックスとしてもつ最適化変数を1つのみ使用して,問題を解くこともできます。この方法では,下限0を一度にすべての問題変数に与えることができます。
Vars = {“P1”,“P2”,“I1”,“I2”,“C”,“LE1”,“LE2”,“HE1”,“何”,...“HPS”,“议员”,“有限合伙人”,BF1的,“BF2”,“EP”,“页”};X = optimvar(“x”var,下界的, 0);
変数範囲の設定
ドット表記を使用して,変数に範囲を含めます。
x (“P1”).LowerBound = 2500;x (“P2”).LowerBound = 3000;x (“议员”).LowerBound = 271536;x (“有限合伙人”).LowerBound = 100623;x (“P1”).UpperBound = 6250;x (“P2”).UpperBound = 9000;x (“I1”).上界= 192000;x (“I2”).UpperBound = 244000;x (“C”).上界= 62000;x (“LE2”).上界= 142000;
問題,線形制約,解の作成
問題の設定の残りの部分は,個別の変数を使用した設定に似ています。違いは,P1
などの名前で変数を指定するのではなく,そのx (P1)
を使用する点です。
問題のオブジェクトを作成し,線形制約を含めて,問題を解きます。
Linprob =优化问题(“目标”, 0.002614 * x (“HPS”+ 0.039 *x(“页”) + 0.009825*x(“EP”));linprob.Constraints。con1 = x(“I1”) - x(“HE1”) <= 132000;linprob.Constraints。con2 = x(“EP”) + x(“页”) >= 12000;linprob.Constraints。con3 = x(“P1”) + x(“P2”) + x(“页”) >= 24550;linprob.Constraints。Econs1 = x(“LE2”) + x(“何”) == x(“I2”);linprob.Constraints。Econs2 = x(“LE1”) + x(“LE2”) + x(“BF2”) == x(“有限合伙人”);linprob.Constraints。Econs3 = x(“I1”) + x(“I2”) + x(BF1的) == x(“HPS”);linprob.Constraints。Econs4 = x(“C”) + x(“议员”) + x(“有限合伙人”) == x(“HPS”);linprob.Constraints。Econs5 = x(“LE1”) + x(“HE1”) + x(“C”) == x(“I1”);linprob.Constraints。Econs6 = x(“HE1”) + x(“何”) + x(BF1的) == x(“BF2”) + x(“议员”);linprob.Constraints。Econs7 = 1267.8*x(“HE1”) *x(“LE1”) + 192*x(“C”) + 3413*x(“P1”) == 1359.8*x(“I1”);linprob.Constraints。Econs8 = 1267.8*x(“何”) *x(“LE2”) + 3413*x(“P2”) == 1359.8*x(“I2”);[linsol,fval] = solve(linprob);
找到最优解。
ンデックス付きの解の検証
解を縦型の表として調べます。
TBL = table(vars',linsol.x')
tbl = 16×2表Var1 Var2 _____ __________ 'P1' 6250 'P2' 7060.7 'I1' 1.3633e+05 'I2' 2.44e+05 'C' 8169.7 'LE1' 0 'LE2' 1.0062e+05 'HE1' 1.2816e+05 'HE2' 1.4338e+05 'HPS' 3.8033e+05 'MPS' 2.7154e+05 'LPS' 1.0062e+05 'BF1' 0 'BF2' 0 'EP' 760.71 'PP' 11239
参考文献
埃德加,托马斯F.和大卫M.希梅尔布劳。化学过程优化“,”纽约:麦格劳-希尔,1987年。