版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1讲 Lingo软件入门司守奎烟台市,海军航空工程学院数学教研室Email:1 Lingo软件的基本语法1.1 集合 集合部分的语法为sets:集合名称1/成员列表1/:属性1_1,属性1_2,属性1_n1;集合名称2/成员列表2/:属性2_1,属性2_2,属性2_n2;派生集合名称(集合名称1,集合名称2):属性3_1,属性3_n3; endsets例26sets: product/A B/; machine/M N/; week/1.2/; allowed(product,machine,week):x;endsets1.2 数据数据部分的语法为data:属性1=数据列表;属性2=数据列
2、表;enddata1.3 计算计算段部分不能含有变量,必须是已知数据的运算。calc:b=0;a=a+1;endcalc1.4 模型的目标函数和约束条件这里就不具体给出了,下面通过具体例子给出。1.5 子模型在 LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结
3、束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是:SUBMODEL mymodel:可执行语句(约束+目标函数);ENDSUBMODEL其中 mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。如果已经定义了子模型 mymodel,则在计算段中可以用语句“SOLVE( mymodel);”求解这个子模型。2 Lingo函数2.1 算术运算符乘方乘除加减2.2 逻辑运算符在Lingo中,逻辑运
4、算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。Lingo具有种逻辑运算符#not# 否定该操作数的逻辑值,not是一个一元运算符。#eq#若两个运算数相等,则为true;否则为false。#ne# 若两个运算符不相等,则为true;否则为false。#gt# 若左边的运算符严格大于右边的运算符,则为true;否则为false。#ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为false。#lt# 若左边的运算符严格小于右边的运算符,则为true;否则为false。#le# 若左边的运算符小于或等于右边的运
5、算符,则为true;否则为false。#and# 仅当两个参数都为true时,结果为true;否则为false。#or# 仅当两个参数都为false时,结果为false;否则为true。2.3 关系运算符在Lingo中,关系运算符主要是被用在模型中来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,逻辑运算符仅仅判断一个关系是否被满足,满足为真,不满足为假。Lingo有三种关系运算符:“=”、“<=”和“>=”。Lingo中还能用“<”表示小于等于关系,“>”表示大于等于关系。L
6、ingo并不支持严格小于和严格大于关系运算符。2.4 数学函数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函数的自然对数。mod(x,y)返回x除以y的余数。 sign(x)如果x<0返回-1;否则,返回1。floor(x)返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。smax(x1,x2,xn)返回x1,x2,xn中的最大值
7、。smin(x1,x2,xn)返回x1,x2,xn中的最小值。2.5 变量界定函数变量界定函数实现对变量取值范围的附加限制,共4种bin(x)限制x为0或1;bnd(L,x,U)限制LxU;free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数;gin(x)限制x为整数。在默认情况下,Lingo规定变量是非负的,也就是说下界为0,上界为+。free取消了默认的下界为0的限制,使变量也可以取负值。bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。2.6 集循环函数for:该函数用来产生对集成员的约束。sum:该函数返回遍历指定的集成员的一个表达式的和。min和max:返
8、回指定的集成员的一个表达式的最小值或最大值。2.7 其他函数(1)函数TABLE该函数以表格形式输出与集合和集合的属性相关的数据,并且只能在数据段(DATA)中使用。目前该函数仅用于将数据输出到结果报告窗口或文本文件中,而不能输出到数据库或电子表格(EXCEL)文件中。也就是说,只能输出到TEXT 函数,而不能输出到OLE和ODBC 函数。(2)函数WRITE和WRITEFOR函数WRITE和WRITEFOR在LINGO9.0用在程序的数据段(DATA)方便用户控制输出格式,所输出的变量的取值是程序运行结束后最后结果的相关数据, 并且输出必须定向到TEXT 函数,即通过TEXT 函数输出到缺省
9、的输出设备(通常就是报告窗口)或文本文件。LINGO10.0中,这两个函数也是为了方便用户控制输出格式,但它们还可以出现在计算段(CALC)随时输出中间结果,并且不需要使用TEXT 函数,输出的结果也是被定向到缺省的输出设备(通常就是标准的报告窗口)。如果希望改变缺省的输出设备,可以采用DIVERT函数。注:(1)Lingo中是不区分大小写字符的。(2)Lingo中数据部分不能使用分式,例如数据部分不能使用1/3。(3)Lingo中的注释是使用!引导的。(4)Lingo中默认所有的变量都是非负的。(5)Lingo中矩阵数据是逐行存储的,Matlab中数据是逐列存储的。例1 使用LINGO软件计
10、算6个产地8个销地的最小费用运输问题。单位商品运价如表1所示。 表1 单位商品运价表单位运价 销地产地B1B2B3B4B5B6B7B8产量A16267425960A24953858255A35219743351A47673927143A52395726541A65522814352销量3537223241324338 解 设表示产地Ai运到销地Bj的量,表示产地Ai到销地Bj的单位运价,表示销地Bj的需求量,表示产地Ai的产量,建立如下线性规划模型,s.t. (1)用Lingo编程,程序和数据放在同一个文件中。计算的Lingo程序如下model:!6产地8销地运输问题;sets: w
11、arehouses/1.6/: e; vendors/1.8/: d; links(warehouses,vendors): c,x;endsets!目标函数; min=sum(links: c*x);!需求约束; for(vendors(J):sum(warehouses(I): x(I,J)=d(J);!产量约束; for(warehouses(I):sum(vendors(J): x(I,J)<=e(I); !下面是数据;data: e=60 55 51 43 41 52; d=35 37 22 32 41 32 43 38; c=6 2 6 7 4 2 9 5 4 9
12、5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3;enddataend(2)用Lingo编程,要求数据文件放在纯文本文件中。使用Lingo函数file,text进行纯文本文件数据的输入和输出。注:执行一次file,输入1个记录,记录之间的分隔符为。计算的Lingo程序如下model:sets: warehouses/1.6/: e; vendors/1.8/: d; links(warehouses,vendors): c, x;endsets min=sum(links: c*x); for
13、(vendors(J):sum(warehouses(I): x(I,J)=d(J); for(warehouses(I):sum(vendors(J): x(I,J)<=e(I);data: e=file(sdata.txt); d=file(sdata.txt); c=file(sdata.txt); text(sdata2.txt)=table(x); !把计算结果以表格形式输出到外部纯文本文件;enddataend其中纯文本数据文件sdata.txt中的数据格式如下60 55 51 43 41 52 !是记录分割符,该第一个记录是产量;35 37 22 32 41 32 43 3
14、8 !该第二个记录是需求量;6 2 6 7 4 2 9 54 9 5 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3 !最后一个记录是单位运价;(3)用Lingo编程,要求数据文件放在Excel文件中。Lingo通过OLE函数实现与Excel文件传递数据,使用OLE函数既可以从Excel文件中导入数据,也能把计算结果写入Excel文件。从Excel文件中导入数据的格式如下属性名1=OLE(Excel文件名,数据块名称1);使用OLE函数也能把计算结果写入Excel文件,使用格式如下OLE(Excel文件
15、名,数据块名称2)=属性名2;如数据块名称与属性名相同时,可以省略数据块名称。计算的Lingo程序如下model:sets: warehouses/1. 6/: e; vendors/1.8/: d; links(warehouses,vendors): c, x;endsets min=sum(links: c*x); for(vendors(J):sum(warehouses(I): x(I,J)=d(J); for(warehouses(I):sum(vendors(J): x(I,J)<=e(I);data: e=ole(sdata3.xls); d=ole(sdata3.xls
16、); c=ole(sdata3.xls,cc); !Excel中不允许使用域名“c”,对应的数据块定义成“cc”; ole(sdata.xls)=x;enddataend 例2 Lingo中的子模型求解下列最小值问题, 把完整的一个数学规划问题作为一个子模型的Lingo程序:model:sets:var1/1.5/:aa;var2/1.4/:bb;var3/1 2/:x;link(var1,var2): tobj;endsetsdata:aa=0 1 2 3 4;bb=2 4 6 7;text('sdata4.txt')=table(tobj);enddatasubmodel
17、sub1:objmin=4*x(1)3-a*x(1)-2*x(2);x(1)+x(2)<4;2*x(1)+x(2)<5;-x(1)+b*x(2)>2;endsubmodelcalc:for(var1(i):for(var2(j):a=aa(i);b=bb(j);solve(sub1); tobj(i,j)=obj; write(a,' ' ,b,' ',obj,newline(1);endcalcend把目标函数和约束条件分别作为两个子模型的Lingo程序如下model:sets:var1/1.5/:aa;var2/1.4/:bb;var3/1
18、 2/:x;link(var1,var2): tobj;endsetsdata:aa=0 1 2 3 4;bb=2 4 6 7;text('sdata4.txt')=table(tobj);enddatasubmodel sub2:objmin=4*x(1)3-a*x(1)-2*x(2);endsubmodelsubmodel sub3:x(1)+x(2)<4;2*x(1)+x(2)<5;-x(1)+b*x(2)>2;endsubmodelcalc:for(var1(i):for(var2(j):a=aa(i);b=bb(j);solve(sub2,sub3)
19、; tobj(i,j)=obj; write(a,' ' ,b,' ',obj,newline(1);endcalcend例3 编写Lingo程序求解下列线性规划问题,s.t. 求解的Lingo程序如下:model:sets:col/1.5/:c,x;row/1.3/:b;link(row,col):a;endsetsdata:c=2 3 4 5 6;b=100 -20 60;a=1 -1 1 1 2 -2 2 -3 -4 -13 -1 -1 -2 -1;enddatamin=sum(col:c*x);for(row(i):sum(col(j):a(i,j)*x
20、(j)<b(i);x(1)+x(2)+5*x(3)+8*x(4)=70;x(2)<0;for(col(j)|j#ge#3:free(x(j);end例4 用Lingo编程求解如下的线性规划问题,s.t. 其中是用Matlab生成的矩阵,其中的每个元素是0,1上的均匀分布的随机数,是相应维数的区间10,100上的随机整数列向量,是相应维数的区间100,200上的随机整数列向量。产生数据并写入纯文本文件的Matlab程序:clc, clearc=randi(10,100,1000,1);a=rand(500,1000);b=randi(100,200,500,1);fid=fopen(
21、'data1.txt','w');fprintf(fid,'%4dn',c);fprintf(fid,'%cn',''); %继续写入字符fprintf(fid,'%fn',a'); %继续写入矩阵afprintf(fid,'%cn','')fprintf(fid,'%4dn',b); fclose(fid);求解线性规划的Lingo程序:model:sets:col/1.1000/:c,x;row/1.500/:b;link(row,col)
22、:a;endsetsdata:c=file(data1.txt);a=file(data1.txt);b=file(data1.txt);enddatamax=sum(col:c*x);for(row(i):sum(col(j):a(i,j)*x(j)<b(i);end例5 某公司用三种原料生产三种产品,产品产量只能是整数,其最大最小生产量、单位利润、公司材料拥有量及单位产品原料消耗量见表2。该公司应如何安排生产才能使公司获利最大。要求写出模型,把数据保存到Excel文件中,用Lingo编程求解。表2 原始数据表产品甲产品乙产品丙拥有量原料A582500原料B723500原料C65760
23、0单位利润785最小产量203020最大产量6050100解 设甲、乙、丙三种产品的生产量分别为(),三种产品的单位利润、最小产量、最大产量分别为、,三种原料的拥有量分别为(),为第种产品对第种原料的单位消耗。建立如下的线性规划模型s.t. 利用Lingo软件求得,目标函数的最优值为670,最优解为,。计算的Lingo程序如下model:sets:var/1.3/:c,x,b,d,e;link(var,var):a;endsetsdata:c=ole(data2.xls,cc);b=ole(data2.xls);d=ole(data2.xls);e=ole(data2.xls);a=ole(d
24、ata2.xls);enddatamax=sum(var:c*x);for(var(i):sum(var(j):a(i,j)*x(j)<e(i);for(var:bnd(b,x,d);for(var:gin(x);end例6 已知10个商业网点的坐标如表3所示,现要在10个网点中选择适当位置设置供应站,要求供应站只能覆盖10公里之内的网点,且每个供应站最多供应5个网点,如何设置才能使供应站的数目最小,并求最小供应站的个数。表3 商业网点的坐标和坐标数据9.48888.792811.596011.56435.67569.84979.175613.138515.466315.54645.68
25、1710.38683.92944.43259.965817.66326.151711.85698.872115.5868 解 记(,)表示第个营业网点与第个营业网点之间的距离,引进0-1变量建立如下的0-1整数规划模型s.t. 计算的Lingo程序如下model:sets:num/1.10/:x0,y0,x;link(num,num):y,d;endsetsdata:x0=9.48888.792811.596011.56435.67569.84979.175613.138515.466315.5464;y0=5.681710.38683.92944.43259.965817.66326.151
26、711.85698.872115.5868;enddatacalc:for(link(i,j):d(i,j)=sqrt(x0(i)-x0(j)2+(y0(i)-y0(j)2);endcalcmin=sum(num:x);for(num(j):sum(num(i):y(i,j)>1);for(link(i,j):d(i,j)*y(i,j)<10*x(i);for(link(i,j):x(i)>y(i,j);for(num(i):sum(num(j):y(i,j)<5);for(num:bin(x);for(link:bin(y);例7 某糖果厂用原料A、B、C加工成三种不
27、同牌号的糖果甲、乙、丙。已知各种牌号糖果中A、B、C含量、原料成本、各种原料的每月限制用量,三种牌号糖果的单位加工费及售价,如表4所示。问该厂每月生产这三种牌号糖果各多少kg,才能使其获利最大。试建立这个问题的线性规划的数学模型。表4原料甲乙丙原料成本(元/kg)每月限制用量/kgA60%30%22000B1.52500C20%50%60%11200加工费(元/kg)0.50.40.3售价(元/kg)3.42.852.25解 用分别代表原料A、B、C,用分别代表甲、乙、丙三种糖果,为生产第种糖果耗用的第种原料的数量(单位kg)。该厂的获利为三种牌号糖果的售价减去相应的加工费和原料成本,三种糖果
28、的生产量分别为,三种糖果的生产量受到原材料月供应量和原料含量成分的限制,建立如下的线性规划模型 s.t. 本题最优解为,即该糖果厂每月应生产甲种糖果966.6667kg,乙种糖果4733.333kg,丙种糖果0kg,可获利5450元。 计算的Lingo程序如下model:sets:num/1.3/:c,d,h1,h2,a,b; !c成本,d用量,h1,h2为成分,a加工费,b售价;link(num,num):x;endsetsdata:c=2 1.5 1;d=2000 2500 1200;h1=0.6 0.3 0;h2=0.2 0.5 0.6;a=0.5 0.4 0.3;b=3.4 2.85
29、2.25;enddatamax=sum(num(j):(b(j)-a(j)*sum(num(i):x(i,j)-sum(num(i):c(i)*sum(num(j):x(i,j);for(num(i):sum(num(j):x(i,j)<d(i);for(num(j)|j#le#2:x(1,j)>h1(j)*sum(num(i):x(i,j);for(num(j):x(3,j)<h2(j)*sum(num(i):x(i,j);end例8 捷运公司在下一年度的14月的4个月内拟租用仓库堆放物资。已知各月份所需仓库面积列于表5。仓库租借费用随合同期而定,期限越长,折扣越大,具体数
30、字见表5。租借仓库的合同每月初都可办理,每份合同具体规定租用面积和期限。因此该公司可根据需要,在任何一个月初办理租借合同。每次办理时可签一份合同,也可签若干份租用面积和租借期限不同的合同,试确定该公司签订租借合同的最优决策,目的是使所付租借费用最小。 表5 100m2月份1234所需仓库面积15102012合同租借期限1个月2个月3个月4个月合同期内的租费2800450060007300解:设变量表示捷运公司在第()个月初签订的租借期为()个月的仓库面积的合同(单位为100m2)。因5月份起该公司不需要租借仓库,故均为零。该公司希望总的租借费用为最小,故有如下数学模型:(目标函数) s.t.(
31、约束条件)这个模型中的约束条件分别表示当月初签订的租借合同的面积加上该月前签订的未到期的合同的租借面积总和,应不少于该月所需的仓库面积。注:本例的最优解为,其它变量取值均为零,最优值。计算的Lingo程序如下model:sets:num/1.4/:d,t,c;link(num,num):x;endsetsdata:d=15 10 20 12;t=1 2 3 4;c=2800 4500 6000 7300;enddatamin=sum(link(i,j)|i#le#5-j:c(j)*x(i,j);for(num(k):sum(link(i,j)|i#le#k #and# j#ge#k+1-i:x
32、(i,j)>d(k);for(num(i):for(num(j)|j#ge#6-i:x(i,j)=0);end例9 求解下列规划问题 ,s.t. , .解一:直接用Lingo软件求解,Lingo程序如下model:sets:row/1.3/:b;col/1.4/:c,x;link(row,col):a;endsetsdata:c=1 2 2 4;b=0 1 -0.5;a=1 -1 -1 1 1 -1 1 -3 1 -1 -2 3;enddatamin=sum(col:c*abs(x);for(row(i):sum(col(j):a(i,j)*x(j)=b(i);for(col:free(x);end解二 先线性化,做变量变换,记,则,则可把模型变换为线性规划模型, 其中,。求解的Lingo程序如下model:sets:row/1.3/:b;col/1.4/:c,u,v,x;link(row,col):a;endsetsdata:c=1 2 2 4; b=0 1 -0.5;a=1 -1 -1 1 1 -1 1 -3 1 -1 -2 3;enddatamin=sum(col:c*(u+v);for(row(i):sum(col(j):a(i,j)*(u(j)-v(j)=b(i);end 注:(1)Lingo软件可以自动对带有绝对值的数学规划问题进行线性化。(2)Lingo线
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统编版(2024)三年级上册道德与法治第6课 从小爱科学 教案
- 污水管网改造工程技术方案
- 公司年度战略规划文本模板
- 网络安全管理体系建设指南
- 1.1 等腰三角形(巩固篇)
- 圆锥体积教学课件及教案设计指导
- 小学入门数独教学辅导资料
- 智能家居安装操作标准手册
- 标准劳务合同协议书三篇合集
- 建筑工程进度管理实务解析
- 技术部经理竞聘演讲稿
- 电动车 - 雪佛兰Bolt减速器拆解分析报告
- 2025年河北建设投资集团有限责任公司人员招聘笔试备考题库及一套完整答案详解
- 腻子班组安全教育测试题及答案解析
- 2025年行政执法考试题库及答案(单选题)
- 考点解析自考专业(小学教育)(黄金题型)附答案
- 具身智能+军事模拟训练系统研究报告
- 交通志愿者培训
- 二甲评审院感工作汇报
- 2025年军考真题数学试卷及答案
- 2025年政务服务面试题库及答案
评论
0/150
提交评论