您的位置:首页 > 编程语言 > MATLAB

快速用matlab求解线性规划

2017-09-29 09:33 267 查看

                             快速求解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人
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: