什么是规划
在有限的资源状况下,干最有意义的事,其实就是规划。
小例子
例如我要盖大楼,我有这么多钱,我要请人设计、买设备、买材料资源,我们应该怎么平衡钱的花费,使得完成盖大楼这件事。
数学规划模型怎么分类
a. 线性规划模型
引例(生产规划问题):某厂利用a、b、c三种原料生产A、B、C三种产品,已知生产每种产品在消耗原料方面的各项技术条件和单位产品的利润,以及可利用的各种原料的量(具体数据如下表),试制订适当的生产规划使得该厂的总的利润最大。
- 我们要生成多少件A、B、C使得该厂的总利润最大。
- 首先我们假设
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3是生产A,B,C的量,称之为决策变量。(能对最终结果产生关联的变量称之为决策变量)。
- 我们的求解核心关系式是 z = 2 x 1 + 4 x 2 + 3 x 3 z = 2x_1+4x_2+3x_3 z=2x1+4x2+3x3,我们的目的是求z最大。
- 下面的这些就是约束条件,把现有资源用关系式表示的方法。
名词小总结
- 目标函数:利润最大化、成本最小化,表现为决策变量的一个函数。
- 约束条件:资源、工期等,表现为决策变量的一些等式或者不等式
- 决策变量:对结果产生影响的变量
- 线性规划问题:由一些线性等式或不等式组成的约束条件下,求决策变量的一组具体取值,使得一个线性目标函数实现最优(大或小)化。
- 线性规划数学算子。
例题1
线性规划实例:某机床厂生产甲、乙两种机床,每台销售后的利润分别为4元与3元。生产甲机床需用A、B机器加工,加工时间分别为每台 2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各多少台,才能使总利润最大?
解答
{ m a x z = 4 x 1 + 3 x 2 s . t . 2 x 1 + x 2 ≤ 10 x 1 + x 2 ≤ 8 x 2 ≤ 7 x 1 , x 2 ≥ 0 \begin{cases}max\space \space z = 4x_1+3x_2\\s.t.\space \space \space2x_1+x_2\leq10\\x_1+x_2\leq 8\\x_2\leq 7\\x_1,x_2\geq 0 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧max z=4x1+3x2s.t. 2x1+x2≤10x1+x2≤8x2≤7x1,x2≥0
线性规划的求解方法
- 单纯形法(不好,不建议使用)
- 图解法
- 软件求解法(用Lingo或Lingdo软件)
图解法
- 可行点:满足线性规划所有约束条件的点称为问题的可行点。
- 可行域:所有可行点构成的集合称为问题的可行域,记为R。
- 等位线:对于每一固定的值z,使目标函数值等于z的点构成的直线称为目标函数等位线。
可行点
- 例如刚才的,对于
2
x
1
+
x
2
≤
10
2x_1+x_2\leq 10
2x1+x2≤10,
x
1
=
1
,
x
2
=
1
x_1 = 1,x_2 = 1
x1=1,x2=1就是一个可行点。
- 所有在R中的都为可行点。
- z所在的先就是$x_1和.
- 顶点一般就是最优值点。
- 可以把所有的顶点都算一遍。
软件解法
- 直接把下列代码复制入lingo
model: !程序开始
sets: !变量集合开始
var/1..2/:x; !说明x是二维变量
endsets !集合说明结束
max=4*x(1)+3*x(2); !目标函数求极大
2*x(1)+x(2)<=10; !约束函数
x(1)+x(2)<=8; !约束函数
x(2)<=7; !约束函数
End !程序结束 如果不加以
说明,LINGO认为所有变量非负
输出结果
Global optimal solution found.
Objective value: 26.00000
Infeasibilities: 0.000000
Total solver iterations: 2
Model Class: LP
Total variables: 2
Nonlinear variables: 0
Integer variables: 0
Total constraints: 4
Nonlinear constraints: 0
Total nonzeros: 7
Nonlinear nonzeros: 0
Variable Value Reduced Cost
X( 1) 2.000000 0.000000
X( 2) 6.000000 0.000000
Row Slack or Surplus Dual Price
1 26.00000 1.000000
2 0.000000 1.000000
3 0.000000 2.000000
4 1.000000 0.000000
- 课下把第一个练习用lingo求解。
例题2(思维难度大,先自己思考)
某车间在未来的五天内所需的某种刀具统计资料如表所示。每把刀具成本0.6元。用过的刀具送机修车间研磨,每把需花费0.2元。刀具每天用过后,如果立即送去磨,两天后可以磨好送回,供当天的需要。第五天后,刀具全部换新的。假设开始时,该车间没有任何刀具。问这个车间需要多少刀具才能应付需要,而成本又最低
题解
- x n x_n xn表示5天用的新刀具。
- 目标函数: m i n = 0.6 ∗ ( x 1 + x 2 + x 3 + x 4 + x 5 ) + 0.2 x 1 + 0.2 x 2 + 0.2 ∗ ( x 1 + x 3 ) min = 0.6*(x_1+x_2+x_3+x_4+x_5)+0.2x_1+0.2x_2+0.2*(x_1+x_3) min=0.6∗(x1+x2+x3+x4+x5)+0.2x1+0.2x2+0.2∗(x1+x3)
- 这分别表示5天的新刀具,第三天的刀具、第四天的刀具、第五天的刀具。
- 约束条件: x 1 ≥ 120 ; x 2 ≥ 85 x_1\geq120;x_2\geq 85 x1≥120;x2≥85
- 一号道具磨后: x 1 + x 3 ≥ 160 x_1+x_3\geq 160 x1+x3≥160
- 二号刀具磨后: x 2 + x 4 ≥ 145 x_2+x_4\geq 145 x2+x4≥145
- 三号刀具磨后: x 1 + x 3 + x 5 ≥ 300 x_1+x_3+x_5\geq300 x1+x3+x5≥300
b. 交错规划模型
运输问题
生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或利润最大;
各种类型的货物装箱,由于受体积、重量等限制,如何搭配装载,使获利最高,或装箱数量最少。
例题1
问题:某城市有甲、乙、丙、丁四个居民区,自来水由A、B、C三个水库供应,四个区基本用水量(必须保证)分别为30、70、10、10千吨,三个水库最多供水量分别50、60、50千吨。自来水公司从水库向各个小区送水付出引水管理费不同,其它管理费是450元/千吨。各小区收费相同,标准900元/千吨。此外,四个小区申请额外用水量分别50、70、20、40千吨,该公司应如何分配供水量能使利润最大?若水库供水量都提高一倍,公司利润可增加到多少?
精简
- 我们是A、B、C三个水库,我们要给居民区供水,怎么样的供水方案最赚钱。
- 我们要求的有11个量,A向甲、A向乙、A向丙…C向丙
- 上面那幅图上的是引水管理费,是我们要支出的;450元是固定要支出的其他管理费。
- 我们的收入是900元每千吨,对于每一个小区都是一样的。
分析
- 我们的收入一定是固定的,大概为$900*160 = 144000元。
- 我们的某一部分支出是固定的,为450*160 = 72000元
- 所以我们其实要做的就是:使引水管理费最小,这样就能让我们的利润最大。
模型建立
- 首先我们需要确定这个变量,如上图所示
- 目标函数 M i n Z = 160 x 11 + 130 x 12 + 220 x 13 + 170 x 14 + 140 x 21 + 130 x 22 + 190 x 23 + 150 x 24 + 190 x 31 + 200 x 32 + 230 x 33 Min\space Z = 160x_{11}+130x_{12}+220x_{13}+170x_{14}+140x_{21}+130x_{22}+190x_{23}+150x_{24}+190x_{31}+200x_{32}+230x_{33} Min Z=160x11+130x12+220x13+170x14+140x21+130x22+190x23+150x24+190x31+200x32+230x33
- 供应限制
- x_{11}+x_{12}+x_{13}+x_{14} = 50 A水库
- x_{21}+x_{22}+x_{23}+x_{24} = 60 B水库
- x_{31}+x_{32}+x_{33} = 50 C水库
- 需求限制
- 30 ≤ x 11 + x 21 + x 31 ≤ 80 30\leq x_{11}+x_{21}+x_{31}\leq 80 30≤x11+x21+x31≤80 甲小区
- 70 ≤ x 12 + x 22 + x 32 ≤ 140 70\leq x_{12}+x_{22}+x_{32}\leq 140 70≤x12+x22+x32≤140 乙小区
- 10 ≤ x 13 + x 23 + x 33 ≤ 30 10\leq x_{13}+x_{23}+x_{33}\leq 30 10≤x13+x23+x33≤30 丙小区
- 10 ≤ x 14 + x 24 ≤ 50 10\leq x_{14}+x_{24}\leq 50 10≤x14+x24≤50 丁小区
输入lingo
model:
sets:
kar/1..3/;
car/1..4/;
var(kar,car):x;
endsets
min=160*x(1,1)+130*x(1,2)+220*x(1,3)+
170*x(1,4)+140*x(2,1)+130*x(2,2)+190*x(2,3)
+150*x(2,4)+190*x(3,1)+200*x(3,2)+230*x(3,3);
x(1,1)+x(1,2)+x(1,3)+x(1,4)=50;
x(2,1)+x(2,2)+x(2,3)+x(2,4)=60;
x(3,1)+x(3,2)+x(3,3)=50;
x(1,1)+x(2,1)+x(3,1)<=80;
x(1,1)+x(2,1)+x(3,1)>=30;
x(1,2)+x(2,2)+x(3,2)<=140;
x(1,2)+x(2,2)+x(3,2)>=70;
x(1,3)+x(2,3)+x(3,3)<=30;
x(1,3)+x(2,3)+x(3,3)>=10;
x(1,4)+x(2,4)<=50;
x(1,4)+x(2,4)>=10;
End
得出结果
Global optimal solution found.
Objective value: 340.0000
Infeasibilities: 0.000000
Total solver iterations: 0
Model Class: LP
Total variables: 5
Nonlinear variables: 0
Integer variables: 0
Total constraints: 6
Nonlinear constraints: 0
Total nonzeros: 14
Nonlinear nonzeros: 0
Variable Value Reduced Cost
X1 120.0000 0.000000
X2 85.00000 0.000000
X3 40.00000 0.000000
X4 60.00000 0.000000
X5 140.0000 0.000000
Row Slack or Surplus Dual Price
1 340.0000 -1.000000
2 0.000000 -0.2000000
3 0.000000 -0.2000000
4 0.000000 -0.2000000
5 0.000000 -0.6000000
6 0.000000 -0.6000000
问题讨论
- 当每个水库最大供水量都提高了一倍会发生什么?
- 这时候不再是供大于求了,这应该怎么做呢?