1、LINGO在数学建模中的应用,吉林大学数学学院 全国大学生数学建模竞赛吉林赛区组委会,LINGO在数学建模中的应用,LINGO的主要功能和特点 1.求解线性规划和非线性规划问题 2.模型输入简练直观 3.运行速度快 计算能力强 4.内置建模语言 提供内部函数 较少语句直观描述大规模优化模型 5.引入集合 容易建模 6.数据交换方便(与EXCEL和数据库),需要掌握的几个重要方面,掌握集合(SETS)的应用;正确阅读求解报告;正确理解求解状态窗口;学会设置基本的求解选项(OPTIONS) ;掌握与外部文件的基本接口方法,LINGO在数学建模中的应用,LINGO的基本用法,模型窗口”LINGO M
2、odel-LINGO1”用于输入模型 可用基本类似数学公式的形式输入小模型,LINGO的语法规则,1.最大值MAX=,最小值MIN= 2.语句必须以分号”;”结束 每行可多个语句 语句可跨行 3.变量名由字母、数字和下划线组成 以字母开头 长度不超32个字符 不区分大小写 4.默认决策变量非负 其他要求可做说明 5.模型以MODEL:开头,以END结束,例 工厂有两条生产线,分别生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产能力分别为100和120,生产一个产品分别需1个和2个劳动日,工厂每天能提供160个劳动日。假设原材料不受限制,如何安排生产计划,利润最大。设生产计划
3、为生产x1个M和x2个P,数学模型为,LINGO求解,1.输入模型MODEL:MAX=200*X1+300*X2;X1=100;X2=120;X1+2*X2=160; END 2.模型存盘 选File|Save As 3.模型求解 选Lingo|Solve(Ctrl+s),LINGO求解,4.求解结果 Lingo Solver Status 变量个数 约束条件个数 优化状态非零变量个数 耗费内存 所用时间 Solition Report 计算步数 目标函数值 变量值 Golbal optimal solution found at iteration:2 Objective value: 29
4、000.00 Variable value Reduced cost (缩减成本系数) X1 100.000 0.000000 X2 30.000 0.000000 Row Slack (松池) or Surplus (剩余) Dual Price(影子价格)29000.00 10.000000 50.0000090.00000 0.000000 4 0.000000 150.0000 注 Row 模型中行号 Slack=右-左(=),LINGO编程(建模)语言,LINGO模型的基本组成 1.集合定义部分集合是一组相关对象构成的组合,代表模型中的实际事物,并与数学变量和常量联系起来,实际问题到
5、数学问题的抽象,集合使用前应定义,内容为:集合名称、集合内的成员、集合的属性(命名规则同变量) 初始集合:集合名称/集合内的成员/:集合的属性如:WH/W1W6/:AI;VD/V1V8/:Dj 衍生集合:集合名称 对应的初始集合 集合成员 集合的属性集合名称( 对应的初始集合,对应的初始集合): 集合的属性如:LINKS(WH,VD):C,X; 集合定义部分以语句SETS:开头,以语句ENDSETS结束,集合的类型,集合派生集合 基本集合稀疏集合 稠密集合元素列表法 元素过滤法 直接列举法 隐式列举法,setname /member_list/ : attribute_list;,setnam
6、e(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 /S1S8/;PAIRS( STUDENTS, STUDENTS) | ENDSETS,集合元素的隐式列举,LINGO编程(建模)语言,LINGO模型的基本组成 2.数据初始化部分(数据段)LINGO建模语言通过数据初始化部分来实现对已知属性赋予初始值数据初始化部分以语句DATA:开始,以语句
7、ENDDATA结束 如:DATA:AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;C=6,2,6,7,4,2,5,94,9,5,3,8,5,8,2ENDDATA,LINGO编程(建模)语言,LINGO模型的基本组成 3.目标函数和约束条件 内部函数:SUM,FOR SUM是LINGO的内部函数,功能是对某个集合的所有成员求指定表达式的和,有两个参数,其一是集合名称,指定对该集合的所有成员求和,其二是一个表达式,表示求和运算对该表达式进行. FOR是LINGO的内部函数,功能是对某个集合的所有成员分别派生一个约束表达式有两个参数,其一是集合名称,表
8、示对该集合的所有成员分别派生一个约束表达式,其二是约束表达式的具体内容. 注: :SUM和FOR可以嵌套使用,LINGO编程(建模)语言,例 运输问题 公司有6个供货栈(仓库),库存货物总数分别为AI=60,55,51,43,41,52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38,各供货栈到8个客户的单位运价如表1. 如何确定各供货栈到8个客户的货物调运量,使总的运费最小?表1 各供货栈到8个客户的单位运价,LINGO编程(建模)语言,例 运输问题 数学模型,LINGO编程(建模)语言,例 运输问题 LINGO模型 MODEL:SETS: WH/W1W6/
9、:AI;VD/V1V8/:Dj;LINKS(WH,VD):C,X;ENDSETSDATA:AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;C=6,2,6,7,4,2,5,94,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,5,5,8,1,4,3 ENDDATA,LINGO编程(建模)语言,例 运输问题 LINGO模型 MIN=SUM(LINKS(I,J):C(I,J)*X(I,J); FOR(WH(I):SUM(VD(J):X(I,J)=AI(I); FOR(VD(J)
10、:SUM(WH(I):X(I,J)=DJ(J); END 求解Lingo|Solve Solition Report Golbal optimal solution found at step:17 Objective value: 664.0000 Variable value Reduced cost (缩减成本系数) X(w1,v1) 0.000 5.000000 X(w1,v2) 19.000 0.000000 ,LINGO的菜单,1.File(文件菜单) Export file(输出特殊格式文件) Database User Info(用户基本信息) 2.Edit Menu(编辑菜单
11、) Paste Special(选择性粘贴) Go to Line(光标移到某一行) Match Parenthesis(匹配括号) Insert New Object(插入新对象),LINGO的菜单,3.LINGO Solution(求解结果)打开求解结果对话框,文本或图表方式查看结果 Range(灵敏性分析)产生当前模型的灵敏性分析报告:最优解不变目标函数系 数的变化范围;影子价格和缩减系数不变,约束条件右端常数的变化范围(用时需激活) Options(选项设置) Generate(生成模型展开式) Picture(生成图形),LINGO的菜单,3.LINGO Debug(调试) Mode
12、l Statistics(模型资料统计) Look(查看),LINGO的菜单,4.Window Command Window(命令行窗口) Status Window(状态窗口) 5.Help Help Topics(帮助主题) Register(在线注册) Auto Update(自动更新) About Lingo(关于Lingo),Lingo运算符,1.算术运算符 乘方,*乘,/除,+加,-减 2.逻辑运算符,Lingo运算符,3.关系运算符 = 表达式左右相等 = 表达式左边大于或等于右边 注:Lingo没有单独的AB,是一个小的正数,Lingo函数,Lingo提供了五十几个内部函数,所
13、有函数都以字符开头 数学函数 ABS(x),SIN(X),COS(x),TAN(X), LOG(X),EXP(X),SIGN(X), SMAX(X1,Xn),SMIN(X1,Xn) FLOOR(X),LGM(X),Lingo函数,集合函数集合是Lingo中最重要的概念,使用集合函数,用简单的语句可表达目标函数和约束条件 FOR(S|TJ:E) 常用在约束条件中,表示对满足TJ的S中的成员都生成一个表达式E; SUM(S|TJ:E) 对集合S中的每个成员,分别得到E的值,返回所有这些值的和; MAX(S|TJ:E)对集合S中的每个成员,分别得到E的值, 返回所有这些值中的最大值; SIZE(S)
14、返回集合S中的成员个数,集合函数,四个集合循环函数:FOR、SUM 、 MAX、MIN function( setname ( set_index_list) | condition : expression_list);,objective MAX = SUM( PAIRS( I, J): BENEFIT( I, J) * MATCH( I, J);FOR(STUDENTS( I): constraintsSUM( PAIRS( J, K) | J #EQ# I #OR# K #EQ# I: MATCH( J, K) =1);FOR(PAIRS( I, J): BIN( MATCH( I,
15、J);MAXB=MAX(PAIRS( I, J): BENEFIT( I, J);MINB=MIN(PAIRS( I, J): BENEFIT( I, J);,Example:,Lingo函数,变量定界函数 该函数可以改变变量的值或界 BIN(X) 限制X为0或1,用于0-1规划; BND(L,X,U) 限制L=X=U; GIN(X) 限制X为整数,用于整数规划 FREE(X) 取消对变量的默认为非负数的限制,即X可取任意实数值 注:用BND(L,X,U)代替约束条件,一方面可提高求解速度,另一方面它不计入约束条件,整数规划例题-背包问题,某人计划外出旅游并登山,路途较远,要坐火车和飞机,要带
16、必要的用品,如:相机、摄相机、衣服、食品、雨具和书籍等,共n件物品,重量分别为ai,能带行李的总重量为b,ci表示物品的重要性(价值).该旅行者最多能带哪些物品,才能使总价值最大. 该问题称为背包问题.,引入0-1型决策变量,表示物品i放入背包,表示物品i不放入背包,则背包问题的数学模型 是,整数规划例题-背包问题,数学模型,整数规划例题-背包问题,n=8,a=1,3,4,3,3,1,5,10;c=2,9,3,8,10,4,10;b=15kg Lingo程序 Model:SETS:WP/W1W8/:A,C,X;ENDSETS DATA:A=1 3 4 3 3 1 5 10; C=2 9 3 8
17、 10 6 4 10; ENDDATA MAX=SUM(WP:C*X);FOR(WP:BIN(X); SUM(WP:A*X)=15; END,Lingo函数,文件输入输出函数 FILE(FN) 模型引用其他ASCII码文件中的数据文本,FN是文件名,文件中的数据之间用逗号分开,不同部分之间用分开; ODBC(N) 提供LINGO与ODBC(开放数据库连接)的接口; TEXT(FN) 向文本文件输出数据,参数FN是文件名,通常用于将计算结果写入文件,FILE和TEXT:文本文件输入输出,MODEL: SETS:MYSET / FILE(myfile.txt) / : FILE(myfile.tx
18、t); ENDSETS MIN = SUM( MYSET( I):SHIP( I) * COST( I);FOR( MYSET( I): CON1 SHIP( I) NEED( I);CON2 SHIP( I) SUPPLY( I); DATA:COST = FILE(myfile.txt);NEED = FILE(myfile.txt);SUPPLY = FILE(myfile.txt);TEXT(result.txt)=SHIP, DUAL(SHIP), DUAL(CON1); ENDDATA END,myfile.txt文件 的内容、格式:Seattle,Detroit,Chicago,
19、Denver COST,NEED,SUPPLY,SHIP 12,28,15,20 1600,1800,1200,1000 1700,1900,1300,1100,Lingo函数,其他函数 WARN(文字信息,逻辑表达式)逻辑表达式的值为真时,显示文字信息,用于提示 USER() IF(逻辑表达式,逻辑表达式的值为真时的值,逻辑表达式的值为假时的值) 通常用来定义分段函数,优化模型,实际问题中 的优化模型,x决策变量,f(x)目标函数,gi(x)0约束条件,数学规划,线性规划(LP) 二次规划(QP) 非线性规划(NLP),纯整数规划(PIP) 混合整数规划(MIP),整数规划(IP),0-1整
20、数规划 一般整数规划,连续规划,LINDO和LINGO软件能求解的优化模型,LINGO,LINDO,优化模型,线性规划 (LP),非线性规划 (NLP),二次规划 (QP),连续优化,整数规划(IP),LP QP NLP IP 全局优化(选) ILP IQP INLP,LINDO/LINGO软件的求解过程,LINDO/LINGO预处理程序,线性优化求解程序,非线性优化求解程序,分枝定界管理程序,1. 确定常数 2. 识别类型,1. 单纯形算法 2. 内点算法(选),1、顺序线性规划法(SLP) 2、广义既约梯度法(GRG) (选) 3、多点搜索(Multistart) (选),LINGO典型应
21、用举例,下料问题 指派问题 货郎担问题 最大流问题 最小费用最大流问题,问题1. 如何下料最节省 ?,例 钢管下料,问题2. 客户增加需求:,节省的标准是什么?,由于采用不同切割模式太多,会增加生产和管理成本,规定切割模式不能超过3种。如何下料最节省?,为满足客户需要,按照哪些种合理模式,每种模式切割多少根原料钢管,最为节省?,合理切割模式,2. 所用原料钢管总根数最少,钢管下料问题1,两种标准,1. 原料钢管剩余总余量最小,xi 按第i 种模式切割的原料钢管根数(i=1,2,7),约束,满足需求,决策变量,目标1(总余量),按模式2切割12根,按模式5切割15根,余料27米,最优解:x2=1
22、2, x5=15, 其余为0; 最优值:27,整数约束: xi 为整数,当余料没有用处时,通常以总根数最少为目标,目标2(总根数),钢管下料问题1,约束条件不变,最优解:x2=15, x5=5, x7=5, 其余为0; 最优值:25。,xi 为整数,按模式2切割15根,按模式5切割5根,按模式7切割5根,共25根,余料35米,虽余料增加8米,但减少了2根,与目标1的结果“共切割27根,余料27米” 相比,钢管下料问题2,对大规模问题,用模型的约束条件界定合理模式,增加一种需求:5米10根;切割模式不超过3种。,现有4种需求:4米50根,5米10根,6米20根,8米15根,用枚举法确定合理切割模
23、式,过于复杂。,决策变量,xi 按第i 种模式切割的原料钢管根数(i=1,2,3),r1i, r2i, r3i, r4i 第i 种切割模式下,每根原料钢管生产4米、5米、6米和8米长的钢管的数量,满足需求,模式合理:每根余料不超过3米,整数非线性规划模型,钢管下料问题2,目标函数(总根数),约束条件,整数约束: xi ,r1i, r2i, r3i, r4i (i=1,2,3)为整数,LINGO程序,MODEL:SETS:cutfa/1,2,3/:x;buj/14/:L,NEED;SHUL(CUTFA,BUJ):N;ENDSETS DATA L=4 5 6 8;NEED=50 10 20 15;
24、 ZL=19; ENDDATA MIN=SUM(CUTFA:X); FOR(BUJ(J):SUM(CUTFA(I):N(I,J0*X(I)=NEED(J); FOR(CUTFA(I):SUM(BUJ(J):N(I,J)*L(J)=16); FOR(SHUL:GIN(N);FOR(CUTFA:GIN(X); END,增加约束,缩小可行域,便于求解,原料钢管总根数下界:,特殊生产计划:对每根原料钢管 模式1:切割成4根4米钢管,需13根; 模式2:切割成1根5米和2根6米钢管,需10根; 模式3:切割成2根8米钢管,需8根。 原料钢管总根数上界:31,模式排列顺序可任定,钢管下料问题2,需求:4米
25、50根,5米10根,6米20根,8米15根,每根原料钢管长19米,LINGO求解整数非线性规划模型,Local optimal solution found at iteration: 12211Objective value: 28.00000 Variable Value Reduced Cost X1 10.00000 0.000000 X2 10.00000 2.000000 X3 8.000000 1.000000 R11 3.000000 0.000000 R12 2.000000 0.000000 R13 0.000000 0.000000 R21 0.000000 0.0000
26、00 R22 1.000000 0.000000 R23 0.000000 0.000000 R31 1.000000 0.000000 R32 1.000000 0.000000 R33 0.000000 0.000000 R41 0.000000 0.000000 R42 0.000000 0.000000 R43 2.000000 0.000000,模式1:每根原料钢管切割成3根4米和1根6米钢管,共10根; 模式2:每根原料钢管切割成2根4米、1根5米和1根6米钢管,共10根; 模式3:每根原料钢管切割成2根8米钢管,共8根。 原料钢管总根数为28根。,例 指派问题(最优匹配问题 ),
27、n项任务分配给n个人,每人一项 每人完成各项工作所需时间不同 问题:如何分配 所需总时间最少? 一类重要的组合优化问题,用0-1变量,表示分配情况,表示第i个人做j工作,表示第i个人不做j工作,表示第i人做j工作时间,问题的数学模型是0-1规划,例 指派问题(最优匹配问题 ),数学模型,例 指派问题(最优匹配问题 ),LINGO程序,MODEL:SETS:WORKER/W1W5/;JOB/J1J5/;LINKS(WORKER,JOB):C,X;ENDSETSDATA:C=ENDDATA MIN=SUM(LINKS:C*X); FOR(WORKER(I):SUM(JOB(J):X(I,J)=1)
28、; FOR(JOB(J):SUM(WORKER(I):X(I,J)=1); FOR(LINKS:BIN(X); END,例 货郎担问题,一个货郎(旅客),从某地出发售货(旅游), 要到若干地方各一次(仅一次),最后返回出发地,问如何安排路线所走路程最短(所花费用最少). 该问题也称旅行商问题(TSP),是一个重要的组合优化问题,是NP-完全问题,至今无多项式时间算法. 近似解也不易求得. TSP近似算法-构造算法-改进型算法:二边逐次修正法 神经网络方法,模拟退火方法,混合整数规划法,例 货郎担问题,混合整数规划法,分别表示从i到j和不从i到j,表示I,j之间的路程(费用),例 货郎担问题,注
29、:第四个约束条件保证不含子巡回,MODEL:SETS: CITY/16/:U;LINK(CITY,CITY):C,X;ENDSETSDATA:C=;ENDDATAN=SIZE(CITY);MIN=SUM(LINK:C*X); FOR(CITY(K):SUM(CITY(I)|I #NE# K:X(I,K)=1;); FOR(CITY(K): SUM(CITY(J)|J #NE# K:X(K,J)=1;); FOR(CITY(I):FOR(CITY(J)|J #GE# 1 #AND# I #NE# J : U(I)-U(J)+N*X(I,J)=N-1); FOR(LINK:BIN(X); END,
30、运算符的优先级,三类运算符:算术运算符 逻辑运算符 关系运算符,状态窗口,Solver Type: B-and-B Global Multistart,Model Class:LP, QP,ILP, IQP,PILP, PIQP,NLP,INLP,PINLP,State: Global Optimum Local Optimum Feasible Infeasible Unbounded Interrupted Undetermined,7个选项卡(可设置80-90个控制参数),程序与数据分离,文 本 文 件,使用外部数据文件,Cut (or Copy) Paste 方法 FILE 输入数据、
31、TEXT输出数据(文本文件) OLE函数与电子表格软件(如EXCEL)连接 ODBC函数与数据库连接 LINGO命令脚本文件,LG4 (LONGO模型文件) LNG (LONGO模型文件) LTF (LONGO脚本文件) LDT (LONGO数据文件) LRP (LONGO报告文件),常用文件后缀,参考资料,优化建模与LINDO/LINGO软件,谢金星等,清华大学出版社,2005 最优化模型与实验,朱德通,同济大学出版社, 2003 现代优化计算方法,刑文训等,清华大学出版社,2005 网络优化,谢金星等,清华大学出版,2005 LINGO和EXCEL在数学建模中的应用,袁新生等,科学版社,2007,