1、实验二实验二 用用Lingo求解规划模型求解规划模型变量定界函数变量定界函数:bin(x):限制限制 x 为为 0 或或 1.gin(x):限制限制 x 为整数为整数.例例 1 用用Lingo软件求解软件求解0-1规划问题规划问题max=2*x1+5*x2+3*x3+4*x4;-4*x1+x2+x3+x4=0;-2*x1+4*x2+2*x3+4*x4=1;x1+x2-x3+x4=1;bin(x1);bin(x2);bin(x3);bin(x4);Lingo 程序程序:一、用一、用Lingo 求解规划问题求解规划问题例例 2 用用Lingo软件求解整数规划问题软件求解整数规划问题min=2*x1
2、+5*x2+3*x3;-4*x1-x2+x3=0;-2*x1+4*x2-2*x3=2;x1-x2+x3=2;gin(x1);gin(x2);gin(x3);Lingo 程序程序:例例 3 用用Lingo软件求解非线性规划问题软件求解非线性规划问题min=(x1-1)2+(x2-2)2;x2-x1=1;x1+x2=2;Lingo 程序程序:注意注意:Lingo 默认默认变量变量的取值从的取值从0到正无穷大到正无穷大,变量定界函数变量定界函数可以改变默认状态可以改变默认状态.free(x):取消对变量取消对变量x的限制的限制(即即x可取任意实数值可取任意实数值)例例 4 求函数求函数 的最小值的最
3、小值.解解:编写编写Lingo 程序如下程序如下:min=(x+2)2+(y-2)2;free(x);例例 4 求函数求函数 的最小值的最小值.求得结果求得结果:x=-2,y=2二、二、Lingo 循环编程语句循环编程语句(1)集合集合的定义的定义包括如下参数包括如下参数:1)集合集合的名称的名称.命名规则命名规则:以字母开头以字母开头,后面是字母或下划线后面是字母或下划线.字母不区分大小写字母不区分大小写.2)集合集合包含的元素包含的元素(可选可选).3)集合集合中元素的所有属性中元素的所有属性(可选可选).例例4 Math,English,totalsets:endsetsstudents
4、John,Jill,Rose,Mikesets:students/John,Jill,Rose,Mike/:Math,English,total;endsets(2)数据赋值数据赋值例例4 data:enddatadata:Math=80,85,90,70;English=75,80,72,60;enddata格式格式:(1)集合集合的定义的定义例例4 sets:students/John,Jill,Rose,Mike/:Math,English,total;endsets(3)集合集合的循环函数的循环函数集合集合的循环函数可以使所有的元素重复完成一些操作的循环函数可以使所有的元素重复完成一些
5、操作.函数函数函数功能函数功能for形成集合形成集合所有元素所有元素需满足的约束条件需满足的约束条件sum计算集合中元素所在表达式的计算集合中元素所在表达式的和和min计算集合中元素所在表达式的计算集合中元素所在表达式的最小值最小值max计算集合中元素所在表达式的计算集合中元素所在表达式的最大值最大值maxM=max(students(i):Math);maxE=max(students(i):English);averageM=sum(students(i):Math)/4;for(students(i):total(i)=Math(i)+English(i);例例4!数学的最高分数学的最高
6、分;!英语的最高分英语的最高分;!数学的平均分数学的平均分;!每个学生数学与英语分数之和每个学生数学与英语分数之和.(4)衍生集合衍生集合的定义的定义.包括如下参数包括如下参数:1)衍生集合衍生集合的名称的名称.3)衍生集合衍生集合包含的元素包含的元素(可选可选).4)集合集合中元素的所有属性中元素的所有属性(可选可选).例例5 link2)衍生集合衍生集合的父集合名称的父集合名称.sets:ren/A,B,C,D/:rent;job/1.5/:jobt;link(ren,job):time;endsetsrenjobtime注注:若没有指明元素列若没有指明元素列表表,LINGO将用父集合将用
7、父集合元素的所有组合作为衍元素的所有组合作为衍生集合的元素生集合的元素.(A,1),(A,2),(A,3),(A,4)(A,5)(B,1),(B,2),(B,3),(B,4)(B,5)(C,1),(C,2),(C,3),(C,4)(C,5)(D,1),(D,2),(D,3),(D,4)(D,5)(5)Lingo 内部的数学函数及其返回值内部的数学函数及其返回值abs(x):返回返回x的绝对值的绝对值sin(x):返回返回x的正弦值的正弦值cos(x):返回返回x的余弦值的余弦值tan(x):返回返回x的正切值的正切值log(x):返回返回x的自然对数值的自然对数值exp(x):返回返回ex的值
8、的值sqr(x):返回返回x的平方值的平方值.该函数可以用表达式该函数可以用表达式x2代替代替sqrt(x):返回返回x的正的平方根的正的平方根.可以用表达式可以用表达式x(1/2)代替代替三、三、Lingo 循环编程举例循环编程举例例例5 现有五名工人甲现有五名工人甲,乙乙,丙丙,丁丁,戊戊,完成五项完成五项工作工作A,B,C,D,E,所需时间列表如下所需时间列表如下 工作工作 时间时间(小时小时)工人工人ABCDE甲甲10.521.754乙乙2131.53.5丙丙1.751.52.513丁丁2.521.50.54戊戊11.5223(2)求每份工作最短的用时求每份工作最短的用时.(1)求每个
9、人的最短工作时间求每个人的最短工作时间;问题问题:三、三、Lingo 循环编程举例循环编程举例例例5 sets:ren/A,B,C,D,E/:rent;job/1.5/:jobt;link(ren,job):time;endsetsdata:time=1,0.5,2,1.75,4 2,1,3,1.5,3.5 1.75,1.5,2.5,1,3 2.5,2,1.5,0.5,4 1,1.5,2,2,3;enddataS=sum(link(i,j):time(i,j);for(ren(i):rent=min(job(j):time(i,j);for(job(j):jobt=min(ren(i):tim
10、e(i,j);!定义集合定义集合;!数据赋值数据赋值;!所有工作时间求和所有工作时间求和;!求每个人的最短工作时间求每个人的最短工作时间;!求每份工作最短的用时求每份工作最短的用时;三、三、Lingo 循环编程举例循环编程举例例例5 用用Lingo循环编程语句求解线性规划模型循环编程语句求解线性规划模型三、三、Lingo 循环编程举例循环编程举例sets:bliang/1,2/:x,a;yshu/1,2,3/:b;xshu(yshu,bliang):c;endsetsdata:a=72,64;b=50,480,100;c=1,1 12,8 3,0;enddatamax=sum(bliang(i
11、):a(i)*x(i);for(yshu(j):sum(bliang(i):x(i)*c(j,i)=b(j);!定义集合定义集合;!数据赋值数据赋值;!目标函数目标函数;!约束条件约束条件;例例5 用用Lingo循环编程循环编程语句求解线性规划语句求解线性规划模型模型例例6:人员选拔问题:人员选拔问题3571.92队员号码队员号码身高身高/m1位置位置1.881.851.80中锋中锋前锋前锋前锋前锋后卫后卫4681.90队员号码队员号码身高身高/m2位置位置1.861.831.78中锋中锋前锋前锋后卫后卫后卫后卫同时同时,要求出场阵容必须满足以下条件要求出场阵容必须满足以下条件:(1)中锋只能
12、有一个上场中锋只能有一个上场;(2)至少有一名后卫至少有一名后卫;(3)如果如果1号队员和号队员和4号队员都上场号队员都上场,则则6号队员不能上场号队员不能上场;(4)2号队员和号队员和6号队员必须至少保留一个不出场号队员必须至少保留一个不出场.如何确定符合要求的出场阵容如何确定符合要求的出场阵容?上机作业题上机作业题1、建立数学模型,2、用lingo循环语句编写程序.要求:上机作业题上机作业题 某城市的巡逻大队要求每天的各个时间段都有一某城市的巡逻大队要求每天的各个时间段都有一定数量的警员值班定数量的警员值班,以便随时处理突发事件以便随时处理突发事件,每人连续每人连续工作工作6h,中间不休息
13、中间不休息.如表所示是一天如表所示是一天8个班次所需值个班次所需值班警员的人数情况统计班警员的人数情况统计:现在在不考虑时间段中警员上班和下班的情况下现在在不考虑时间段中警员上班和下班的情况下,巡逻大队至少需要多少警员才能满足值班需要巡逻大队至少需要多少警员才能满足值班需要?人员安排问题人员安排问题班次班次时间段时间段人数人数班次班次时间段时间段人数人数16:009:0070518:0021:008029:0012:0080621:0024:00100312:0015:0065724:003:00120415:0018:009083:006:0090设第设第 i 个班次开始上班的警员数为个班次
14、开始上班的警员数为 xi.目标函数目标函数:约束条件约束条件:上机作业题上机作业题分配问题分配问题 某游泳队拟选用甲某游泳队拟选用甲,乙乙,丙丙,丁丁 四名游泳运动员组成四名游泳运动员组成一个一个 4100 m 混合泳接力队混合泳接力队,参加今年的锦标赛参加今年的锦标赛.他们他们的的 100 m 自由泳自由泳,蛙泳蛙泳,蝶泳蝶泳,仰泳的成绩如表所示仰泳的成绩如表所示乙乙丙丙丁丁56成绩成绩自由泳自由泳/s甲甲63575574蛙泳蛙泳/s69777661蝶泳蝶泳/s65636263仰泳仰泳/s716762 甲甲,乙乙,丙丙,丁丁 四名队员各自游什么姿势四名队员各自游什么姿势,才最有可能取得好成绩才最有可能取得好成绩?约约束束条条件件