当前位置:文档之家› lingo优化练习即详解

lingo优化练习即详解

Lingo 作业解题过程1.某储蓄所每天的营业时间是上午9时到下午5时。

根据经验,每天不同时间段所需要的服务员数量如下表示。

储蓄所可以雇佣全时和半时两类服务员。

全时服务员每天报酬100元,从上午9时到下午5时工作,但中午12时到下午2时之间必须安排1h 的午餐时间。

储蓄所每天可以雇佣不超过3名的半时服务员,每个半时服务员必须连续工作4h,报酬40元,问储蓄所应如何雇用全时和半时服务员。

如果不能雇佣半时服务员,每天至少增加多少费用。

如果雇佣半时服务员的数量没有限制,每天可以减少多少费用。

时间段/h 9~10 10~11 11~12 12~1 1~2 2~3 3~4 4~5服务员数43465688解:(1)设1x 为雇佣的全职人数,2x 为12-1小时休息的人数,1y -5y 分别为1-5时段开始雇佣的半时人员的人数。

表1为各时间段的工作人数。

每个时间段的工作人数要满足题目中的要求。

表1 各时间段在工作的服务员 时间段/h 服务员9-10 11x y + 10-11 112x y y ++11-12311i i x y =+å12-14121i i x y x =+-å1-2522i i x y =+å2-3513i i x y =+å 3-4514i i x y =+å4-515x y +根据每个时段满足的要求,建立模型如下:()512311111145512211235115451min 100*x 140:(1)x y 4; (2) x 3; (3) x 4 ;(4)x x 6;(5)x5;(6)x 6(7)x 8;(8)x 83i i i i i i i i i i y st y y y y y y y y =========++>+>+>-+>+>+>+>+><å邋邋åå通过上述模型,利用lingo 编程求解如下: :sets :quanshi/1..2/:x;!x(1)为雇佣的全职人数,x (2)为12-1时休息的人数;banshi/1..5/:y; !y1-y5为1-5时间段雇佣的半时人数,超过5阶段雇佣半时员工不划算; endsetsmin =100*x(1)+@sum (banshi:y)*40; @sum (banshi:y)<3;@for (quanshi:@gin (x)); !限定x 取整数; @for (banshi:@gin (y)); !限定y 取整数;x(1)+y(1)>4; !第一阶段要满足的服务员人数; x(1)+y(1)+y(2)>3; !第二阶段要满足的服务员人数; x(1)+y(1)+y(2)+y(3)>4; !第三阶段要满足的服务员人数; x(1)-x(2)+y(1)+y(2)+y(3)+y(4)>6; !第四阶段要满足的服务员人数; x(2)+y(2)+y(3)+y(4)+y(5)>5; !第五阶段要满足的服务员人数; x(1)+y(3)+y(4)+y(5)>6; !第六阶段要满足的服务员人数; x(1)+y(4)+y(5)>8; !第七阶段要满足的服务员人数; x(1)+y(5)>8; !第八阶段要满足的服务员人数;程序运行的结果为最少花费820元,雇佣全时员工7人,半时员工3人,半时员工分别在第二时段雇佣2人,第五时段雇佣1人,12-1时去吃饭的全是员工为2人,剩下5人在1-2时吃饭。

(2)第二问直接可以看出答案,编程也可以。

min =100*x1; x1-x2>6; x2>5;运行程序得出答案1100元,与第一问的820元,要增加费用280元。

(3)第三问直接将第一问的程序中@sum (banshi:y)<3; 删除(即对雇佣的半时服务员的个数没有限制),可得出结果本题的结果。

最少花费560元,第一时段雇佣半时员工6人,第五时段雇佣半时人员8人,就可以满足每个时段所需要的员工要求。

节省费用820-560=260元。

2.某银行经理计划用一笔资金进行有价证券的投资,可供购进的证券以及其信用等级、到期年限、收益如表所示。

按照规定,市政证券的收益可以免税,其他证券的收益需按50%纳税。

此外还有以下限制:1) 政府及代办机构的证券至少要购进400万元;2) 所购证券的平均信用等级不超过1.4(信用等级数字越小,信用程度越高); 3) 所购证券的平均到期年限不超过5年。

证券名称 证券种类 信用等级 到期年限/年 到期税前收益/%A 市政 2 9 4.3B 代办机构 2 15 5.4C 政府 1 4 5.0D 政府 1 3 4.4E 市政 5 2 4.5(1) 若该经理有1000万元资金,应如何投资?(2) 如果能以2.75%的利率借到不超过100万元资金,该经理应如何操作?(3) 在1000万元资金情况下,若证券A 的税前收益增加为4.5%,投资应否改变?如证券 C 的税前收益减少为4.8%,投资应否改变?解:i x ,i y ,i z ,i p ,i q 分别为购买的第i 种证券的价格数量,第i 种证券的信用等级、到期年限、到期税前收益、缴纳税的利率。

(1)第一问有1000万元,根据题目中的三个要求,①所有证券的平均信用等级不超过1.4,②B,C,D 类证券的购买总数需要超过400万元。

③所有证券的平均到期年限不超过5年。

建立模型如下:42max :/1000 1.41000/10005400i i ii i i i i i i x p q st x y x x z x ==<=<>ååååå利用lingo 编程: sets :touzi/1..5/:x,y,z,p,q; endsets data :y=2 2 1 1 5 ; z=9 15 4 3 2 ; p=4.3 5.4 5.0 4.4 4.5 ; q=1 0.5 0.5 0.5 1 ; enddata@sum (touzi:x*y)/1000<1.4; !所购证券的平均信用等级不超过1.4; @sum (touzi:x)=1000; !1000全部用于投资;@sum (touzi:x*z)/1000<5; !所购证券的平均到期年限不超过5年;x(2)+x(3)+x(4)>400; !政府及代办机构的证券至少要购进400万元;max =@sum (touzi:x*p*q);运行程序得出结果为能够获得最大利润2983.636万元,而每种证券如何投资见表表2 各类证券的投资金额(1)证券名称 投资的钱(万元)A 218.1818B 0C 736.3636D 0E 45.45455 总计 1000(2)假设借到a 元,在最后还钱。

只需更改约束条件如下,其余的不变。

:/(1000) 1.41000/(1000)5i i i i i st x y a x a x z a +<=++<ååå编程如下: sets :touzi/1..5/:x,y,z,p,q; endsets data :y=2 2 1 1 5 ; z=9 15 4 3 2 ; p=4.3 5.4 5.0 4.4 4.5 ; q=1 0.5 0.5 0.5 1 ; enddata@sum (touzi:x*y)/(1000+a)<1.4; !所购证券的平均信用等级不超过1.4; @sum (touzi:x)<1000+a; !1000+a 全部用于投资; a<100;@sum (touzi:x*z)/(1000+a)<5; !所购证券的平均到期年限不超过5年; x(2)+x(3)+x(4)>400; !政府及代办机构的证券至少要购进400万元; max =@sum (touzi:x*p*q/100)-a*2.75/100;运行程序得出的结果为借贷100万元,可获得最大利润。

表3 各类证券的投资金额(2)证券 投资的钱(万元) A 240 B 0 C 810 D 0 E 50 总计 1100(3):将第一题中的1p 改成4.5,得出的答案不变,A 类证券投资218.1818万元,C 类证券投资736.3636万元,E 类证券投资45.45455万元。

但若将将3p 改成4.8,结果变了,投资额如表4表4 各类证券的投资金额(3) 证券 投资的钱(万元) A 336 B 0 C 0 D 648 E 16 总计 10003.某班准备从5名游泳队员中选拔4人组成接力队,参加学校的4乘100米混合泳接力比赛。

5名队员4种泳姿的百米平均成绩如表所示,问应如何选拔队员组成接力队?如果最近队员丁的蛙泳成绩有较大退步,只有1分15秒2;而队员戊经过艰苦训练自由泳成绩有所进步,达到57秒5,组成接力队的方案是否应调整?(单位 秒)甲 乙 丙 丁 戊 蝶泳 66.8 57.2 78 70 67.4仰泳 75.6 66 67.8 74.271蛙泳 87 66.4 84.6 69.6 83.8自由泳 58.6 53 59.4 57.2 62.4解:设ij c 为第j 个队员的第i 种泳姿的成绩,ij x 为定义的0,1变量,如果第j 位队员第i 种泳姿代表队伍参加比赛,则取1,否则取0。

min 1,1,2...5;1,1,2...4;ij ijij iij jc x x jx i =?==ååå程序: sets :duiyuan/1..5/; yongzi/1..4/;link(yongzi,duiyuan):c,x; endsets data :c=66.8 57.2 78 70 67.4 75.6 66 67.8 74.2 7187 66.4 84.6 69.6 83.858.6 53 59.4 57.2 62.4;enddatamin=@sum(link:x*c); !利用0,1变量来求解最小值;@for(duiyuan(j):@sum(yongzi(i):x(i,j))<1);!每个人都只能参加0项或者1项;@for(yongzi(i):@sum(duiyuan(j):x(i,j))=1);!游泳的几种泳姿都只能出现一次;@for(link:@bin(x)); !控制0,1变量;运行结果见表4表5 代表队伍参赛的队员名单泳姿队员成绩蝶泳乙57.2s仰泳丙67.8s蛙泳丁69.6s自由泳戊58.5s合计253.2s(2)丁退步,戊进步,可以直接将丁和戊的成绩在程序中更改后再运行程序,得到最优解为557.7s,蝶泳派乙参加(57.2s),仰泳派丙参加(67.8s),蛙泳派丁参加(75.2s),自由泳派戊参加(57.5s)。

相关主题