线性规划求解

  • 线性规划概念介绍
  • 模型建立步骤
  • 基本的线性模型例子
  • 模型一般形式和标准形式
  • 单纯形法、大M法、两阶段法
  • 总结


线性规划概念介绍

线性规划是优化问题的特殊情形,其模型中的目标函数和约束条件均为决策变量的线性函数。

模型建立步骤

  1. 确定决策变量
  2. 确定目标函数
  3. 确定约束条件

基本的线性模型例子

列1【合理下料问题】用长度为500厘米的条材,截成长度为98厘米和78厘米两种毛胚,要求长98厘米的毛胚1000根,78厘米长的毛胚2000更,应增氧才能使所用的原材料最少,试建立问题的数学模型。
一根500厘米的条材截成98厘米和78厘米长度的毛胚有很多种方案,列出方案表如下:

方案序号

98厘米毛胚数

78厘米毛胚数

剩余厘米数

1

0

6

32

2

1

5

12

3

2

4

70

4

3

3

50

5

4

2

30

6

5

1

10

设决策变量xi(java 线性规划 算法 线性规划实例及求解_线性规划)表示第i个方案所用的条材数。目标函数可以表示为:
java 线性规划 算法 线性规划实例及求解_数学模型_02
约束条件就是
java 线性规划 算法 线性规划实例及求解_约束条件_03
由于是实际问题,决策变量应该取非负整数。

列2【0-1背包问题】一个旅行者要在背包里装一些最有用的旅行物品。背包容积为a,携带物品总质量最多为b。现有物品m件,第j件物品体积为aj,质量为bj(j=1,2,…,m)。为了比较物品的有用程度,假设第j件物品的价值是cj(j=1,2,…,m)。若每件物品只能携带整件,每件物品都能放入背包,并且不考虑放入背包里面的间隙。问旅行者应当携带那几件物品才能使得物品的总价值最大?试建立问题的数学模型。
每件物品有被选择和不被选择两种可能,为此,设java 线性规划 算法 线性规划实例及求解_线性规划_04为第j件物品装入的数量,则对应于m件物品引入m个0-1变量:

java 线性规划 算法 线性规划实例及求解_数学模型_05
目标函数=物品携带的总价值 java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_06
约束条件,所携带的物品总体积不超过a,总质量不超过b
数学模型如下:
z=java 线性规划 算法 线性规划实例及求解_数学模型_07
java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_08
该模型决策变量x只能取0或1,成为0-1整数规划,简称0-1规划。

列3【运输问题】某公司有3个同类产品的工厂(简称产地Ai,i=1,2,3),生产的产品由4个销售点(简称销售地Bi,i=1,2,3,4)销售,各工厂的生产量(用ai表示),各销售点的销量(用bj表示)以及各工厂到销售点的单位产品运价(用cij表示)如表2.3表示。问该公司应如何调运产品,在满足各销售点的需求量的前提下,使总的运费最少?
表2.3 产量、销量与单位产品运价关系表

产地\单位运价\销地

B1

B2

B3

B4

产量ai

A1

3

11

3

10

7

A2

1

9

2

8

4

A3

7

4

10

5

9

销量bj

3

6

5

6

-

本问题中“如何制定调运方案”,就是指的安排一个产地和一个销地各应安排多大的运量,因此令从产地 Ai到销地Bj的运量为xij(i=1,2,3;j=1,2,3,4)作为本问题的决策变量。
目标函数=总运费=java 线性规划 算法 线性规划实例及求解_数学模型_09
约束条件:由表2.3可知,运输问题的总产量(7+4+9)=总销量(3+6+5+6),所以运输问题是平衡运输问题。第一个约束条件是:各产地运往某一销地的物品数量之和等于该销地的销量,即java 线性规划 算法 线性规划实例及求解_约束条件_10,第二个约束条件:某一产地运往各销售地的物品数量之和等于该地的产量,即java 线性规划 算法 线性规划实例及求解_数学模型_11,第三个约束条件:决策变量为非负,即java 线性规划 算法 线性规划实例及求解_数学模型_12
因此数学模型可表述如下:
java 线性规划 算法 线性规划实例及求解_数学模型_13
java 线性规划 算法 线性规划实例及求解_约束条件_14

模型一般形式和标准形式

一般形式:
java 线性规划 算法 线性规划实例及求解_线性规划_15
java 线性规划 算法 线性规划实例及求解_约束条件_16
标准形式(也就是把一般形式的不等式转换成等式,目标函数一般转化为min方便后面求解):
java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_17
java 线性规划 算法 线性规划实例及求解_数学模型_18
转化方法:
首先先将x全部转化为java 线性规划 算法 线性规划实例及求解_数学模型_19,之后转变约束条件:对于小于的不等式,加一个松弛变量,对于大于的不等式,减一个松弛变量,之后是:目标函数java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_20,整体乘-1就可以了。
例如:将下列线性规划转化为标准模型
java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_21
java 线性规划 算法 线性规划实例及求解_线性规划_22
分析:java 线性规划 算法 线性规划实例及求解_数学模型_23
转化标准型为:
java 线性规划 算法 线性规划实例及求解_数学模型_24
java 线性规划 算法 线性规划实例及求解_数学模型_25

单纯形法、大M法、两阶段法

1)单纯形法
理论很复杂直接上题
列1单纯形法求解下列线性规划
java 线性规划 算法 线性规划实例及求解_约束条件_26
java 线性规划 算法 线性规划实例及求解_数学模型_27
:A转化为标准形式:
java 线性规划 算法 线性规划实例及求解_线性规划_28
java 线性规划 算法 线性规划实例及求解_约束条件_29
B列出单纯形表如下:

Cj

|

1

-2

1

0

0

0

java 线性规划 算法 线性规划实例及求解_数学模型_24

java 线性规划 算法 线性规划实例及求解_数学模型_24

b

|

x1

x2

x3

x4

x5

x6

0

x4

10

|

1

1

-2

1

0

0

0

x5

8

|

2

-1

4

0

1

0

0

x6

2

|

-1

2

-4

0

0

1

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_32

|

1

2

-1

0

0

0

Cj表示的是目标函数对应xj的系数,在系数行列式里面选取一个单位矩阵,得到的三个变量就是x4,x5,x6
b表示的不等式右边的数字
最后一行 java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_32是检验数,极小问题的结束条件就是检验数全部都是正数,极大问题的结束条件就是检验数全部都是负数。
java 线性规划 算法 线性规划实例及求解_数学模型_34
C求解
由于检验数 java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_32不全大于0于是选取负数中最小的,在这一列里面找非负的数对应的x就是入基,让b/对应的数,取最小的就是出基。

Cj

|

1

-2

1

0

0

0

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_32

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_32

b

|

x1

x2

x3

x4

x5

x6

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_38

0

x4

10

|

1

1

-2

1

0

0

10/1

0

x5

8

|

2

-1

4

0

1

0

0

x6

2

|

-1

[2]

-4

0

0

1

4/2

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_38

|

1

-2

1

0

0

0

用x2代替x6,化这个数字2为1,这列其他的数为0继续单纯形法,替代只需要修改变量和系数,即0 x6变成-2 x2,其他的不需要变。

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_38

java 线性规划 算法 线性规划实例及求解_约束条件_41

java 线性规划 算法 线性规划实例及求解_约束条件_42

此时所有的java 线性规划 算法 线性规划实例及求解_约束条件_43,达到结束条件,此时的b这一行就是x的取值,其他的都是0

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_44

由于目标函数只包含java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_45,于是最优解X*=(0,12,5,8)T

2)大M法

这个M是值很大的正数

:使用大M法求解下列线性规划

max z=-3x1+x3

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_46

转化为标准形式

java 线性规划 算法 线性规划实例及求解_线性规划_47

java 线性规划 算法 线性规划实例及求解_线性规划_48

列出系数矩阵如下

java 线性规划 算法 线性规划实例及求解_约束条件_49

发现没有单位矩阵不能使用单纯形法于是采用大M法,原来矩阵有一行于是补两个人工变量凑成一个单位矩阵

java 线性规划 算法 线性规划实例及求解_数学模型_50

则原来的线性规划转化为:

java 线性规划 算法 线性规划实例及求解_约束条件_51

java 线性规划 算法 线性规划实例及求解_数学模型_52

解答过程如下:

java 线性规划 算法 线性规划实例及求解_约束条件_53

3)两阶段法

第一步:继承了大M法,先将目标函数,变成人工变量相加,其中M取1

其他条件不变,用单纯刑法使得所有的java 线性规划 算法 线性规划实例及求解_约束条件_43,并且CB不含人工变量,求解如下:

java 线性规划 算法 线性规划实例及求解_java 线性规划 算法_55

如果包含人工变量替换为其他变量

第二步:以第一阶段的最终单纯形表为基础,出去人工变量java 线性规划 算法 线性规划实例及求解_线性规划_56及其系数列,只恢复基础变量的系数,其他不变,继续进行迭代,结果如下:

java 线性规划 算法 线性规划实例及求解_数学模型_57

总结

练题是最重要的,多做多想。