快速用matlab求解线性规划

来源:互联网 发布:ipad照片导入mac 编辑:程序博客网 时间:2024/05/29 07:20

                             快速求解matlab线性规划问题 

     用matlab也有一年时间了,但是从来都懒得记怎么用,所以老师上个月讲的函数,这个月要用的时候一般都会在窗口自动先打出help 某函数,于是最近整理了一个可以快速看懂函数用法的文章,帮助和我一样懒惰的同学........

 eg: 某饭店24小时中需要服务员数量如下表,如果每个服务员连续工作8小时,试问在2点,6点,10点,14点,18点,22点开始上班的服务员为多少时,一天所需服务员人数最少???


时间          2-6      6-10     10-14   14-18   18-22    22-2
最少服务员 4       8            10          7          12           4


解:设在2点,6点,10点,14点,18点,22点开始上班的服务员分别为 x1,x2,x3,x4,x5,x6


Max    x1+x2+x3+x4+x5+x6  (习惯用mathtype但复制不过来。。。。。。)

st      x1+x6>=4

        x1+x2>=8

        x2+x3>=10

        x3+x4>=7

        x4+x5>=12

        x5+x6>=4



编写M文件

c=[1 1 1 1 1 1];
>> A=[-1 0 0 0 0 -1;-1 -1 0 0 0 0;0 -1 -1 0 0 0;0 0 -1 -1 0 0;0 0 0 -1 -1 0 0 0 0 -1 -1 ];
>> b=[-4; -8; -10; -7; -12; -4];
>> vlb=[0;0;0;0;0;0];
>> vub=[];
>> Aeq=[];
>> beq=[];
>> [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub);

求出结果为 fval=26 即总人数为26人

各个时段人数分别为
x =

2.7154
6.9396
3.0604
6.4597
5.5403
1.2846

由题意可知,人数不可能为小数,这是一个线性的整数规划问题,于是我们尝试用lindo软件

输入
Min x1+x2+x3+x4+x5+x6
st
x1+x6>=4
x1+x2>=8
x2+x3>=10
x3+x4>=7
x4+x5>=12
x5+x6>=4
end
gin 6

得到结果为

1) 26.00000

VARIABLE VALUE REDUCED COST
X1 0.000000 1.000000
X2 8.000000 1.000000
X3 2.000000 1.000000
X4 12.000000 1.000000
X5 0.000000 1.000000
X6 4.000000 1.000000


所以在2点,6点,10点,14点,18点,22点开始上班的服务员分别为
0 ,8 ,2,12, 0, 4 一共26人,将所得结果与matlab结果对比检验,总人数都为26人

原创粉丝点击