主要内容

建立一个线性程序,基于求解器

把问题转化为解决者的形式

此示例演示如何使用基于求解器的方法将问题从数学形式转换为Optimization Toolbox™求解器语法。虽然这个问题是一个线性规划,但这些技术适用于所有的求解器。

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

本例的其余部分只关注将问题转换为求解器语法。这个例子紧跟视频优化建模,第2部分:转换为求解器形式.视频和示例之间的主要区别在于,该示例演示了如何使用命名变量或索引变量,它们类似于散列键。这个区别在于将变量合并到一个向量中

模型描述

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

  1. 对问题有个全面的了解

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

  3. 识别(名字)变量

  4. 确定约束条件

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

  6. 用数学符号指定所有数量

  7. 检查模型的完整性和正确性

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

优化问题是使目标函数最小化,以所有其他表达式为约束条件。

目标函数为:

0.002614 HPS + 0.0239 pp + 0.009825 ep

约束:

2500P16250
I1192000年
C62000年
I1 - HE1132000年
I1 = le1 + he1 + c
1359.8 i1 = 1267.8 he1 + 1251.4 le1 + 192c + 3413 p1
3000P29000
I2244000年
LE2142000年
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 + pp24550年
EP +页12000年
国会议员271536年
有限合伙人100623年
所有变量都是正的。

解决方法

要解决优化问题,请执行以下步骤。

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

选择一个解算器

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

如你所见优化工具箱函数处理的问题或者是linprog函数参考页linprog求解器解决形式的问题

最小值 x f T x 这样 一个 x b 一个 e x b e l b x u b (1)
  • fTx意味着一个常数的行向量f乘以变量的列向量x.换句话说,

    fTxf(1)x(1) +f(2)x(2) +…+fnxn),

    在哪里n的长度f

  • 一个xb代表线性不等式。一个是一个k——- - - - - -n矩阵,k不等式的个数和n变量的数量(大小x).b是长度向量吗k.有关更多信息,请参见线性不等式约束

  • Aeq x说真的代表线性等式。Aeq是一个——- - - - - -n矩阵,等式的个数是和吗n变量的数量(大小x).说真的是长度向量吗.有关更多信息,请参见线性等式约束

  • x乌兰巴托表示向量中的每个元素x必须大于的对应元素,且必须小于对应的元素乌兰巴托.有关更多信息,请参见绑定约束

的语法linprog如其函数参考页所示,求解器为

[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),“;”]);结束

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

变量列表:BF1 = 8, BF2 = 9,等等

的组件的索引号x.您不必创建命名变量。这段视频优化建模,第2部分:转换为求解器形式演示了如何简单地使用的组成部分的索引号来解决问题x

写绑定约束

方程中有4个变量有下界,6个变量有上界模型描述.下界:

P12500
P23000
国会议员271536年
有限合伙人100623年

而且,所有的变量都是正的,这意味着它们的下界是零。

创建下界向量作为的向量0,然后加上另外四个下界。

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

有上界的变量是:

P16250
P29000
I1192000年
I2244000年
C62000年
LE2142000

将上界向量创建为的向量,然后加上6个上界。

乌兰巴托=正(大小(变量));乌兰巴托([P1, P2, I1、I2 C, LE2]) =…(6250, 9000, 192000, 244000, 62000, 142000];

写出线性不等式约束

的方程中有三个线性不等式模型描述

I1 - HE1132000年
EP +页12000年
P1 + p2 + pp24550年

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

I1 - HE1132000年
ep -页-12000年
- p1 - p2 - pp-24550年

MATLAB中®工作空间,创建一个矩阵是一个3 × 16的零矩阵,对应于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 + 192c + 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 + 192c + 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 = 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);

编写目的

目标函数是

fTx0.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是目标函数值最小的点。注意:

  • BF1BF2,LE10,下界。

  • I2244000年,其上界。

  • 的非零分量f向量是

    • HPS- - - - - -380328 .74点

    • - - - - - -11239 .29

    • EP- - - - - -760.71

这段视频优化建模,第2部分:转换为求解器形式根据原问题对这些特征进行了解释。

参考书目

[1]埃德加,托马斯F.和大卫M.希梅尔布劳。化工过程优化“,”纽约麦格劳-希尔,1988年。

相关的话题

Baidu
map