为了完成一项任务或达到一定的目的,怎样用最少的人力、物力去完成或者用最少的资源去完成较多的任务或达到一定的目的,这个过程就是规划。
如果在规划问题的数学模型中,变量是连续的(数值取实数)其目标函数是有关线性函数(一次方),约束条件是有关变量的线性等式或不等式,这样,规划问题的数学模型是线性的。
一个大家都会的数学例子,这就是我们数学中学到的线性规划↓
c、X、b、beq、vlb 和 vub 是向量,A和 Aeq 是矩阵。
用[x,fval] = linprog( ... )命令返回最优解x及x 处的函数值fval。
(1) [x,fval] = linprog(c,A,b)
求解 min Z = cX ,满足AX ≤ b即可。
(2) [x,fval]= linprog(c,A,b,Aeq,beq)
包括等式约束 Aeq*X = beq。
注意:若没有不等式,设置A = [ ]和b=[ ]。
(3) [x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)
定义X 的一组下界和上界,使解始终在vlb ≤ X ≤ vub 范围内。
注意:若没有等式约束,设置 Aeq = [] 和 beq = []。
决策变量只能取0或1的整数规划,叫做0-1整数规划。决策变量称为0-1变量(二进制变量、逻辑变量)。0-1变量作为逻辑变量,常被用来表示系统是否处于某个特定状态,或者决策时是否取某个特定方案。
c、X、b和beq是向量,A和 Aeq 是矩阵。
[x,fval]= bintprog (c ,A,b,Aeq,beq)
注意: 若没有不等式存在,则令A=[ ],b=[ ].
第一步:转化为标准型
第二部分matlab求解:
c=[7 5 9 6 3];
A=[56 20 54 42 15;1 4 1 0 0;-1 -2 0 -1 -2];
b=[100;4;-2];
[x,fval]=bintprog(c,A,b)
x = 0 0 0 0 1
fval =3
在约束条件下,x5等于1可以得到最小的值,最小值=3.
某车间有甲、乙两台机床,可用于加工三种工件.假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表.问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?
车床类 型 |
单位工件所需加工台时数 |
单位工件的加工费用 |
可用台时数 |
||||
工件1 |
工件2 |
工件3 |
工件1 |
工件2 |
工件3 |
||
甲 |
0.4 |
1.1 |
1.0 |
13 |
9 |
10 |
800 |
乙 |
0.5 |
1.2 |
1.3 |
11 |
12 |
8 |
900 |
第一步 转化为标准型
第二部分matlab求解
c=[ 13 9 10 11 12 8 ];
A=[ 0.4 1.1 1.0 0 0 0 ;
0 0 0 0.5 1.2 1.3 ];
b=[ 800 ; 900 ];
Aeq=[ 1 0 0 1 0 0 ;
0 1 0 0 1 0 ;
0 0 1 0 0 1];
beq=[ 400 ; 600 ; 500 ];
vlb=[ 0 ; 0 ; 0 ; 0 ; 0 ; 0 ];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
x = 0.000 600.0000 0.000 400.0000 0.0000 500.0000
fval = 1.3800e+004
甲车床加工工件2,乙车床加工工件1和3,可以实现加工费用最低。最低加工费用为13800。
有A、B、C 3个水厂,负责给甲、乙、丙、丁4个小区供水。3个水厂每天造水的上限如表1所示,四个小区每天的用水需求量如表2所示,从各水厂到各小区的运输管理费(元/每吨)由表3给出,求在基本满足供需平衡的约束条件下使总运费用最小?
表1
水厂 |
A |
B |
C |
供应量 |
60 |
40 |
50 |
表2
小区 |
甲 |
乙 |
丙 |
丁 |
需求量 |
20 |
35 |
33 |
34 |
表3
需求点→ 供应点↓ |
小区 |
||||
甲 |
乙 |
丙 |
丁 |
||
水 厂 |
A |
2 |
1 |
3 |
2 |
B |
1 |
3 |
2 |
1 |
|
C |
3 |
4 |
1 |
1 |
第一步 转化为标准型:
第二部分matlab求解:
c=[ 2 1 3 2 1 3 2 1 3 4 1 1];
A=[ 1 1 1 1 0 0 0 0 0 0 0 0 ;
0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1];
b=[ 60 ; 40;50 ];
Aeq=[1 0 0 0 1 0 0 0 1 0 0 0 ;
0 1 0 0 0 1 0 0 0 1 0 0 ;
0 0 1 0 0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1];
beq=[ 20 ; 35 ;33;34 ];
vlb=[ 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0;0;0;0;0;0];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
x=0.0000 35.0000 0.0000 0.0000 20.0000 0.0000 0.0000 18.4682 0.0000 0.0000 33.0000 15.5318
fval =122.0000
乙用A厂水,供应量35t;甲用B厂水,供应量20t;丁用B厂水,供应量18.4682t;
丙丁用C厂水,分别供应量33t,15.5318t。可得到总运费最小的情况,最小总运费=122元
某城市消防队布点问题.该城市共有6个区,每个区都可以建消防站,市政府希望设置的消防站最少,但必须满足在城市任何地区发生火警时,消防车要在15分钟内赶到现场.根据实地测定,各区之间消防车行驶的时间见下表,请帮助该市制定一个布点最少的计划。
表4:消防车在各区间行驶时间表(单位:min)
地区1 |
地区2 |
地区3 |
地区4 |
地区5 |
地区6 |
|
地区1 |
0 |
10 |
16 |
28 |
27 |
20 |
地区2 |
10 |
0 |
24 |
32 |
17 |
10 |
地区3 |
16 |
24 |
0 |
12 |
27 |
21 |
地区4 |
28 |
32 |
12 |
0 |
15 |
25 |
地区5 |
27 |
17 |
27 |
15 |
0 |
14 |
地区6 |
20 |
10 |
21 |
25 |
14 |
0 |
第一步 转化为标准型:
第二部分matlab求解:
c=[1 1 1 1 1 1];
A=[-1 -1 0 0 0 0;
-1 -1 0 0 0 -1;
0 0 -1 -1 0 0;
0 0 -1 -1 -1 0;
0 0 0 -1 -1 -1;
0 -1 0 0 -1 -1];
b=[-1 ;-1 ;-1 ;-1 ;-1 ;-1 ];
[x,fval]=bintprog(c,A,b)
x =0 1 0 1 0 0
fval = 2
地区2和地区4建设消防站是可以覆盖全部区域且布点最少的情况。布点=2
某学校规定,运筹学专业的学生毕业时必须至少学习过两门数学课、三门运筹学课和两门计算机课。这些课程的编号、名称、学分、所属类别和先修课要求如表所示
为了选修课程总数最少,应学习哪些课程?
第一步 转化为标准型:
第二部分matlab求解:
c=[1 1 1 1 1 1 1 1 1];
A=[-1 -1 -1 -1 -1 0 0 0 0;
0 0 -1 0 -1 -1 0 -1 -1 ;
0 0 0 -1 0 -1 -1 0 -1;
-1 -1 2 0 0 0 0 0 0;
0 0 0 1 0 0 -1 0 0;
-1 -1 0 0 2 0 0 0 0;
0 0 0 0 0 1 -1 0 0;
0 0 0 0 -1 0 0 1 0;
-1 -1 0 0 0 0 0 0 2];
b=[-2; -3; -2; 0 ;0; 0; 0 ;0; 0 ];
[x,fval]=bintprog(c,A,b)
x = 1 1 0 0 1 1 1 1 0
fval =6
为了选修课选的最少,可以选课1,2,5,6,7,8,六门课