1、Lingo使用教程东南大学数模培训材料,,LINGO is a comprehensive tool designed to make building and solving Linear, Nonlinear (convex & nonconvex/Global), Quadratic, Quadratically Constrained, Second Order Cone, Stochastic,and Integer optimization models faster, easier and more efficient. LINGO provides a completely i
2、ntegrated package that includes a powerful language for expressing optimization models, a full featured environment for building and editing problems, and a set of fast built-in solvers. The recently released LINGO 12.0 includes a number of significant enhancements and new features.,LINGO provides a
3、ll of the tools you will need to get up and running quickly. You get the LINGO User Manual (in printed form and available via the online Help), which fully describes the commands and features of the program. Also included with super versions and larger is a copy of Optimization Modeling with LINGO,
4、http:/ a comprehensive modeling text discussing all major classes of linear, integer and nonlinear optimization problems. LINGO also comes with dozens of real-world based examples for you to modify and expand.,优化问题的一般形式,LP,ILP,BILP,NLP,INLP,QP,IQP,PIP,ZOP,线性规划问题LP的标准形式,MATLAB命令:linprog, bintprog,例1.
5、如何在LINGO中求解如下的LP问题:,LINGO代码:min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;,例2.如何在LINGO中求解如下的IQP问题:,LINGO代码:max=98*x1+277*x2-x12-0.3*x1*x2-2*x22;x1+x2=100;x1= required(J);end,例2。 职员时序安排模型 一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。model:
6、sets: days/mon.sun/: required,start;endsetsdata: !每天所需的最少职员数; required = 20 16 13 16 19 14 12; enddata!最小化每周所需职员数; min=sum(days: start); for(days(J): sum(days(I) | I #le# 5: start(wrap(J+I+2,7) = required(J);end,最优解决方案是:每周最少需要22个职员,周一安排8人,周二安排2人,周三无需安排人,周四安排6人,周五和周六都安排3人,周日无需安排人。,LINDO /LINGO软件,LING
7、O: Linear INteractive General Optimizer (V12.0)求解数学规划问题 Min Z = f (x) s.t x D ( Rn )需要掌握的几个重要方面基本语法结构掌握集合(SETS)的应用正确阅读求解报告正确理解求解状态窗口学会设置基本的求解选项(OPTIONS),一、Lingo基本语法,1、定义了目标函数为MIN=. 2、以一个分号“;”结尾 除SETS, ENDSETS, DATA , ENDDATA, END之外3、变量可以放在约束条件右端,也可放在约束条件的左端。4、默认假定各变量非负。5、注释:“!”6、为、,建模时需要注意的几个基本问题,尽量
8、使用实数优化,减少整数约束和整数变量尽量使用光滑优化,减少非光滑约束的个数 尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等尽量使用线性模型,减少非线性约束和非线性变量的个数如x/y 5 改为x5y合理设定变量上下界,尽可能给出变量初始值 模型中使用的参数数量级要适当不同参数绝对值数量级之间差距一般要求小于3,LINGO函数LINGO有9种类型的函数:1 基本运算符:包括算术运算符、逻辑运算符和关系运算符2 数学函数:三角函数和常规的数学函数3 金融函数:LINGO提供的两种金融函数4 概率函数:LINGO提供了大量概率相关的函数5 变量界定函数:这类函数用来定义变量的
9、取值范围6 集操作函数:这类函数为对集的操作提供帮助7 集循环函数:遍历集的元素,执行一定的操作的函数8 数据输入输出函数:这类函数允许模型和外部数据源相联系, 进行数据的输入输出9 辅助函数:各种杂类函数,过滤条件使用结果:0 1,4.1运算符及其优先级,4.1.3 关系运算符在LINGO中,关系运算符主要是被用来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。 LINGO有三种关系运算符:“=”
10、、“=”。LINGO中还能用“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:A+=B,这里是一个小的正数,它的值依赖于模型中A小于B多少才算不等。,运算符的优先级,最高最低,先左后右,先括号内,后括号外,4.2 数学函数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
11、函数的自然对数sign(x) 如果x=0时,返回不超过x的最大整数; 当x=30;end,5. LINGO常用菜单命令1 求解模型(Slove) 从LINGO菜单中选用“求解”命令、单击“Slove”按钮或按Ctrl+S组合键可以将当前模型送入内存求解。2 求解结果(Solution) 从LINGO菜单中选用“Solution”命令、单击“Solution”按钮或直接按Ctrl+O组合键可以打开求解结果的对话框。这里可以指定查看当前内存中求解结果的那些内容。3 查看(Look)从LINGO菜单中选用“Look”命令或直接按Ctrl+L组合键可以查看全部的或选中的模型文本内容。4 灵敏性分析(R
12、ange,Ctrl+R)用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options,选择General Solver Tab, 在Dual Computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。,二、Lingo集合,某公司有6个建筑工地,位置坐标为(ai,bi) (单位:公里),水泥日用量di
13、(单位:吨),例4 选址问题,假设:料场和工地之间有直线道路(1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2, 日储量ej各有20吨。目标:制定每天的供应计划,即从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。,解:,决策变量:料场j到工地i的运量 cij 12维线性规划模型lingo表达式?,目标:吨公里,约束:需求 供应,基本使用,1、Lingo建模语言,构成:4个段,目标与约束段集合段(SETS ENDSETS)数据段(DATA ENDDATA)初始段(INIT ENDINIT)(计算段 (CALC ENDCALC)),目标与约束段,MODE
14、L:Title Location Problem;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):
15、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个元素组成的数组目前是已知的料场到建筑工地的供应计划 c i j 对每个料场与建筑工地之间(62)都有一个
16、对应的值是一个62 个元素组成的矩阵是未知数LINDO无数组,每个变量输入麻烦,Lingo的集合Set下标集合,100个工地?,集合Set及其属性Attribute,定义数组下标集合demand/1.6/表示6个建筑工地a,b,d称为该集合的属性表示坐标(ai,bi) 、水泥日用量di定义数组下标集合supply/1.2/表示6个建筑工地该集合的属性x,y,e表示坐标(xj,yj) 、日储量ej 定义数组下标集合link(demand,supply)表示62个料场到建筑工地的连接该集合的属性c表示每个料场与建筑工地之间供应计划c i j,1到6的整数,建立 下标集合,例4,需求点的位置,供需量
17、,sets:demand/1.6/:a,b,d;supply/1.2/:x,y,e;link(demand,supply):c;endsets,data: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,赋值,需求,供应,连接,基本集合,派生集合,Lingo 建模语言集合段 数据段,3、定义集合Set,直接把元素列举出来定义格式 集合名 元素列表 属性列表 setname /member_list/ : attribute_list; 可选
18、项元素列表显式列举法列出全部元素, 用逗号或空格分开隐式列举法 1.n属性列表缺省集合可在程序中作为一循环变量使用,构造更复杂的派生集合元素列表缺省必须在数据段给出元素列表赋值,基本集合primary set,派生集合derived set,基于其它集合而派生出来的二维或多维集合定义格式 集合名 父集合列表 元素列表 属性列表 setname(parent_set_list) /member_list/ : attribute_list;元素列表缺省所有组合稠密集合、或数据段列表赋值元素列表稀疏集合元素列表法枚举元素过滤法利用过滤条件setname(parent_set_list) |filt
19、rate_condition :attribute_list;,集合的类型,集合 派生集合 基本集合 稀疏集合 稠密集合 元素列表法 元素过滤法 直接列举法 隐式列举法,setname /member_list/ : attribute_list;,setname(parent_set_list) /member_list/ : attribute_list;,SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETS,SETS: STUDENTS /S1.S8/; PAIR
20、S( STUDENTS, STUDENTS) | ENDSETS,3、Lingo集合循环函数,难点!重点!,循环操作函数集合上的元素下标:,集合函数名,function(setname (set_index_list)|condition:expression_list);,集合名,集合索引列表,过滤条件,表达式,FORMAXMINSUM PROD,目标:吨公里,for(demand(i):sum(supply(j):c(i,j)=d(i);); for(supply(i):sum(demand(j):c(j,i)=e(i););,例1,约束:需求 供应,min=sum(link(i,j):c
21、(i,j)*(x(j)-a(i)2+(y(j)- b(i)2)(1/2);,默认:非负实数变量,4、Lingo变量定界函数,例4,约束:非负,目标与约束段,MODEL:Title Location Problem;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;enddatamin=sum(link(
22、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,集合段,数据段,location,供应约束,需求,需求点的位置,需求量,供应,供应点,目标,需求约束,连接,结果:总吨公里数为136.228,供应量,2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij ,在其它条件不变下使总吨公里数最小。,决策变量:ci j,(xj,yj)16维,非线性规划模型,例6 选址问题,目标:吨公
23、里,约束:需求 供应,LINGO,集合段,数据段,初始段,目标与约束段,最优:85.266(吨公里 ),NLP:从数据段移到初始段,局部,最优:89.8835(吨公里 ),局部,若对新料场位置加以限制,界面,四、 LINGO的菜单及对话框,1、LINGO的界面,主窗口,模型窗口Model Window,状态栏,当前时间,当前光标位置,2、LINGO的工具栏,File|Open(F3)打开文件,File|Print(F7)打印文件,Edit|Copy(Ctrl+C)复制,Edit|Undo(Ctrl+Z)取消操作,Edit|Find (Ctrl+F)查找,LINGO|Solution(Alt+O
24、)显示解答,Edit|Match Parenthesis(Ctrl+P)匹配括号,LINGO|Options(Ctrl+I)选项设置,Window|Close All (Alt+X)关闭所有窗口,Help|Contents(F1)在线帮助,File|New(F2)新建文件,File|Save(F4)保存文件,Edit|Cut(Ctrl+X)剪切,Edit|Paste(Ctrl+V)粘贴,Edit|Redo(Ctrl+Y)恢复操作,Edit | Go To Line(Ctrl+T)定位某行,LINGO|Solve (Ctrl+S)求解模型,LINGO|Picture(Ctrl+K)模型图示,Wi
25、ndow|Send to Back (Ctrl+B)窗口后置,Window|Tile(Alt+T) 平铺窗口,上下文相关的帮助,FileExport FileUser Database InfoEditPaste Paste Special Match Parenthesis Paste FunctionSelect Font Insert New Object Links Object Properties,3、LINGO的菜单栏,LINGOLOOKGeneratePicture FileGenerateOptions,Variables(变量数量): 变量总数(Total)、 非线性变量数
26、(Nonlinear)、 整数变量数(Integer)。,Constraints(约束数量): 约束总数(Total)、 非线性约束个数(Nonlinear)。,Nonzeros(非零系数数量): 总数(Total)、 非线性项系数个数(Nonlinear),Generator Memory Used (K) (内存使用量),Elapsed Runtime (hh:mm:ss)(求解花费的时间),4、LINGO的运行状态窗口,求解器(求解程序)状态框,当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示IP,以PI开头表示PIP),当
27、前解的状态 : Global Optimum, Local Optimum, Feasible, Infeasible“(不可行), Unbounded“(无界), Interrupted“(中断), Undetermined“(未确定),解的目标函数值,当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束),目前为止的迭代次数,运行状态窗口,扩展的求解器(求解程序)状态框,使用的特殊求解程序 :B-and-B (分枝定界算法)Global (全局最优求解程序)Multistart(用多个初始点求解的程序),目前
28、为止找到的可行解的最佳目标函数值,目标函数值的界,特殊求解程序当前运行步数:分枝数(对B-and-B程序);子问题数(对Global程序);初始点数(对Multistart程序),有效步数,运行状态窗口,可设置80-90个控制参数,5、Options 7个选项卡,Interface界面General Solver通用求解Linear Solver线性求解Nonlinear Solver非线性求解Integer Pre-Solver整数预处理Integer Solver整数求解Global Solver全局最优求解,LINGO系统(LINGO)主菜单,LINGO|Options命令,打开一个含有7个选项卡的窗口,通过它修改LINGO系统的各种控制参数和选项。,新的设置生效,新的设置生效,并关闭窗口,当前设置变为默认设置,下次启动LINGO时这些设置仍然有效,