LINGO快速入门.ppt

上传人:wj 文档编号:17679238 上传时间:2023-07-29 格式:PPT 页数:59 大小:287KB
下载 相关 举报
LINGO快速入门.ppt_第1页
第1页 / 共59页
LINGO快速入门.ppt_第2页
第2页 / 共59页
LINGO快速入门.ppt_第3页
第3页 / 共59页
LINGO快速入门.ppt_第4页
第4页 / 共59页
LINGO快速入门.ppt_第5页
第5页 / 共59页
LINGO快速入门.ppt_第6页
第6页 / 共59页
LINGO快速入门.ppt_第7页
第7页 / 共59页
LINGO快速入门.ppt_第8页
第8页 / 共59页
LINGO快速入门.ppt_第9页
第9页 / 共59页
LINGO快速入门.ppt_第10页
第10页 / 共59页
LINGO快速入门.ppt_第11页
第11页 / 共59页
LINGO快速入门.ppt_第12页
第12页 / 共59页
LINGO快速入门.ppt_第13页
第13页 / 共59页
LINGO快速入门.ppt_第14页
第14页 / 共59页
LINGO快速入门.ppt_第15页
第15页 / 共59页
LINGO快速入门.ppt_第16页
第16页 / 共59页
LINGO快速入门.ppt_第17页
第17页 / 共59页
LINGO快速入门.ppt_第18页
第18页 / 共59页
LINGO快速入门.ppt_第19页
第19页 / 共59页
LINGO快速入门.ppt_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

LINGO快速入门.ppt

《LINGO快速入门.ppt》由会员分享,可在线阅读,更多相关《LINGO快速入门.ppt(59页珍藏版)》请在冰点文库上搜索。

LINGO快速入门.ppt

LINGO快速入门,在模型窗口中输入如下代码:

Model:

min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;end注:

非负约束可省略,例1.1如何在LINGO中求解如下的LP问题:

例1.2使用LINGO软件计算:

6个发点8个收点的最小费用运输问题。

产销单位运价如下表。

6个发点8个收点的最小费用运输问题共有48个变量,14个约束条件。

使用LINGO软件,编制程序如下:

model:

!

6发点8收点运输问题;sets:

warehouses/wh1.wh6/:

capacity;vendors/v1.v8/:

demand;links(warehouses,vendors):

cost,volume;Endsetsmin=sum(links:

cost*volume);!

目标函数;for(vendors(J):

sum(warehouses(I):

volume(I,J)=demand(J);!

需求约束;for(warehouses(I):

sum(vendors(J):

volume(I,J)=capacity(I);!

产量约束;data:

!

这里是数据;capacity=605551434152;demand=3537223241324338;cost=626742954953858252197433767392712395726555228143;enddataend,模型的集部分,例2.2!

集部分;sets:

students:

sex,age;endsets!

数据部分;data:

students,sex,age=John116Jill014Rose017Mike113;enddata,VariableValueSEX(JOHN)1.000000SEX(JILL)0.000000SEX(ROSE)0.000000SEX(MIKE)1.000000AGE(JOHN)16.00000AGE(JILL)14.00000AGE(ROSE)17.00000AGE(MIKE)13.00000,LINGO会自动创建父集成员的所有组合作为派生集的成员,编号成员1(A,M,1)2(A,M,2)3(A,N,1)4(A,N,2)5(B,M,1)6(B,M,2)7(B,N,1)8(B,N,2),例2.3sets:

product/AB/;machine/MN/;week/1.2/;allowed(product,machine,week):

x;endsets,如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集,例2.4sets:

!

学生集:

性别属性sex,1表示男性,0表示女性;年龄属性age.;students/John,Jill,Rose,Mike/:

sex,age;!

男学生和女学生的联系集:

友好程度属性friend,0,1之间的数。

;linkmf(students,students)|sex(enddata,基本运算符,乘方乘除加减,LINGO具有种逻辑运算符:

#not#否定该操作数的逻辑值,not是一个一元运算符#eq#若两个运算数相等,则为true;否则为flase#ne#若两个运算符不相等,则为true;否则为flase#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase#lt#若左边的运算符严格小于右边的运算符,则为true;否则为flase#le#若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and#仅当两个参数都为true时,结果为true;否则为flase#or#仅当两个参数都为false时,结果为false;否则为true,LINGO有三种关系运算符:

“=”、“=”,下面给出以上三类操作符的优先级:

高#not#(取反)#eq#ne#gt#ge#lt#le#and#or#低=,LINGO提供了大量的标准数学函数,abs(x)返回x的绝对值sin(x)返回x的正弦值,x采用弧度制cos(x)返回x的余弦值tan(x)返回x的正切值exp(x)返回常数e的x次方log(x)返回x的自然对数lgm(x)返回x的gamma函数的自然对数sign(x)如果x0返回1;=0返回0;x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。

smax(x1,x2,.,xn)返回x1,x2,xn中的最大值smin(x1,x2,.,xn)返回x1,x2,xn中的最小值,例给定一个直角三角形,求包含该三角形的最小正方形。

解:

如图所示。

ABCDDAEabx求最小的正方形就相当于求如下的最优化问题:

LINGO代码如下:

model:

sets:

object/1.3/:

f;endsetsdata:

a,b=3,4;!

两个直角边长,修改很方便;enddataf

(1)=a*sin(x);f

(2)=b*cos(x);f(3)=a*cos(x)+b*sin(x);min=smax(f

(1),f

(2),f(3);bnd(0,x,1.57);end,金融函数1fpa(I,n)2fpl(I,n),例4.4贷款买房问题贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。

问拟贷款10年,每年需偿还多少元?

LINGO代码如下:

50000=x*fpa(.0531,10);答案是x=6573.069元。

如果返回如下情形的净现值:

单位时段利率为I,第n个时段支付单位费用。

fpl(I,n)的计算公式为且:

概率函数,1pbn(p,n,x)二项分布的累积分布函数。

当n和(或)x不是整数时,用线性插值法进行计算。

2pcx(n,x)自由度为n的2分布的累积分布函数。

3peb(a,x)当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。

4pel(a,x)当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。

5pfd(n,d,x)自由度为n和d的F分布的累积分布函数。

6pfs(a,x,c)当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的等待或返修顾客数的期望值。

a是顾客数乘以平均服务时间,再除以平均返修时间。

当c和(或)x不是整数时,采用线性插值进行计算。

7phg(pop,g,n,x)超几何(Hypergeometric)分布的累积分布函数。

pop表示产品总数,g是正品数。

从所有产品中任意取出n(npop)件。

pop,g,n和x都可以是非整数,这时采用线性插值进行计算。

8ppl(a,x)Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从均值为a的Poisson分布。

9pps(a,x)均值为a的Poisson分布的累积分布函数。

当x不是整数时,采用线性插值进行计算。

10psl(x)单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。

11psn(x)标准正态分布的累积分布函数。

12ptd(n,x)自由度为n的t分布的累积分布函数。

13qrand(seed)产生服从(0,1)区间的拟随机数。

qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。

通常,声明一个mn的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。

在行内,随机数是独立分布的;在行间,随机数是非常均匀的。

这些随机数是用“分层取样”的方法产生的。

概率函数,如果没有为函数指定种子,那么LINGO将用系统时间构造种子,例4.5model:

data:

M=4;N=2;seed=1234567;enddatasets:

rows/1.M/;cols/1.N/;table(rows,cols):

x;endsetsdata:

X=qrand(seed);产生服从(0,1)区间的拟随机数enddataend,14rand(seed)返回0和1间的伪随机数,依赖于指定的种子。

典型用法是U(I+1)=rand(U(I)。

注意如果seed不变,那么产生的随机数也不变,例4.6利用rand产生15个标准正态分布的随机数和自由度为2的t分布的随机数。

model:

!

产生一列正态分布和t分布的随机数;sets:

series/1.15/:

u,znorm,zt;endsets!

第一个均匀分布随机数是任意的;u

(1)=rand(.1234);!

产生其余的均匀分布的随机数;for(series(I)|I#GT#1:

u(I)=rand(u(I-1);for(series(I):

!

正态分布随机数;psn(znorm(I)=u(I);!

和自由度为2的t分布随机数;ptd(2,zt(I)=u(I);!

ZNORM和ZT可以是负数;free(znorm(I);free(zt(I););end,变量界定函数,变量界定函数实现对变量取值范围的附加限制,共4种:

bin(x)限制x为0或1bnd(L,x,U)限制LxUfree(x)取消对变量x的默认下界为0的限制,即x可以取任意实数gin(x)限制x为整数在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+。

free取消了默认的下界为0的限制,使变量也可以取负值。

bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。

集操作函数:

LINGO提供了几个函数帮助处理集,1in(set_name,primitive_index_1,primitive_index_2,)如果元素在指定集中,返回1;否则返回0。

例4.7全集为L,B是L的一个子集,C是B的补集。

sets:

L/x1.x4/;B(L)/x2/;C(L)|#not#in(B,endsets,2index(set_name,primitive_set_element)该函数返回在集set_name中原始集成员primitive_set_element的索引。

如果set_name被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集成员的索引。

如果找不到,则产生一个错误。

例4.8如何确定集成员(B,Y)属于派生集S3。

sets:

S1/ABC/;S2/XYZ/;S3(S1,S2)/AX,AZ,BY,CX/;endsetsX=in(S3,index(S1,B),index(S2,Y);,看下面的例子,表明有时为index指定集是必要的。

例4.9sets:

girls/debble,sue,alice/;boys/bob,joe,sue,fred/;endsetsI1=index(sue);I2=index(boys,sue);I1的值是2,I2的值是3。

我们建议在使用index函数时最好指定集,3wrap(index,limit)该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间1,limit内。

该函数相当于index模limit再加1。

该函数在循环、多阶段计划编制中特别有用。

4size(set_name)该函数返回集set_name的成员个数。

在模型中明确给出集大小时最好使用该函数。

它的使用使模型更加数据中立,集大小改变时也更易维护。

集循环函数,1for该函数用来产生对集成员的约束。

基于建模语言的标量需要显式输入每个约束,不过for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。

例4.10产生序列1,4,9,16,25model:

sets:

number/1.5/:

x;endsetsfor(number(I):

x(I)=I2);end,2sum该函数返回遍历指定的集成员的一个表达式的和。

例4.11求向量5,1,3,4,6,10前5个数的和。

model:

data:

N=6;enddatasets:

number/1.N/:

x;endsetsdata:

x=5134610;enddatas=sum(number(I)|I#le#5:

x);end,3min和max返回指定的集成员的一个表达式的最小值或最大值。

例4.12求向量5,1,3,4,6,10前5个数的最小值,后3个数的最大值。

model:

data:

N=6;enddatasets:

number/1.N/:

x;endsetsdata:

x=5134610;enddataminv=min(number(I)|I#le#5:

x);maxv=max(number(I)|I#ge#N-2:

x);end,下面看一个稍微复杂一点儿的例子。

例4.13职员时序安排模型一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。

注意这里我们考虑稳定后的情况。

model:

sets:

days/mon.sun/:

required,start;endsetsdata:

!

每天所需的最少职员数;required=20161316191412;enddata!

最小化每周所需职员数;min=sum(days:

start);for(days(J):

sum(days(I)|I#le#5:

start(wrap(J+I+2,7)=required(J);end,计算的部分结果为Globaloptimalsolutionfoundatiteration:

0Objectivevalue:

22.00000VariableValueReducedCostREQUIRED(MON)20.000000.000000REQUIRED(TUE)16.000000.000000REQUIRED(WED)13.000000.000000REQUIRED(THU)16.000000.000000REQUIRED(FRI)19.000000.000000REQUIRED(SAT)14.000000.000000REQUIRED(SUN)12.000000.000000START(MON)8.0000000.000000START(TUE)2.0000000.000000START(WED)0.0000000.3333333START(THU)6.0000000.000000START(FRI)3.0000000.000000START(SAT)3.0000000.000000START(SUN)0.0000000.000000从而解决方案是:

每周最少需要22个职员,周一安排8人,周二安排2人,周三无需安排人,周四安排6人,周五和周六都安排3人,周日无需安排人。

辅助函数,1if(logical_condition,true_result,false_result)if函数将评价一个逻辑表达式logical_condition,如果为真,返回true_result,否则返回false_result。

例4.18求解最优化问题其LINGO代码如下:

model:

min=fx+fy;fx=if(x#gt#0,100,0)+2*x;fy=if(y#gt#0,60,0)+3*y;x+y=30;end,2warn(text,logical_condition)如果逻辑条件logical_condition为真,则产生一个内容为text的信息框。

例4.19示例。

model:

x=1;warn(x是正数,x#gt#0);end,练习一:

货运公司的运输问题某地区有8个公司(如图一编号至),某天某货运公司要派车将各公司所需的三种原材料A,B,C从某港口(编号)分别运往各个公司。

路线是唯一的双向道路(如图一)。

货运公司现有一种载重6吨的运输车,,派车有固定成本20元/辆,从港口出车有固定成本为10元/车次(车辆每出动一次为一车次)。

每辆车平均需要用15分钟的时间装车,到每个公司卸车时间平均为10分钟,运输车平均速度为60公里小时(不考虑塞车现象),每日工作不超过8小时。

运输车载重运费1.8元/吨公里,运输车空载费用0.4元/公里。

一个单位的原材料A,B,C分别毛重4吨、3吨、1吨,原材料不能拆分,为了安全,大小件同车时必须小件在上,大件在下。

卸货时必须先卸小件,而且不允许卸下来的材料再装上车,另外必须要满足各公司当天的需求量(见图二)。

问题:

1.货运公司派出运输车6辆,每辆车从港口出发(不定方向)后运输途中不允许掉头,应如何调度(每辆车的运载方案,运输成本)使得运费最小。

2.每辆车在运输途中可随时掉头,若要使得成本最小,货运公司怎么安排车辆数?

应如何调度?

3

(1)如果有载重量为4吨、6吨、8吨三种运输车,载重运费都是1.8元/吨公里,空载费用分别为0.2,0.4,0.7元/公里,其他费用一样,又如何安排车辆数和调度方案?

(2)当各个公司间都有或者部分有道路直接相通时,分析运输调度的难度所在,给出你的解决问题的想法(可结合实际情况深入分析)。

图一)唯一的运输路线图和里程数,各个公司对每种材料的需求量(单位/天),公司编号各种材料的需求量(单位/天)ABC415152204312124043225531,问题1:

货运公司派出运输车6辆,每辆车从港口出发(不定方向)后运输途中不允许掉头,应如何调度(每辆车的运载方案,运输成本)使得运费最小。

模型1分析与假设:

1)每辆车从港口出发(不定方向)后运输途中不允许掉头,即从港口出发必须沿图一路程走一圈回到港口,由简单计算可知,走一圈路程为60KM,而港口到路程为29KM,港口到路程为23KM,考虑到必须使得运费最小,可以假设从港口到四个公司向左走一圈回到港口,从港口到四个公司则向右走一圈回到港口;(用W=(4,3,1)表示)2)一个单位的原材料A,B,C分别毛重4吨、3吨、1吨,且原材料不能拆分;而货运公司又只有一种载重6吨的运输车,因些所有可能的装运方案有14种:

方案ABC1)1022)0203)0134)0065)1016)1007)010,方案ABC8)0119)01210)00111)00212)00313)00414)005,其中方案1)的含义是装一个单位的A,0个单位的B,2个单位的C;其他类似。

4)先不考虑卸货时必须先卸小件的要求,也不考虑装车等待的情况,建立模型1如下:

3)由简单计算可知:

走一圈至少需85分钟,一部车一天最多可以走5次,根据需求量可知至少需出车26次;,分别表示货运公司对材料A,B,C的需求总数;分别表示货运公司对材料A,B,C的需求总数;其中=(10,7,13)=(8,11,13)表示货运公司对材料A,B,C的需求量;表示采用第个方案从港口向左出发的次数;表示采用第个方案从港口向右出发的次数;表示采用第i个方案从港口向左出发运材料到第j个货运公司的次数;表示采用第i个方案从港口向右出发运材料到第j个货运公司的次数;表示采用第i个方案装运材料A,B,C的单位数;,模型1符号说明:

表示从港口向左出发到货运公司的距离表示从港口向右出发到货运公司的距离,LINGO求解无解,建立模型1:

由于限制出车次数而导致无解,于是先不考虑出车次数的限制,对模型进行求解,然后再考虑局部优化使之满足出车次数的限制。

不考虑出车次数的限制,对模型进行求解,利用LINGO程序可得解为:

出32次车,费用4854.4+120+20x1=0+0+2+0,y1=1+0+2+0公司1:

采用方案5调运4次,x2=0+2+0+0,y2=0+1+0+1采用方案8调运1次;y3=0+1+0+0公司2:

采用方案2调运2次,x5=4+1+0+0y5=0+0+0+1采用方案5调运1次x6=0+0+0+3,y6=0+0+0+4采用方案8调运1次y7=1+1+1+1公司3:

采用方案1调运2次x8=1+1+0+0,y8=0+0+1+0公司4:

采用方案6调运3次x9=0+0+0+1,y9=1+0+0+0采用方案9调运1次,模型1的求解:

模型1的求解:

公司1:

采用方案5调运4次=4(A+C),采用方案8调运1次=B+C公司2:

2(2B)+(A+C)+(B+C)公司3:

2(A+2C)公司4:

3(A)+(B+2C)公司5:

(A+2C)+(B)+(B+2C)公司6:

(2B)+(B+3C)+(B)公司7:

2(A+2C)+(B)+(B+C)公司8:

(2B)+(A+C)+4(A)+(B)再考虑卸货时必须先卸小件的要求进行局部优化:

将公司8中方案7改为方案2多运一个B而取消公司7中的方案7由此节省的费用为32.将公司6中方案7改为方案2多运一个B而取消公司5中的方案7由此节省的费用为28.将公司1中方案5改1个为方案1多运一个C而方案8改为方案2多运一个B取消公司2中的方案8由此节省的费用为30.8.局部优化后只须出车29次车,费用减少60+20总费用为4854.4+120+20-32-28-30.8-20=4883.6派出运输车6辆,每辆出车5次即可,对应的调运方案如下:

公司1:

3(A+C)+(A+2C)+(2B)公司2:

2(2B)+(A+2C)+.公司3:

2(A+2C)公司4:

3(A)+(B+2C)公司5:

(A+2C)+.+(B+2C)公司6:

(2B)+(B+3C)+(2B)公司7:

2(A+2C)+.+(B+C)公司8:

(2B)+(A+C)+4(A)+(2B),公司1:

采用方案5调运4次=4(A+C),采用方案8调运1次=B+C公司2:

2(2B)+(A+C)+(B+C)公司3:

2(A+2C)公司4:

3(A)+(B+2C)公司5:

(A+2C)+(B)+(B+2C)公司6:

(2B)+(B+3C)+(B)公司7:

2(A+2C)+(B)+(B+C)公司8:

(2B)+(A+C)+4(A)+(B)再考虑卸货时必须先卸小件的要求进行局部优化:

将公司8中方案7改为方案2多运一个B到公司4,由此节省的费用为22.将公司1中方案5改1个为方案1多运一个C而方案8改为方案2多运一个B取消公司2中的方案8由此节省的费用为30.8.局部优化后只须出车28次车,费用减少22+30.8+29.8+28+20总费用为4854.4+120+20-110.6-20=4863.4派出运输车6辆,每辆出车5次即可,对应的调运方案如下:

公司1:

3(A+C)+(A+2C)+(2B)公司2:

2(2B)+(A+2C)+.公司3:

2(A+2C)公司4:

2(A)+(A+2C)+.公司5:

(A+2C)+(2B)+.公司6:

(2B)+(2B)+.公司7:

2(A+2C)+(2B)+(6C)公司8:

(2B)+(A+C)+4(A)+(2B),模型1的求解:

-1,model:

sets:

comply/1.8/:

d,dr;demand/1.3/:

a,b,w;link1(comply,demand):

c;decide/1.14/:

x,y;link2(decide,demand):

r;link3(decide,comply):

xx,yy;endsetsdata:

d=815242937454955;dr=524536312315115;a=10713;b=81113;w=4,3,1;c=415152204312124043225531;r=1020200130061011000100110120010020030

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2