lingo优化练习即详解
- 格式:doc
- 大小:245.00 KB
- 文档页数:11
首页一、Lingo简介1. 目标函数一个函数解析式,你希望求它的最大或最小值max=函数解析式;或min=函数解析式;例max=3*b+2*c^2;min=b^(1/3)-c*k;Lingo的语句以; 号结束。
2. 运算加(+),减(-),乘(*),除(/),乘方(x^a)3. 变量用字母或字母数字的组合表示例a,b,cc1,x1。
Lingo的变量缺省值为非负数。
4. 限制条件一组等式或不等式。
Lingo的>,<与>=,<=等价。
示例程序13*x1+5*x2>=45;Lingo的注释语句用!开头用;结束。
5. 变量类型变量类型说明@bin( 变量名) ; 限制该变量为0或1。
@bnd( a,变量名, b); 限制该变量介于a,b之间。
@free(变量名); 允许该变量为负数。
@gin( 变量名); 限制该变量为整数。
二、Lingo高级sets语句连续六个月的产量,可以用x1,x2,x3,x4,x5,x6表示, 但十二个月的产量用同样的方法表示就显繁琐。
Lingo可以通过sets语句设置数组功能使问题变得简单。
例定义数组x, 有x(1),x(2),x(3),x(4)…x(12)个成员,用以表示十二个月的产量。
sets:r/1..12/:x; !r是组的类型名,x数组名;endsets;sets语句以sets开头,endsets结束。
示例程序2data语句有时,我们要用到常数数组,比如在400*x(1)+200*x(2)+150*x(3)+500*x(4)>=500中,x(1), x(2), x(3), x(4)的系数分别为400, 200, 150, 500,此时,可用data语句。
例定义数组a, 其中a(1)=400,a(2)=200,a(3)=150,a(4)=500。
sets:l/1..4/: a,x;endsetsdata:a=400 200 150 500;enddatadata语句是以data开头,enddata结尾。
Lingo 精选题目及答案答题要求:将Lingo 程序复制到Word 文档中,并且附上最终结果。
1、简单线性规划求解(目标函数)2134m axx x z += s.t.(约束条件)⎪⎪⎩⎪⎪⎨⎧≥≤≤+≤+0,781022122121x x x x x x x2、整数规划求解219040Maxx x z +=⎪⎩⎪⎨⎧≥≤+≤+0,702075679212121x x x x x x 3、0-1规划求解Max 432215.18.04.0x x x x f +++=10106234321≤+++x x x x10,,,4321或=x x x x4、非线性规划求解||4||3||2||m in4321x x x x z +++=s.t. ⎪⎪⎩⎪⎪⎨⎧-=+--=-+-=+--2132130432143214321x x x x x x x x x x x x5、集合综合应用产生一个集合5052--=x x y ,(10,...,2,1=x ),求y 前6个数的和S 1,后6个数的和S 2,第2~8个数中的最小值S 3,最大值S 4。
6、综合题要求列出具体的目标函数和约束条件,然后附上Lingo 程序和最终结果。
6.1 指派问题有四个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如下表:问指派哪个人去完成哪项工作,可使总的消耗时间为最小?6.2 分配问题某两个煤厂A1,A2每月进煤数量分别为60t和100t,联合供应3个居民区B1,B2,B3。
3个居民区每月对煤的需求量依次分别为50t,70t,40t,煤厂A1离3个居民区B1,B2,B3的距离依次分别为10km,5km,6km,煤厂A2离3个居民区B1,B2,B3的距离分别为4km,8km,12km。
问如何分配供煤量使得运输量(即t·km)达到最小?1、model:max=4*x1+3*x2;2*x1+x2<10;x1+x2<8;x2<7;end2、model:max=40*x1+90*x2;9*x1+7*x2<56;7*x1+20*x2<70;gin(x1);gin(x2);end3、model:max=x1^2+0.4*x2+0.8*x3+1.5*x4;3*x1+2*x2+6*x3+10*x4<10;bin(x1); bin(x2);bin(x3); bin(x4);end4、model:max=abs(x1)+2*abs(x2)+3*abs(x3)+4*abs(x4);x1-x2-x3+x4=0;x1-x2+x3-3*x4=1;x1-x2-2*x3+3*x4=-1/2;end5、model:sets:jihe/1..10/:y;ss/1..4/:S;endsets!由于y和s中部分有负数,所以要先去掉这个约束;for(jihe:free(y));for(ss(i):free(S));!产生元素;for (jihe(x):y(x)=x^2-5*x-50); S(1)=sum (jihe(i)|i#le#6:y(i)); S(2)=sum (jihe(i)|i#ge#5:y(i));S(3)=min (jihe(i)|i#ge#2 #and# i#le#8:y(i)); S(4)=max (jihe(i)|i#ge#2 #and# i#le#8:y(i)); end6.1、设:第i 个工人做第j 项工作用时ij t ,标志变量ij f 定义如下:⎩⎨⎧=其他件工作个工人去做第指派第01j i f ijmin ∑∑==⨯4141i j ij ij t fs.t.141=∑=i ijf()4,3,2,1=j 每份工作都有一人做∑==411j ijf()4,3,2,1=i 每人都只做一项工作model : sets :work/A B C D/;worker/jia yi bing ding/; time(worker,work):t,f; endsets!目标函数可以用[obj]标志出,也可以省略; [obj] min =sum (time(i,j):t(i,j)*f(i,j)); data :!可以直接复制表格,但是在最后要有分号; t=; e nddata!每份工作都有一人做;for (work(j):sum (time(i,j):f(i,j))=1); !每人都只做一项工作;for (worker(i):sum (time(i,j):f(i,j))=1); !让f 取0-1值,此条件可以省略; !for(time(i,j):bin(f(i,j))); end6.2设:煤厂进煤量i s ,居民区需求量为i d ,煤厂i 距居民区j 的距离为ij L ,煤厂i 供给居民区j 的煤量为ij g那么可以列出如下优化方程式∑∑==⨯=3121min j i ij ij L gs.t ()3,2,121==∑=j d gi j ij()2,131=≤∑=i s gj iijmodel : sets :supply/1,2/:s; demand/1,2,3/:d;link(supply,demand):road,sd; endsets data :road=10 5 6 4 8 12; d=50 70 40; s=60 100; enddata[obj] min =sum (link(i,j):road(i,j)*sd(i,j)); for (demand(i):sum (supply(j):sd(j,i))=d(i)); for (supply(i):sum (demand(j):sd(i,j))<s(i));end1.线性规划模型。
Lingo 软件在求解数学优化问题1.某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下:设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配备多少名司机和乘务人员?从第一班开始排,试建立线性模型。
分析与求解:注意在每一时间段里上班的司机和乘务人员中,既包括在该时间段内开始时报到的人员,还包括在上一时间段工作的人员。
因为每一时间段只有四个小时,而每个司乘人员却要连续工作八个小时。
因此每班的人员应理解为该班次相应时间段开始时报到的人员。
设i x 为第i 班应报到的人员(6,,2,1 =i ),则应配备人员总数为:∑==61i i x Z按所需人数最少的要求,可得到线性模型如下:∑==61min i i x Z161223344556112660706050..203060,,,0x x x x x x x x s t x x x x x x x x +≥⎧⎪+≥⎪⎪+≥⎪+≥⎪⎨+≥⎪⎪+≥⎪≥⎪⎪≥⎩ LINGO 程序如下:MODEL:min=x1+x2+x3+x4+x5+x6;x1+x6>=60;x1+x2>=70;x2+x3>=60;x3+x4>=50;x4+x5>=20;x5+x6>=30;x1>=60;END得到的解为:x1=60,x2=10,x3=50,x4=0,x5=30,x6=0;配备的司机和乘务人员最少为150人。
2 某地区有三个农场共用一条灌渠,每个农场的可灌溉地及分配到的最大用水量如下表:各农场均可种植甜菜、棉花和高粱三种作物,各种作物的用水量、净收益及国家规定三个农场达成协议,他们的播种面积与其可灌溉面积相等,而各种农场种何种作物并无限制。
问如何制定各农场种植计划才能在上述限制条件下,使本地区的三个农场的总净收益最大。
设农场1种植的甜菜、棉花和高粱分别为111,,z y x 亩,农场2种植的甜菜、棉花和高粱分别为222,,z y x 亩,农场3种植的甜菜、棉花和高粱分别为333,,z y x 亩。
第一题:一、摘要本文是一篇关于基金的使用计划模型。
在现实经济高速发展的背景下,人们越来越清醒地意识到:一个合理的数学应用模型对于现今生产、投资、规划等实际应用项目的重要性。
本文所建立的存款模型就是个很好的例子,此模型最终要解决的是选择最佳基金使用计划,使得学校基金会能够有充分的资金在基金会运转。
这个模型的解决是我们更清楚掌握了最优化模型的解决方法及LINGO软件求解线性规划的方法。
二、问题的提出某校基金会有一笔数额为M元的基金,打算将其存入银行或购买国库券。
当前银行存款及各期国库券的利率见下表。
假设国库券每年至少发行一次,发行时间不定。
取款政策参考银行的现行政策。
校基金会计划在n年内每年用部分本息奖励优秀师生,要求每年的奖金额大致相同,且在n年末仍保留原基金数额。
校基金会希望获得最佳的基金使用计划,以提高每年的奖金额。
请你帮助校基金会在如下情况下设计基金使用方案,并对M=5000万元,n=10年给出具体结果:1.只存款不购国库券;2.可存款也可购国库券。
3.学校在基金到位后的第3年要举行百年校庆,基金会希望这一年的奖金二、模型的假设(1)银行利息和国库券结算方式为单利;(2) 定期存款和国库券不到期均不能取款;(3)国库券每年发行一期,发行月份不定,但于发行月一号发行;(4)基金结算后马上又进行投资(存入银行或买国库券)中间间隔时间不予考虑;(5)定期存款实际收益利率为公布利率的80%(20%为利息税上交国库)国库券存款利率与同期的定期存款利率相同,但不交利息税;(6)每年年初评奖且奖金数目相同(除第三问),N年后本金仍为M;三、符号的说明x第i年所存入银行的j年期的存款;ijy第i年说购买的j年期的国库券;ij'r银行同期活期利率;r银行同期活期税后利率;'r银行同期j年期固定利率;jr银行同期j年期固定利率税后利率;jM本金=5000万元,Z=每年的奖金四、模型的建立与求解第一种情况:只存款不买国库券我们考虑到这种情况下,存款的时间是一定的,所以活期和三个月,半年的利率都太低,所以在这种情况下,我们直接考虑一年的利率,这样才能获得较多的利息,从而使得每年发放的奖金数目尽可能多——即我们要实现的目标。
基础题:1.目标规划问题最近,某节能灯具厂接到了订购16000套A 型和B 型节能灯具的订货合同,合同中没有对这两种灯具的各自数量做要求,但合同要求工厂在一周内完成生产任务并交货。
根据该厂的生产能力,一周内可以利用的生产时间为20000min ,可利用的包装时间为36000min 。
生产完成和包装一套A 型节能灯具各需要2min ;生产完成和包装完成一套B 型节能灯具各需要1min 和3min 。
每套A 型节能灯成本为7元,销售价为15元,即利润为8元;每套B 型节能灯成本为14元,销售价为20元,即利润为6元。
厂长首先要求必须按合同完成订货任务,并且即不要有足量,也不要有超量。
其次要求满意销售额达到或者尽量接近275000元。
最后要求在生产总时间和包装总时间上可以有所增加,但过量尽量地小。
同时注意到增加生产时间要比包装时间困难得多。
试为该节能灯具厂制定生产计划。
解:将题中数据列表如下:根据问题的实际情况,首先分析确定问题的目标级优先级。
第一优先级目标:恰好完成生产和包装完成节能灯具16000套,赋予优先因子p1;第二优先级目标:完成或者尽量接近销售额为275000元,赋予优先因子p2; 第三优先级目标:生产和包装时间的增加量尽量地小,赋予优先因子p3; 然后建立相应的目标约束。
在此,假设决策变量12,x x 分别表示A 型,B 型节能灯具的数量。
(1) 关于生产数量的目标约束。
用1d -和1d +分别表示未达到和超额完成订货指标16000套的偏差量,因此目标约束为1111211min ,..16000z d d s t x x d d -+-+=+++-=要求恰好达到目标值,即正、负偏差变量都要尽可能地小(2) 关于销售额的目标约束。
用2d -和2d +分别表示未达到和超额完成满意销售指标275000元的偏差值。
因此目标约束为221222min ,..1520-275000.z d s t x x d d --+=++=要求超过目标值,即超过量不限,但必须是负偏差变量要尽可能地小,(另外:d +要求不超过目标值,即允许达不到目标值,就是正偏差变量要尽可能地小) (3) 关于生产和包装时间的目标约束。
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)。