线性规划——单纯形法文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性规划——单纯形法

设计文档

——《通用优化模块》

编写人:徐天爽

编写时间:2010年06月完成

2010年06月整理

目录

第一部分功能概述 (1)

第二部分理论知识 (2)

2.1 线性规划标准型 (2)

2.2单纯形法 (4)

2.2.1修正单纯形法 (4)

2.2.2Bland规则 (7)

第三部分程序主要内容 (9)

第四部分程序测试 (10)

备注 (17)

参考文献 (18)

第一部分功能概述

单纯形法是线性规划算法的一种。由于若线性规划问题有最优解,则一定存在一个基本可行解是最优解,因此单纯形法是通过沿着可行集的边界,从一个顶点转移到改善当前目标函数值的相邻定点,以此来寻找最优解。

程序编写了加入Bland规则的修正单纯形法,只需用户给定设计变量个数、约束条件个数、约束条件系数,委托矩阵操作类MatrixOperation进行矩阵运算,即可实现线性规划问题的优化。

第二部分 理论知识

线性规划问题具备以下性质:

定理1 若线性规划问题的可行域X 非空,则X 是一个凸集。

定理2 线性规划问题的每一个基本可行解x 都对应于可行域X 的一个顶点。

定理3 若线性规划问题有最优解,则一定存在一个基本可行解是最优解。 定理4 若线性规划问题有最优解,则目标函数的最优值一定可以再可行域

X 的某个顶点上达到。

2.1 线性规划标准型

定义1 如果目标函数是设计变量的线性函数,且约束条件也是关于设计变量的线性等式或线性不等式,则相应的数学问题就称为一个线性规划问题。

单纯形法计算问题的最优值需要将原问题统一为标准形式。定义线性规划问题的标准形式为:

定义2 给定线性规划问题的标准型为

()()1

1min ..

1,2,,01,2,,n

j j

j n ij j i j j z c x s t a x b i m x j n ==⎧

=⎪⎪

==⎨⎪

⎪≥=⎪⎩

∑∑ (1)

其中()01,2,

,i b i m ≥=。即对目标函数一律求最小值;设计变量均非负;约束

条件除非负约束条件之外一律为等式约束;约束条件的右端项一律非负。

定义3 如果约束条件中含有不等式1n

ij j i j a x b =≤∑且0i b ≥,则可引入一个新

的变量i x ',称为松弛变量;如果约束条件中含有不等式1

n

ij j i j a x b =≥∑且0i b ≥,则

可引入一个新的变量i x '',称为剩余变量。

任意线性规划问题,总可以在标准化过程中设法使所得到的标准型线性规划的约束系数矩阵A 中存在一个m 阶的单位阵,即

(1)若线性规划的m 个约束条件都是“≤”的形式,且右端项都为非负,则在标准化时,每个约束条件的左边都加上一个松弛变量,该松弛变量对应的系数列向量是m 维的单位向量;

(2)若第i 个约束条件为“≥”的形式,且右端项为非负,则再改约束条件左端减去剩余变量化成标准形式后,再加上一个非负的新变量,称为人工变量。显然,人工变量的系数列向量也为m 维的单位向量;

(3)若第i 个约束条件为等式,且右端项为非负,则直接在该等式左端添加人工变量。

例:将一线性规划问题的约束条件123123123123..

3243235200,0,0

s t x x x x x x x x x x x x +-≥-⎧⎪-+≥⎪

++=⎪⎪≥≥≥⎩

化成标准型。

第一个约束条件可化为1233243x x x --+≤,即12343243x x x x --++=; 第二个约束条件可化为12356235x x x x x -+-+=; 第三个约束条件可化为123720x x x x +++=。 此时()01,2,

,7j x j ≥=。显然,向量4A 、6A 和7A 构成了一个3阶的单位

阵。为讨论方便,可将标准型线性规划中的变量次序重新调整并编号,使的对应单位阵的编号排在最前或最后(本程序中排在最后)m 个变量的位置上,这对计算结果无影响。

而在引入人工变量之后,所得到的线性规划的约束条件与原来的约束条件不完全等价,需要对原目标函数进行修正,通常采用两种方法:

(1)大M 法

此方法原理是将目标函数中人工变量前乘以一个足够大的正数M ,当人工变量取值大于0时,目标函数就不能实现最优。

例:对于线性规划问题13

123123123123min 3..3243235200,0,0

z x x s t x x x x x x x x x x x x =-⎧⎪+-≥-⎪⎪

-+≥⎨

⎪++=⎪⎪≥≥≥⎩,将其化为标准型为

()

12345671234123561237min

3000..3243235200

1,2,,7j z x x x x x Mx Mx s t x x x x x x x x x x x x x x j ⎧=+-++++⎪--++=⎪⎪-+-+=⎨⎪+++=⎪⎪≥=⎩

,其中6x 和7x 是人工变量,M 是

一个足够大的正数。接下来可用单纯形法进行优化。

(2)两阶段法

由于问题的目标函数有两方面作用:其一是使得人工变量都取0值,从而可得问题的一个可行解;其二是在可行域内找到使目标函数达到最小值的最优解。因此这两种作用也可分为两阶段来完成:第一阶段求解一个目标函数中只包含人工变量的线性规划,由此得到问题的一个可行解;第二个阶段以此基本可行解作为初始基本可行解,应用单纯形法继续求解线性规划问题,从而获得最优解。

由于大M 法需要给定一个足够大的正数M ,而在计算机求解时,如何自动给定这个足够大的正数M 是需要考虑的。同时,当优化问题系数与这个M 值相对比较接近或者远远小于M 的时候,将可能导致计算机取值误差。以上两点为大M 法的缺点,但是相对两阶段法而言,大M 法更容易编程实现,因此本程序采用大M 法来处理人工变量。

2.2 单纯形法

2.2.1 修正单纯形法

标准单纯形法每次迭代不仅需要存储一个m n ⨯维的矩阵A ,而且A 中所有数据都需要计算一遍。当m 和n 的数值较大时,将会占用较大的内存空间并浪费很多工作量。事实上,A 中除了换入列以外的其他列没必要计算。

修正单纯形法每次迭代只计算换入列、常数列和检验数行,从而大大减少了

相关文档
最新文档