建立了一个线性规划,具体问题具体分析
将问题转化为求解器的形式
这个例子展示了如何将一个线性问题从数学形式转化为优化工具箱™解决语法运用具体问题具体分析的方法。
问题中的变量和表达式表示的模型操作一家化工厂,埃德加和库普的一个例子[1]。两个相关视频描述这个问题。
数学建模与优化,第1部分提出问题以图片形式,显示如何生成的数学表达式模型描述。
优化建模,第2部分:具体问题具体分析解决方案的数学模型描述如何将这些数学表达式转换为优化工具箱解决语法。这个视频展示了如何解决问题,以及如何解释结果。
这个例子中,密切关注第2部分的视频,致力于将解决语法问题。
模型描述
第1部分的视频显示以下方法将问题转化为数学形式:
得到一个整体的问题。
确定目标(最大化或最小化)。
识别(名字)的变量。
确定约束条件。
确定哪些变量可以控制。
指定所有数量的数学符号。
检查模型的完整性和正确性。
意义的变量在本节中,看到第1部分视频。
最小化目标函数优化问题,受到其他表达式作为约束条件。
目标函数是:
HPS 0.002614 + 0.0239 + 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 +何
1359.8 I2 = 1267.8 + 1251.4 LE2 + 3413 P2
HPS = I1和I2 + BF1 +
HPS =议员C + +有限合伙人
有限合伙人= LE1 + LE2 + BF2
议员= HE1 + + BF1 - BF2
P1和P2 + PP
≥24550年
EP +页
≥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);何= optimvar (“何”,下界的,0);HPS = optimvar (“HPS”,下界的,0);议员= optimvar (“议员”,下界的,271536);有限合伙人= optimvar (“有限合伙人”,下界的,100623);BF1 = optimvar (BF1的,下界的,0);BF2 = optimvar (“BF2”,下界的,0);EP = optimvar (“EP”,下界的,0);页= optimvar (“页”,下界的,0);
创建问题和客观
容器创建一个优化问题。包括问题的目标函数。
linprob = optimproblem (“目标”,0.002614 * HPS + 0.0239 *页+ 0.009825 * EP);
创建和包括线性约束
表达式的问题包含三个线性不等式:
I1 - HE1 ≤132000年 EP +页 ≥12000年 P1和P2 + PP ≥24550年 |
(1) |
创建这些不等式约束,包括他们的问题。
linprob.Constraints。cons1 = I1 - HE1 < = 132000;linprob.Constraints。cons2 = EP + PP > = 12000;linprob.Constraints。cons3 = P1 + P2 + PP > = 24550;
这个问题有八个线性等式:
I2 = LE2 +何 有限合伙人= LE1 + LE2 + BF2 HPS = I1和I2 + BF1 + HPS =议员C + +有限合伙人 I1 = LE1 + HE1 + C 议员= HE1 + + BF1 - BF2 1359.8 I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1 1359.8 I2 = 1267.8 + 1251.4 LE2 + 3413 P2 。 |
(2) |
包括这些约束。
linprob.Constraints。econs1 = LE2 + HE2 = = I2;linprob.Constraints。econs2 = LE1 + LE2 + BF2 = =有限合伙人;linprob.Constraints。econs3 = I1和I2 + BF1 = + = HPS;linprob.Constraints。econs4 = C +议员+ 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 =解决(linprob);
找到最优解。
检查解决方案
评估目标函数。(你也可以获得这个值通过调用[linsol, fval] =解决(linprob)
)。
评估(linprob.Objective linsol)
ans = 1.2703 e + 03
核电站的成本最低的方法操作成本1207 .30美元。
检查变量值的解决方案。
台= struct2table (linsol)
台= 1×16表BF1 BF2 C EP HE1 HE2 HPS I1 I2 LE1 LE2有限合伙人议员P1 P2 PP中国画交__________ __________ __________ __________ ________ ___ _____ _____ _____ _____ _____ _____ 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
这张桌子太大容易查看其内容。垂直堆栈变量安排他们。
var = {“P1”,“P2”,“I1”,“I2”,“C”,“LE1”,“LE2”,“HE1”,“何”,…“HPS”,“议员”,“有限合伙人”,BF1的,“BF2”,“EP”,“页”};outputvars =堆栈(资源描述、var、“NewDataVariableName”,“Amt”,“IndexVariableName”,“Var”)
outputvars = 16×2表Var Amt ___ __________ P1 6250 P2 7060.7 I1 1.3633 e + 05 I2 2.44 e + 05 C 8169.7 LE1 0 LE2 1.0062 e + 05 HE1 1.2816 e + 05 HE2 1.4338 e + 05 HPS 3.8033 e + 05年议员2.7154 e + 05有限合伙人1.0062 e + 05 BF1 BF2 0 EP 11239页760.71
BF1
,BF2
,LE1
是0
,他们的下界。I2
是244000年
,其上界。目标函数的非零组件(成本)
HPS
- - - - - -380328 .74点
页
- - - - - -11239 .29
EP
- - - - - -760.71
第2部分视频解释这些特征的原始问题。
第二个解决方案方法:创建一个优化变量和指标
或者,您可以解决这个问题用一个优化变量指标变量的名称问题。这种方法使您能够给一个下界的0到所有问题变量。
var = {“P1”,“P2”,“I1”,“I2”,“C”,“LE1”,“LE2”,“HE1”,“何”,…“HPS”,“议员”,“有限合伙人”,BF1的,“BF2”,“EP”,“页”};x = optimvar (“x”var,下界的,0);
设置变量范围
包括使用点符号的变量的取值范围。
x (“P1”)。下界= 2500;x (“P2”)。下界= 3000;x (“议员”)。下界= 271536;x (“有限合伙人”)。下界= 100623;x (“P1”)。UpperBound = 6250;x (“P2”)。UpperBound = 9000;x (“I1”)。UpperBound = 192000;x (“I2”)。UpperBound = 244000;x (“C”)。UpperBound = 62000;x (“LE2”)。UpperBound = 142000;
创建问题,线性约束和解决方案
剩下的问题设置类似于使用分离变量设置。不同之处在于,而不是解决一个变量的名字,等P1
使用索引,你解决它,x (P1)
。
创建问题的对象,包括线性约束和解决这个问题。
linprob = optimproblem (“目标”,0.002614 * x (“HPS”)+ 0.0239 * x (“页”)+ 0.009825 * x (“EP”));linprob.Constraints。cons1 = x (“I1”)- - - x (“HE1”)< = 132000;linprob.Constraints。cons2 = x (“EP”)+ x (“页”)> = 12000;linprob.Constraints。cons3 = 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”)+ 1251.4 * x (“LE1”)+ 192 * x (“C”)+ 3413 * x (“P1”)= = 1359.8 * x (“I1”);linprob.Constraints。econs8 = 1267.8 * x (“何”)+ 1251.4 * x (“LE2”)+ 3413 * x (“P2”)= = 1359.8 * x (“I2”);[linsol, fval] =解决(linprob);
找到最优解。
检查索引解决方案
检查解决方案作为垂直表。
台=表(var ', linsol.x ')
台表Var1 = 16×2 Var2 _____ _____“P1”6250“P2”7060.7“I1”1.3633 e + 05 I2的2.44 e + 05 ' C ' 8169.7 ' LE1 ' 0 ' LE2 1.0062 e + 05 ' HE1 1.2816 e + 05“何”1.4338 e + 05的HPS 3.8033 e + 05年的议员们2.7154 e + 05“有限合伙人”1.0062 e + 05 BF1的0“BF2”0“EP”760.71页11239
参考书目
[1]埃德加·托马斯·F。,David M. Himmelblau.化工过程的优化。纽约:麦格劳-希尔,1987年。