建立一个线性程序,基于求解器
把一个问题转换成解决问题的形式
此示例展示如何使用基于求解器的方法将问题从数学形式转换为优化工具箱™求解器语法。虽然问题是线性规划,但这些技术适用于所有求解器。
问题中的变量和表达式代表了一个化工厂的操作模型,来自埃德加和希梅尔布劳的一个例子[1].有两个视频描述了这个问题。
数学建模与优化,第1部分以图像的形式展示了这个问题。它展示了如何生成的数学表达式模型描述从图片上看。
优化建模,第2部分:转换为求解器形式描述如何将这些数学表达式转换为“优化工具箱”求解器语法。这个视频展示了如何解决这个问题,以及如何解释结果。
本例的其余部分仅涉及将问题转换为求解器语法。这个例子紧跟视频优化建模,第2部分:转换为求解器形式.视频和示例之间的主要区别是,该示例展示了如何使用命名变量或索引变量,它们类似于散列键。这个差异是将变量组合成一个向量.
模型描述
这段视频数学建模与优化,第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 + pp
≥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.
一个x≤b表示线性不等式。一个是一个k——- - - - - -n矩阵,k不等式的数量和n变量的数量(size ofx).b向量是长度的吗k.有关更多信息,请参见线性不等式约束.
Aeq x=说真的表示线性等式。Aeq是一个米——- - - - - -n矩阵,米等式的个数是和吗n变量的数量(size ofx).说真的向量是长度的吗米.有关更多信息,请参见线性等式约束.
磅≤x≤乌兰巴托表示向量中的每个元素x必须大于的对应元素磅的对应元素,且必须小于乌兰巴托.有关更多信息,请参见绑定约束.
的语法linprog
如其函数参考页所示,Solver是
[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);
的输入linprog
中的矩阵和向量方程1.
将变量组合成一个向量
方程中有16个变量模型描述.把这些变量放到一个向量中。变量向量的名称是x在方程1.确定一个顺序,构造的组成部分x在变量之外。
下面的代码使用变量名称的单元格数组构造向量。
变量= {“I1”,“I2”,“HE1”,“何”,“LE1”,“LE2”,“C”,BF1的,...“BF2”,“HPS”,“议员”,“有限合伙人”,“P1”,“P2”,“页”,“EP”};N =长度(变量);为索引创建变量为v = 1:N eval([变量{v},' = 'num2str (v),“;”]);结束
执行这些命令会在你的工作区中创建以下命名变量:
的组件的索引号x.您不必创建命名变量。这段视频优化建模,第2部分:转换为求解器形式的组件的索引号说明如何简单地解决该问题x.
写入绑定约束
的方程中有四个变量有下界,六个变量有上界模型描述.下界:
P1
≥2500
P2
≥3000
国会议员
≥271536年
有限合伙人
≥100623年
.
而且,所有的变量都是正的,这意味着它们的下界为零。
创建下界向量磅
作为向量0
,然后加上其他四个下界。
Lb =零(大小(变量));lb([P1,P2,MPS,LPS]) =…(2500、3000、271536、100623);
有上界的变量是:
P1
≤6250
P2
≤9000
I1
≤192000年
I2
≤244000年
C
≤62000年
LE2
≤142000
.
的向量创建上界向量正
,然后将六个上界相加。
ub = Inf(大小(变量));ub([P1,P2,I1,I2,C,LE2]) =…(6250, 9000, 192000, 244000, 62000, 142000];
写出线性不等式约束
方程中有三个线性不等式模型描述:
I1 - he1
≤132000年
Ep + pp
≥12000年
P1 + p2 + pp
≥24550年
.
为了得到这种形式的方程一个x≤b把所有变量都放在不等式的左边。所有这些方程都有这种形式。确保每个不等式都是“小于”的形式,在适当的地方乘以-1:
I1 - he1
≤132000年
- ep - pp
≤-12000年
- p1 - p2 - pp
≤-24550年
.
在MATLAB中®工作区,创建一个
矩阵是一个3 × 16的零矩阵,对应于16个变量中的3个线性不等式。创建b
有三个分量的向量。
A = 0 (3,16);A(1, i1) = 1;A(1, he1) = -1;B (1) = 132000;A(2, ep) = -1;A(2, pp) = -1;B (2) = -12000;A(3,[p1, p2, pp]) = [-1,-1,-1];B (3) = -24550;
写出线性等式约束
的方程中有八个线性方程模型描述:
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
1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1 - 1359.8 i1 = 0
1267.8 he2 + 1251.4 le2 + 3413 p2 - 1359.8 i2 = 0
.
现在编写Aeq
矩阵和说真的
对应于这些方程的向量。在MATLAB工作区中,创建Aeq
矩阵是一个8 × 16的零矩阵,对应于8个线性方程,包含16个变量。创建说真的
有八个分量的向量,都是零。
Aeq = 0 (8,16);Beq = 0 (8,1);Aeq(1,[LE2,HE2,I2]) = [1,1,-1];Aeq(2,[LE1,LE2,BF2,LPS]) = [1,1,1,-1];Aeq(3,[I1,I2,BF1,HPS]) = [1,1,1,-1];Aeq(4,[C,MPS,LPS,HPS]) = [1,1,1,-1];Aeq(5,[LE1,HE1,C,I1]) = [1,1,1,-1];Aeq(6,[HE1,HE2,BF1,BF2,MPS]) = [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
.
把这个表达式写成向量形式f
的乘数x向量:
F = 0(大小(变量));f([HPS PP EP]) = [0.002614 0.0239 0.009825];
用linprog解决问题
控件所需的输入linprog
解算器。调用求解器并以格式化的形式打印输出:
选项= optimoptions(“linprog”,“算法”,对偶单纯形的);[x fval] = linprog(f,A,b,Aeq,beq,lb,ub,options);为d = 1:N fprintf(' % 12.2 f \ t % s \ n”x (d)、变量d {})结束fval
结果:
找到最优解。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部分:转换为求解器形式根据原问题给出了这些特征的解释。
参考书目
埃德加,托马斯F.和大卫M.希梅尔布劳。化学过程优化“,”麦格劳-希尔,纽约,1988年。