赞
踩
如何来分配有限资源,从而达到人们期望目标的优化分配数学模型,它在数学建模中处于中心地位。
这类问题一般可以归结为数学规划模型,规划模型的应用极为广泛,其作用已为越来越多的人所重视
规划模型是数学建模竞赛中最常见的一类数学模型
将一个优化问题用数学式子来描述,即求函数
u
=
f
(
x
)
x
=
(
x
1
,
x
2
,
…
,
x
n
)
u=f(x)\qquad x=(x_{1},x_{2},\dots,x_{n})
u=f(x)x=(x1,x2,…,xn)
x
x
x是一个向量
在约束条件
h
i
(
x
)
=
0
,
i
=
1
,
2
,
3
,
…
,
m
h_{i}(x)=0,i=1,2,3,\dots,m
hi(x)=0,i=1,2,3,…,m
m个等式和
g
j
(
x
)
≤
0
(
g
j
(
x
)
≥
0
)
,
j
=
1
,
2
,
…
,
p
g_{j}(x)\le 0(g_{j}(x)\ge 0),j=1,2,\dots ,p
gj(x)≤0(gj(x)≥0),j=1,2,…,p
p个不等式
u
=
f
(
x
)
u=f(x)
u=f(x)这个函数,在一组等式和一组不等式的约束下,来取最大值或最小值
x
→
决策变量
f
(
x
)
→
目标函数
x
∈
可行域
整理一下
一个规划问题的数学模型可表示为
m
i
n
(
o
r
m
a
x
)
u
=
f
(
x
)
x
∈
Ω
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
3
,
…
,
m
.
g
j
(
x
)
≤
0
(
g
j
(
x
)
≥
0
)
,
j
=
1
,
2
,
…
,
p
.
若在如下的模型中,
f
(
x
)
,
h
i
(
x
)
,
g
i
(
x
)
,
i
=
1
,
2
,
…
,
m
,
j
=
1
,
2
,
…
,
p
f(x),h_{i}(x),g_{i}(x),i=1,2,\dots,m,j=1,2,\dots,p
f(x),hi(x),gi(x),i=1,2,…,m,j=1,2,…,p,均为线性函数,则称该模型为线性规划模型
m
a
x
(
或
m
i
n
)
z
=
c
1
x
1
+
c
2
x
2
+
⋯
+
c
n
x
n
s
.
t
.
{
a
11
x
1
+
a
12
x
2
+
⋯
+
a
1
n
x
n
(
≤
=
≥
)
b
1
a
21
x
1
+
a
22
x
2
+
⋯
+
a
2
n
x
n
(
≤
=
≥
)
b
2
…
a
m
1
x
1
+
a
m
2
x
2
+
⋯
+
a
m
n
x
n
(
≤
=
≥
)
b
m
x
j
≥
0
(
j
=
1
,
2
,
…
,
n
)
对于一般只有两个决策变量的简单线性规划模型,可以通过图解法进行求解
l
1
:
x
1
+
x
2
=
50
l
2
:
12
x
1
+
8
x
2
=
480
l
3
:
3
x
1
=
100
l
1
:
x
1
=
0
,
l
5
:
x
2
=
0
在B(20,30)取得最优解
目标函数和约束条件是线性函数,可行域为直线段围成的凸多边形,目标函数的等值线为直线
最优解一定在凸多边形的某一个顶点取得
有许多求解数学规划模型的多种软件,如Matlab,Lingo,Excel,其中Lingo编程简单,易于操作,求解速度快,是求解规划模型的主要手段
model:
min=13*x1+9*x2+10*x3+11*x4+12*x5+8*x6;
x1+x4=400;
x2+x5=600;
x3+x6=500;
0.4*x1+1.1*x2+x3<800;
0.5*x4+1.2*x6+1.3*x6<900;
end
目标函数值是14458.18
总共迭代次数2
model:
max=72*x1+64*x2;
x1+x2<50;
12*x1+8*x2<480;
3*x1<100;
end
最优解是z=3360,x1是20,x2是30
Row表示代码中的四个式子
Dual Price 影子价格
最优解下,资源增加1单位,效益的增量
35元可以买到一桶牛奶,买吗?
35<48,所以应该买
可聘用临时工人,付出的工资最多是每小时几元?
应该<2
每个季度都有,需求量,正常生产400,加班生产450,库存费用20
D
E
M
:
需求量
R
P
:
正常生产的产量
O
P
:
加班生产的产量
I
N
V
:
库存量
MODEL: //集合段 SETS: QUARTERS/1,2,3,4/:DEM,RP,OP,INV; ENDSETS //目标段 MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV); //约束段 @FOR(QUARTERS(I):RP(I)<40); @FOR(QUARTERS(I)|I#GT#1: INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I);); INV(1)=10+RP(1)+OP(1)-DEM(1); //数据段 DATA: DEM=40,60,75,25; ENDDATA END
I#GT#1
,对I的取值进行限制,表示I大于1,I可以取2,3,4
结果表示生产总费用最小为78450
要求全部或部分决策变量为整数的规划
分类:
m
i
n
(
o
r
m
a
x
)
u
=
f
(
x
)
x
∈
Ω
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
3
,
…
,
m
.
g
j
(
x
)
≤
0
(
g
j
(
x
)
≥
0
)
,
j
=
1
,
2
,
…
,
p
.
其中决策变量
x
为整数,或者为
0
,
1
在Lingo编程中,决策变量为整数一般用
@
g
i
n
(
x
)
@gin(x)
@gin(x)表示;而0-1决策变量用
@
b
i
n
(
x
)
@bin(x)
@bin(x)表示
设A、B两种类型的基地各建设
x
1
,
x
2
x_{1},x_{2}
x1,x2个
m
a
x
z
=
20
x
1
+
10
x
2
s
.
t
.
{
2000
x
1
+
5000
x
2
≤
13000
5
x
1
+
4
x
2
≤
24
x
1
≥
0
,
x
2
≥
0
且为整数
因为每个服务员的工作时间会跨过4个时段
为使服务部门服务员总数最少
设前五个时段安排的服务员各为
x
1
,
x
2
,
x
3
,
x
4
,
x
5
x_{1},x_{2},x_{3},x_{4},x_{5}
x1,x2,x3,x4,x5
m
i
n
z
=
x
1
+
x
2
+
x
3
+
x
4
+
x
5
s
.
t
.
{
x
1
≥
8
x
1
+
x
2
≥
10
x
1
+
x
2
+
x
3
≥
7
x
1
+
x
2
+
x
3
+
x
4
≥
6
x
2
+
x
3
+
x
4
+
x
5
≥
9
x
3
+
x
4
+
x
5
≥
12
x
4
+
x
5
≥
5
x
5
≥
2
x
j
≥
0
,
j
=
1
,
2
,
3
,
4
,
5
且为整数
总共有120种组合方式
设甲是否蝶泳为
x
11
x_{11}
x11,是否仰泳为
x
12
x_{12}
x12,是否蛙泳为
x
13
x_{13}
x13,是否自由泳为
x
14
x_{14}
x14
以此类推
x
i
j
=
{
0
1
x_{ij}=\left\{
总共有20个决策变量,最终取1的只有四个,其他的都取0
表格里的成绩用
C
i
j
C_{ij}
Cij来表示
混合泳接力总成绩
∑
i
=
1
5
∑
j
=
1
4
C
i
j
x
i
j
\sum_{i=1}^{5}\sum_{j=1}^{4}C_{ij}x_{ij}
i=1∑5j=1∑4Cijxij
对运动员的约束:每个运动员最多参加一个项目
x
11
+
x
12
+
x
13
+
x
14
≤
1
x
21
+
x
22
+
x
23
+
x
24
≤
1
x
31
+
x
32
+
x
33
+
x
34
≤
1
x
41
+
x
42
+
x
43
+
x
44
≤
1
x
51
+
x
52
+
x
53
+
x
54
≤
1
对泳姿的约束:每个项目必须有一个运动员参加
x
11
+
x
21
+
x
31
+
x
41
+
x
51
=
1
x
12
+
x
22
+
x
32
+
x
42
+
x
52
=
1
x
13
+
x
23
+
x
33
+
x
43
+
x
53
=
1
x
14
+
x
24
+
x
34
+
x
44
+
x
54
=
1
目标函数:
m
i
n
z
=
∑
i
=
1
5
∑
j
=
1
4
C
i
j
x
i
j
min\quad z=\sum_{i=1}^{5}\sum_{j=1}^{4}C_{ij}x_{ij}
minz=i=1∑5j=1∑4Cijxij
约束条件:
每人最多入选泳姿之一
∑
j
=
1
4
x
i
j
≤
1
i
=
1
,
…
,
5
\sum_{j=1}^{4}x_{ij}\le 1\qquad i=1,\dots,5
j=1∑4xij≤1i=1,…,5
每种泳姿有且只有1人
∑
i
=
1
5
x
i
j
≤
1
j
=
1
,
…
,
4
\sum_{i=1}^{5}x_{ij}\le 1\qquad j=1,\dots,4
i=1∑5xij≤1j=1,…,4
x
i
j
=
{
0
1
x_{ij}=\left\{
MODEL: sets: person/1..5/; position/1..4/; link(person,position):c,x; endsets data: c=66.8,75.6,87,58.6, 57.2,66,66.4,53, 78,67.8,84.6,59.4, 70,74.2,69.6,57.2, 67.4,71,83.8,62.4; enddata min=@sum(link:c*x); @for(person(i):@sum(position(j):x(i,j))<1); @for(position(j):@sum(person(i):x(i,j))=1); @for(link: @bin(x)); END
主要Matlab命令
X=linprog(c,A,b,Aeq,beq)
X=linprog(c,A,b,Aeq,beq,vlb,vub)
X=linprog(c,A,b,Aeq,beq,vlb,vub,x0)
X=linprog(c,A,b,Aeq,beq,vlb,vub,x0,options)
[x,fval,exitflag,output]=linprog(...)
linprog基本函数
括号中的是输入项
模型1
M
i
n
z
=
c
X
s
.
t
.
A
X
≤
b
目标和约束都是矩阵形式
只有不等式约束
x
=
l
i
n
p
r
o
g
(
x
,
A
,
b
)
x=linprog(x,A,b)
x=linprog(x,A,b)
X=linprog(c,A,b,Aeq,beq,vlb,vub)
X=linprog(c,A,b,Aeq,beq,vlb,vub,x0)
x0表示初始点
[x,fval]=linprog(...)
返回最优解x及x处的目标函数值fval
m
a
x
z
=
0.4
x
1
+
0.28
x
2
+
0.32
x
3
+
0.72
x
4
+
0.64
x
5
+
0.6
x
6
s
.
t
.
{
0.01
x
1
+
0.01
x
2
+
0.01
x
3
+
0.03
x
4
+
0.03
x
5
+
0.03
x
6
≤
850
0.02
x
1
+
0.05
x
4
≤
700
0.02
x
2
+
0.05
x
5
≤
100
0.03
x
3
+
0.08
x
6
≤
900
x
j
≥
0
j
=
1
,
2
,
…
,
6
c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6];
A=[0.01 0.01 0.01 0.03 0.03 0.03;
0.02 0 0 0.05 0 0;
0 0.02 0 0 0.05 0;
0 0 0.03 0 0 0.08];
b=[850;700;100;900];
Aeq=[];beq=[];
vlb=[0;0;0;0;0;0];vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
matlab只求解最小的情况,如果要求解最大,需要加一个负号,把整个目标函数转化为最小
m
i
n
z
=
(
13
9
10
11
12
8
)
X
s
.
t
.
(
0.4
1.1
1
0
0
0
0
0
0
0.5
1.2
1.3
)
X
≤
(
800
900
)
(
1
0
0
1
0
0
0
1
0
0
1
0
0
0
1
0
0
1
)
X
=
(
400
600
500
)
,
X
=
(
x
1
x
2
x
3
x
4
x
5
x
6
)
≥
0
f=[13 9 10 11 12 8];
A=[0.4 1.1 1 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1];
beq=[400 600 500];
vlb=zeros(6,1);
vub=[];
[x,fval]=linprog(f,A,b,Aeq,beq,vlb,vub)
zeros表示一个列向量,六行一列的0
X=intlinprog(c,intcon,A,b,Aeq,beq)
X=intlinprog(c,intcon,A,b,Aeq,beq,vlb,vub)
X=intlinprog(c,intcon,A,b,Aeq,beq,vlb,vub,x0)
X=intlinprog(c,intcon,A,b,Aeq,beq,vlb,vub,x0,options)
[x,fval,exitflag,output]=intlinprog(...)
intcon,用来指定整数变量
输入
输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。