LINGO教程上课精简版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Lingo使用教程例1.如何在LINGO中求解如下的LP问题:LINGO代码:min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;121211212min()23..3501002600,0fxxxstxxxxxxxLINDO/LINGO软件LINGO:LinearINteractiveGeneralOptimizer(V12.0)求解数学规划问题MinZ=f(x)s.txD(Rn)需要掌握的几个重要方面基本语法结构掌握集合(SETS)的应用正确阅读求解报告正确理解求解状态窗口学会设置基本的求解选项(OPTIONS)一、Lingo基本语法1、定义了目标函数为MIN=..2、以一个分号“;”结尾——除SETS,ENDSETS,DATA,ENDDATA,END之外3、变量可以放在约束条件右端,也可放在约束条件的左端。4、默认假定各变量非负。5、注释:“!”6、、为≤、≥LINGO函数LINGO有9种类型的函数:1.基本运算符:包括算术运算符、逻辑运算符和关系运算符2.数学函数:三角函数和常规的数学函数3.金融函数:LINGO提供的两种金融函数4.概率函数:LINGO提供了大量概率相关的函数5.变量界定函数:这类函数用来定义变量的取值范围6.集操作函数:这类函数为对集的操作提供帮助7.集循环函数:遍历集的元素,执行一定的操作的函数8.数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9.辅助函数:各种杂类函数过滤条件使用——结果:014.1运算符及其优先级逻辑运算符#NOT#否定#EQ#相等#NE#不等#AND#并且#OR#或者#GT#大于#GE#大于等于#LT#小于#LE#小于等于算术运算符+-*/^关系运算符(=)=(=)4.1.3关系运算符在LINGO中,关系运算符主要是被用来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。LINGO有三种关系运算符:“=”、“=”和“=”。LINGO中还能用“”表示小于等于关系,“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:A+ε=B,这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等。运算符的优先级最高——————————————最低#NOT#—(负号)^*/+—(减法)#EQ##NE##GT##GE##LT##LE##AND##OR#=先左后右,先括号内,后括号外4.5变量界定函数变量界定函数实现对变量取值范围的附加限制,共4种:@bin(x)限制x为0或1@bnd(L,x,U)限制L≤x≤U@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x)限制x为整数在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。4.7集循环函数集循环函数遍历整个集进行操作。其语法为@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);@function相应于下面罗列的四个集循环函数之一;setname是要遍历的集;set_index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。expression_list是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用其余的三个集循环函数时,expression_list只能有一个表达式。如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集。1.@for该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。例4.10产生序列{1,4,9,16,25}model:sets:number/1..5/:x;endsets@for(number(I):x(I)=I^2);end2.@sum该函数返回遍历指定的集成员的一个表达式的和。例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);end3.@min和@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);end5.LINGO常用菜单命令1.求解模型(Slove)从LINGO菜单中选用“求解”命令、单击“Slove”按钮或按Ctrl+S组合键可以将当前模型送入内存求解。2.求解结果...(Solution...)从LINGO菜单中选用“Solution...”命令、单击“Solution...”按钮或直接按Ctrl+O组合键可以打开求解结果的对话框。这里可以指定查看当前内存中求解结果的那些内容。3.查看...(Look...)从LINGO菜单中选用“Look...”命令或直接按Ctrl+L组合键可以查看全部的或选中的模型文本内容。4.灵敏性分析(Range,Ctrl+R)用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options…,选择GeneralSolverTab,在DualComputations列表框中,选择PricesandRanges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。二、Lingo集合某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)例4选址问题假设:料场和工地之间有直线道路(1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨。目标:制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。i123456a28.750.55.7537.25b30.754.7556.57.75d1.25547611解:决策变量:料场j到工地i的运量——cij——12维线性规划模型lingo——表达式?26221/2112161min[()()].,1,...,6,1,20,1,...,6,1,2ijjijijiijijijjiijcxaybstcdicejcij目标:吨公里约束:需求供应基本使用1、Lingo建模语言构成:4个段目标与约束段集合段(SETSENDSETS)数据段(DATAENDDATA)初始段(INITENDINIT)(计算段(CALCENDCALC))目标与约束段MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;enddatainit:x,y=5,1,2,7;endinitmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(i):@sum(demand(j):c(j,i))=e(i););END集合段数据段初始段供应约束需求需求点的位置供需量供应初始点目标需求约束连接2、Lingo的集合Set及其属性Attribute例1建筑工地位置坐标(ai,bi)、水泥日用量di:对每个建筑工地(6个)都有一个对应的值都是一个由6个元素组成的数组——是已知的料场位置坐标(xj,yj)、日储量ej对每个料场(2个)都有一个对应的值都是一个由2个元素组成的数组——目前是已知的料场到建筑工地的供应计划cij对每个料场与建筑工地之间(6×2)都有一个对应的值是一个6×2个元素组成的矩阵——是未知数Lingo的集合Set——下标集合集合Set及其属性Attribute定义数组下标集合demand/1..6/———表示6个建筑工地a,b,d称为该集合的属性———表示坐标(ai,bi)、水泥日用量di定义数组下标集合supply/1..2/———表示2个料场。该集合的属性x,y,e———表示坐标(xj,yj)、日储量ej定义数组下标集合link(demand,supply)———表示6×2个料场到建筑工地的连接该集合的属性c———表示每个料场与建筑工地之间供应计划cij1到6的整数建立下标集合例4需求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;x,y=5,1,2,7;e=20,20;enddata赋值需求供应连接基本集合派生集合626152514241323122211211212121654321654321654321,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,cccccccccccceeyyxxddddddbbbbbbaaaaaaLingo建模语言——集合段数据段3、定义集合Set直接把元素列举出来定义格式——集合名元素列表属性列表setname[/member_list/][:attribute_list];[……]——可选项元素列表显式列举法——列出全部元素,用逗号或空格分开隐式列举法——1..n属性列表缺省——集合可在程序中作为一循环变量使用,构造更复杂的派生集合元素列表缺省——必须在数据段给出元素列表赋值基本集合primaryset派生集合derivedset基于其它集合而派生出来的二维或多维集合定义格式——集合名父集合列表元素列表属性列表setname(parent_set_list)[/member_list/][:attribute_list];元素列表缺省所有组合——稠密集合、或数据段列表赋值元素列表——稀疏集合元素列表法——枚举元素过滤法——

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功