主要内容

设置一个基于求解器的线性程序

转换问题到解决形式

这个示例展示了如何使用基于求解器的方法将问题从数学形式转换为最优化工具箱™求解器语法。当问题是线性规划时,这些技巧适用于所有的求解者。

问题中的变量和表达代表了操作化工厂的模型,从Edgar和Himmelblau的一个例子[1].有两个视频描述了这个问题。

本示例的其余部分只关心将问题转换为求解器语法。这个例子紧跟着视频优化建模,第2部分:转换为求解器.该视频和示例的主要区别在于,该示例展示了如何使用命名变量或索引变量,这与散列键类似。这个区别在于将变量组合成一个矢量

模型描述

这段视频数学建模与优化,第1部分建议将问题转换为数学形式的一种方法是:

  1. 全面了解问题

  2. 确定目标(最大化或最小化某事)

  3. 识别(名称)变量

  4. 确定约束条件

  5. 确定您可以控制哪些变量

  6. 在数学符号中指定所有数量

  7. 检查模型以获得完整性和正确性

对于本节中变量的含义,请参阅视频数学建模与优化,第1部分

优化问题是最小化目标函数,受到所有其他表达式的约束。

目标函数为:

0.002614 HPS + 0.0239 pp + 0.009825 ep

约束:

2500≤.P1≤.6250.
I1≤.192,000
C≤.62000年
I1 - HE1≤.132000年
I1 = le1 + he1 + c
1. i1 = 1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1
3000≤.P2.≤.9000
I2≤.244000年
Le2.≤.142,000.
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
= he1 + he2 + bf1 - bf2
P1 + P2 + PP24550年
EP + PP.12,000.
国会议员271536年
有限合伙人100,623
所有变量都是正的。

解决方法

为了解决优化问题,采取以下步骤。

这些步骤也在视频中显示优化建模,第2部分:转换为求解器

选择一个求解器

为这个问题找到合适的解决方案,请参阅优化决策表.表格要求您根据目标函数类型和约束类型对问题进行分类。对于这个问题,目标函数是线性的,约束条件也是线性的。决策表建议使用linprog.求解器。

如你所见优化工具箱函数处理的问题或者是linprog.函数参考页linprog.解决者解决了表格的问题

X F T. X 这样 { 一种 X ≤. B. 一种 E. 问: X = B. E. 问: L. B. ≤. X ≤. B. (1)
  • FT.X指常数的行向量F变量的列向量相乘X.换句话说,

    FT.X=F(1)X(1)+F(2)X(2) +…+FNXN),

    在哪里N是的长度F

  • x≤.B.代表线性不平等。一种是A.K.——- - - - - -N矩阵,其中K.不平等的数量是多少N变量的数量(大小)是多少X).B.向量的长度是多少K..有关更多信息,请参阅线性不等式约束

  • AEQ X.=贝卡表示线性等于。AEQ.是一个m——- - - - - -N矩阵,其中m是平等的数量和N变量的数量(大小)是多少X).贝卡向量的长度是多少m.有关更多信息,请参阅线性等式约束

  • ≤.X≤.UB.表示向量中的每个元素X必须大于相应的元素,且必须小于对应的元素UB..有关更多信息,请参阅束缚约束

的语法linprog.求解器,如功能参考页所示

[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);

输入的输入linprog.求解器是矩阵和向量方程1

将变量组合成一个矢量

的方程中有16个变量模型描述.把这些变量放到一个向量中。变量向量的名称为X方程1.决定一个订单,并构造组件X从变量中剔除。

以下代码使用单元格数组来构造矢量的矢量。

变量= {'i1','i2','he1','he2','le1','le2','le2','c','bf1','bf2','bf2','hps','mps','lps','p1','p2','pp','ep'};n =长度(变量);%创建v = 1:n eval的索引变量([变量{v}','=',num2str(v),';');结尾

执行这些命令会在工作区中创建以下命名变量:

这些命名的变量代表了的组成部分的索引号X.您不必创建命名变量。这段视频优化建模,第2部分:转换为求解器显示如何只需使用组件的索引号来解决问题X

写束缚约束

的方程中有四个变量有下界,六个变量有上界模型描述.下界:

P12500
P2.3000
国会议员271536年
有限合伙人100,623

此外,所有变量都是正的,这意味着它们具有零的下限。

创建下限向量作为向量0.,然后添加四个其他下限。

磅= 0(大小(变量));磅([P1, P2,国会议员,有限合伙人])=…(2500、3000、271536、100623);

上限的变量是:

P1≤.6250.
P2.≤.9000
I1≤.192,000
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.12,000.
P1 + P2 + PP24550年

为了得到这种形式的方程x≤.B.,把所有的变量放在不等式的左边。所有这些方程都有这种形式。确保每个不等式都是“小于”的形式,在适当的地方乘以-1:

I1 - HE1≤.132000年
-EP - PP.≤.-12,000
-P1 - P2 - PP≤.-24550年

在你的matlab中®工作区,创建一种矩阵是一个3 × 16的零矩阵,对应于16个变量的3个线性不等式。创建B.有三个分量的向量。

a =零(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
= he1 + he2 + bf1 - bf2
1. 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的零矩阵,对应于由16个变量组成的8个线性方程。创建贝卡矢量与八个组件,全零。

AEQ = Zeros(8,16);Beq =零(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];

编写目的

目标函数为

FT.X=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','算法','dual-simplex');[x fval] = Linprog(F,A,B,AEQ,BEQ,LB,UB,选项);对于d = 1:n fprintf('%12.2f \ 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.,他们的下限。

  • I2244000年,它的上限。

  • 非零组件F矢量是

    • HPS.-380,328.74

    • PP.-11,239.29

    • EP.-760.71

这段视频优化建模,第2部分:转换为求解器根据原问题给出这些特征的解释。

参考书目

埃德加,托马斯·F,大卫·m·希梅尔布劳。化学过程的优化。McGraw-Hill,纽约,1988年。

相关话题