6LINGO基本语法和编程课件

上传人:我*** 文档编号:144912354 上传时间:2020-09-14 格式:PPT 页数:82 大小:1.27MB
返回 下载 相关 举报
6LINGO基本语法和编程课件_第1页
第1页 / 共82页
6LINGO基本语法和编程课件_第2页
第2页 / 共82页
6LINGO基本语法和编程课件_第3页
第3页 / 共82页
6LINGO基本语法和编程课件_第4页
第4页 / 共82页
6LINGO基本语法和编程课件_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《6LINGO基本语法和编程课件》由会员分享,可在线阅读,更多相关《6LINGO基本语法和编程课件(82页珍藏版)》请在金锄头文库上搜索。

1、第3讲:LINGO基本语法和编程,王 丹 理学院数学与系统科学系 2016年夏季,LINGO程序的基本结构 LINGO中的集合 LINGO中的简化函数 LINGO中的运算符,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+5*x2+3*x3; -4*x1-x2+x3=0; -2*x1+4*x2-2*x3=

2、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 求函数 的最小值.,解: 编写Lingo 程序如下:,min=(x+2)2+(y-2)2; free(x);,例 4 求函数 的最小值.,求得结果: x=-2, y=2,例 5使用 LINGO 软件计算 6

3、个发点 8 个收点的最小费用运输问题。如下产销及单位运费表,求最优的运输方案!,model:!6 发点 8 收点运输问题;sets:warehouses/wh1.wh6/: capacity;vendors/v1.v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=sum(links: cost*volume);!需求约束;for(vendors(J):sum(warehouses(I): volume(I,J)=demand(J);,!产量约束;for(warehouses(I):sum(vendors(J

4、): volume(I,J)=capacity(I);!下面是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=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;enddataend,LINGO程序基本结构,1:模型以Model以END结束,Model: Title “Example” END,注:在程序中若没有Model和End也能执行,但建议写完整标准的程序,LINGO

5、程序基本结构,2:五段(Section)结构,Model: Title “Example” 集合段(sets.endsets) 数据段(data.enddata) 初始段(init. Endinit ) 计算段 目标和约束段(min) END,五段结构中目标和约束段一般是不可少的,集合段用得比较多,数据段次之,初始段和计算段不一定有。这些段的顺序可调换。,LINGO模型的基本结构,(1)集合段(SETS):以“ SETS:” 开始, “ENDSETS”结束,定义必要的集合变量(SET)及其元素(MEMBER,含义类似于数组的下标)和属性(ATTRIBUTE,含义类似于数组)。,Sets: Ca

6、r/1 2/: lcar; Box/1.7/: hd,zl,js; SL(Car,Box): x; TRI(Car,SL): trx; ENDSETS,sets:warehouses/wh1.wh6/: capacity;vendors/v1.v8/: demand;links(warehouses,vendors): cost, volume;endsets,warehouses/wh1.wh6/: capacity; vendors/v1.v8/: demand; 以上是定义一维数据!,sets:warehouses/wh1.wh6/: capacity;vendors/v1.v8/: d

7、emand;links(warehouses,vendors): cost, volume;endsets,问:links表示什么? cost? Volume?,Links:表示一个下标集,(2)数据段(DATA):以 “DATA:” 开始, “ENDDATA”结束,对集合的属性(数组)输入必要的常数数据。 格式为:“attribute(属性) = value_list(常数列表);” 常数列表(value_list)中数据之间可以用逗号“,”分开,也可以用空格分开(回车等价于一个空格),如:,Data: hd = 48.7 52 61.3 72 48.7 52 64; zl = 2000 3

8、000 1000 500 4000 2000 1000; js = 8 7 9 6 6 4 8; ENDDATA,Sets: Car/1 2/: lcar; Box/1.7/: hd,zl,js; SL(Car,Box): x; TRI(Car,SL): trx; ENDSETS,data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=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;

9、enddata,sets:warehouses/wh1.wh6/: capacity;vendors/v1.v8/: demand;links(warehouses,vendors): cost, volume;endsets,volume呢?,(3)初始段(INIT):以“INIT: ”开始, “ENDINIT”结束,对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,所以用户如果能给出一个比较好的迭代初值,对提高算法的计算效果是有益的)。 如果有一个接近最优解的初值,对LINGO求解模型是有帮助的。定义初值的格式为: “attribute(属性) = value_list(常数列表)

10、;” 这与数据段中的用法是类似的。,Init: x = 1 1 1 1 1 1 1 1 1 1 1 1 1 1; Endinit,(4)计算段(CALC):以“CALC: ”开始, “ENDCALC”结束,对一些原始数据进行计算处理。 在实际问题中,输入的数据通常是原始数据,不一定能在模型中直接使用,可以在这个段对这些原始数据进行一定的“预处理”,得到模型中真正需要的数据。,例如,Calc: TotalWeight = sum(Box(i): zl(i)*js(i); EndCalc,注意计算段只能对常量进行计算,不能对需要通过解优化程序求解出来的变量进行计算。,(5)目标与约束段:目标函数、

11、约束条件等,没有段的开始和结束标记,因此实际上就是除其它四个段(都有明确的段标记)外的LINGO模型。这是Lingo程序最重要的部分。,!目标函数;min=sum(links: cost*volume); !需求约束;for(vendors(J):sum(warehouses(I): volume(I,J)=demand(J);,for(vendors(J):sum(warehouses(I): volume(I,J)=demand(J);,For 表示循环 用法:for(前:后), “前”表示遍历的下标集vendors(J), “后” 表示一个方程(或不等式)。 Sum 表示求和 用法:su

12、m(前:后), “前”表示用于遍历的下标集warehouse(I), “后” 句子表示一个方程(或不等式)。,!产量约束;for(warehouses(I):sum(vendors(J): volume(I,J)=capacity(I);,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 除以

13、y 的余数。 sign(x):如果 x=0 时,返回不超过 x 的最大整数;当 x0,model:!6 发点 8 收点运输问题; Title Example;sets:warehouses/wh1.wh6/: capacity;vendors/v1.v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=sum(links: cost*volume);!需求约束;for(vendors(J):sum(warehouses(I): volume(I,J)=demand(J);,!产量约束;for(warehouse

14、s(I):sum(vendors(J): volume(I,J)=capacity(I);!下面是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=file(2_1.txt);enddataend,一个简单的LINGO程序,例 直接用LINGO来解如下二次规划问题:,输入窗口如下:,输出结果:,运行菜单命令“LINGO|Solve”,最优整数解 X=(35.37,64.63),最大利润=11077.87,输出结果备注:,通过菜单 “WINDOW| Status Window”看到状态窗口,可看到最佳目标

15、值“Best Obj”与问题的上界“Obj Bound”已经是一样的,当前解的最大利润与这两个值非常接近,是计算误差引起的。,LINGO是将它作为NLP(非线性规划)来求解,找到的是全局最优解。,一个复杂一些的LINGO程序,例 直接用LINGO来解如下线性规划问题:,程序如下:,输出结果,LINGO是将它作为ILP(整数线性规划)来求解,找到全局最优解。,LINGO程序注意的几个问题,LINGO的基本用法的几点注意事项,LINGO中不区分大小写字母;变量和行名可以超过8个字符,但不能超过32个字符,且必须以字母开头。 用LINGO解优化模型时已假定所有变量非负(除非用限定变量取值范围的函数f

16、ree或sub或slb另行说明)。 变量可以放在约束条件的右端(同时数字也可放在约束条件的左端)。但为了提高LINGO求解时的效率,应尽可能采用线性表达式定义目标和约束(如果可能的话)。 语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编写程序时应注意模型的可读性。例如:一行只写一个语句,按照语句之间的嵌套关系对语句安排适当的缩进,增强层次感。 以感叹号开始的是说明语句(说明语句也需要以分号结束))。,集合的基本用法,理解LINGO建模语言最重要的是理解集合(Set)及其属性(Attribute)的概念。,例 SAILCO公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。如果加班生产,每条船的生产费用为450美元。每个季度末,每条船的库存费用为20美元。假定生产提前期为0,初始库存为10条船。如何安排生产可

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号