《数学建模与lingo软件应用》由会员分享,可在线阅读,更多相关《数学建模与lingo软件应用(55页珍藏版)》请在金锄头文库上搜索。
1、数学模型与数学模型与lingo软件软件数学模型与数学模型与数学模型与数学模型与lingolingo软件软件软件软件西南交通大学数学系西南交通大学数学系西南交通大学数学系西南交通大学数学系需要掌握的几个重要方面需要掌握的几个重要方面掌握集合(SETS)的应用;正确阅读求解报告; 正确理解求解状态窗口; 学会设置基本的求解选项(OPTIONS) ;应用实例LINDO和LINGO软件能求解的优化模型LINGO 8.0有两种命令模式Windows 模式, 通过下拉式菜单命令驱动LINGO 运行命令行(Command-Line) 模式,仅在命令窗口下操作与LINDO 相比,LINGO 软件主要具有两大优
2、点1、除具有LINDO 的全部功能外,还可用于求解非线性 规划问题,包括非线性整数规划问题2、LINGO 包含了内置的建模语言,允许以简练、直观 的方式描述较大规模的优化问题,模型中所需的数据可 以以一定格式保存在独立的文件中在在LINGO中使用中使用LINDO模型模型LINGO的界面的界面LINGO软件的主窗口(用软件的主窗口(用 户界面),所有其他窗口户界面),所有其他窗口 都在这个窗口之内。都在这个窗口之内。模型窗口(模型窗口(Model Window),用于输入),用于输入 LINGO优化模型(即优化模型(即 LINGO程序)。程序)。状态行(最左边显状态行(最左边显 示示“Ready
3、”,表示,表示 “准备就绪准备就绪”)当前时间当前时间当前光标当前光标 的位置的位置工具栏工具栏File|Ope n (F3)打 开 文 件File|Print (F7)打 印 文 件Edit|Cop y (Ctrl+C)复制Edit|Und o (Ctrl+Z)取 消 操 作Edit|Fin d (Ctrl+F)查找LINGO|Solution (Alt+O)显示解答Edit|Match Parenthesis (Ctrl+P)匹配括号LINGO|Options (Ctrl+I)选项设置Window|Close All (Alt+X)关闭所有窗口 Help| Conte nts (F1 )
4、在线 帮助File|New (F2)新建文件File|Save (F4)保存文件Edit|Cut (Ctrl+X)剪切Edit|Past e (Ctrl+V)粘贴Edit|Redo (Ctrl+Y)恢复操作Edit | Go To Line (Ctrl+T)定位某行LINGO|Sol ve (Ctrl+S)求解模型LINGO|Pictur e (Ctrl+K)模型图示Window|Send to Back (Ctrl+B)窗口后置Window|Til e (Alt+T) 平铺窗口上下文 相关的 帮助LP问题在lindo和lingo中不同的输入形式Lindo:max 2x+3y st 4x+3y
5、(即=,大于 等于)逻辑逻辑运运算符算符:#AND#(与),#OR#(或),#NOT#(非), #EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大 于等于),#LT#(小于),#LE#(小于等于)。结果只有“真” (1)和“假”(0)两个值LINGO 函数一览 (1)LINGO 函数一览 (2)LINGO 函数一览 (3)LINGO 函数一览 (4)LINGO 函数一览 (5)LINGO 函数一览 (6)smax(x1,x2,xn)给定一个直角三角形,求包含该三角形的最小正方形for 函数产生序列1,4,9,16,25sum 函函数数求向量5,1,3,4,6,10 前5个数的
6、和该函数用来产生对集成员的约 束。基于建模语言的标量需要 显式输入每个约束,不过for 函数允许只输入一个约束,然 后LINGO自动产生每个集成员 的约束该函数返回遍历指定的集成 员的一个表达式的和min和max求向量5,1,3,4,6,10前5个数最小值,后3个数最大值返回指定的集成员的一个表达式的最小值或最大值通过文件输入输出数据通过文件输入输出数据 通过文件输入输出数据可以将通过文件输入输出数据可以将LINGO程序和程序和 程序处理的数据分离开来。程序处理的数据分离开来。 “程序和数据的分离程序和数据的分离”是结构化程序设计、面是结构化程序设计、面 向对象编程的基本要求。向对象编程的基本
7、要求。 实际问题通常需要处理大规模的实际数据,实际问题通常需要处理大规模的实际数据, 而这些数据通常都是在其它应用系统中生成而这些数据通常都是在其它应用系统中生成 的,或者已经存放在其它应用系统中的某个的,或者已经存放在其它应用系统中的某个 文件或数据库中。文件或数据库中。 LINGO计算的结果需要以文件方式提供给其计算的结果需要以文件方式提供给其 它应用系统使用。它应用系统使用。1. 通过通过WINDOWS剪贴板传递数据剪贴板传递数据 粘贴命令 (粘贴命令 ( Edit|Paste ) 特殊粘贴命令(特殊粘贴命令(Edit|Paste Special )粘贴命令 (粘贴命令 ( Edit|P
8、aste ) 将将WORD文件或其他外部文件中的数据拷贝到文件或其他外部文件中的数据拷贝到Windows剪剪 贴板贴板 在在LINGO程序中直接粘贴到需要的地方程序中直接粘贴到需要的地方步骤步骤:注意注意: 粘贴的数据保持了粘贴的数据保持了WORD表格的风格表格的风格,且且LINGO能够正常能够正常 识别甚至编辑其字体等。识别甚至编辑其字体等。 由于由于LINGO对集合的属性是按列赋值的,所以在外部文对集合的属性是按列赋值的,所以在外部文 件中的数据与实际需要复制的数据可能发生行列颠倒件中的数据与实际需要复制的数据可能发生行列颠倒 的情况,需进行调整。的情况,需进行调整。 类似的方法也可以将类
9、似的方法也可以将LINGO程序中的数据复制到其他外程序中的数据复制到其他外 部文件中。部文件中。2. 通过文本文件传递数据通过文本文件传递数据 通过文本文件输入数据通过文本文件输入数据 FILE(filename) 通过文本文件输出数据通过文本文件输出数据 TEXT(filename)通过文本文件输入数据通过文本文件输入数据 FILE函数通常可以在集合段和数据段使用,函数通常可以在集合段和数据段使用, 但不允许嵌套使用。但不允许嵌套使用。 调用格式:调用格式:FILE(filename) filename为存放数据的文件名(可以包含完整的为存放数据的文件名(可以包含完整的 路径名,或表示在当前
10、目录下寻找这个文件)路径名,或表示在当前目录下寻找这个文件) 数据文件中记录之间必须用数据文件中记录之间必须用“”分开分开MODEL: SETS: MYSET / FILE(myfile.txt) / : FILE(myfile.txt); ENDSETS MIN = SUM( MYSET( I): SHIP( I) * COST( I); FOR( MYSET( I): CON1 SHIP( I) NEED( I); CON2 SHIP( I) 1基本集合与派生集合基本集合与派生集合例 建筑工地的位置例 建筑工地的位置(用平面坐标用平面坐标a, b表示,距离单位:表示,距离单位: 公里公里)
11、及水泥日用量及水泥日用量d(吨吨)下表给出。有两个临时料场位下表给出。有两个临时料场位 于于P (5,1), Q (2, 7),日储量各有日储量各有20吨。从吨。从A, B两料场分别两料场分别 向各工地运送多少吨水泥,使总的吨公里数最小。两个向各工地运送多少吨水泥,使总的吨公里数最小。两个 新的料场应建在何处,节省的吨公里数有多大?新的料场应建在何处,节省的吨公里数有多大?1167453d7.756.554.750.751.25b7.2535.750.58.751.25a建立模型建立模型记工地的位置为记工地的位置为,水泥日用量为,水泥日用量为;料场;料场 位置为位置为,日储量为,日储量为;从料
12、场 向工地的;从料场 向工地的 运送量为。运送量为。),(iiba6, 1,L=idi),(jjyx2 , 1,=jejjiijc()()( )( )( )2622112161MIN1s.t.,1,2,62,1,23ijjiji jiiji jijj ifcxayacdicej=+=L使用使用现现有有临临时时料场料场时,时,决策决策变量变量只只有(非有(非负负),所以这),所以这是是LP模型模型;当当为为新新 建料场选址建料场选址时时决策决策变量变量为为和和,由由于于目目标标函函数数 对对是是非线性的,非线性的, 所以在所以在新建料场新建料场时时是是NLP模型。模型。先先解解NLP模型,模型,
13、而把现而把现有有临临时时料场料场的位置的位置作作 为初始为初始解解告诉告诉LINGO。ijcijcjjyx ,fjjyx ,输入程序输入程序定义定义了三了三个个集合集合,其,其中中LINK在前在前 两两个个集合集合DEMAND 和和SUPPLY的的 基础基础上定义上定义表示表示集合集合LINK中中的的元素元素就就是集合是集合DEMAND 和和SUPPLY的的元素组元素组合成合成的有序的有序二元组二元组, 从从数学数学上上看看LINK是是DEMAND 和和SUPPLY的的 笛卡儿积笛卡儿积,也也就就是是说说 LINK=(S,T)|SDEMAND,TSUPPLY 因因此此,其,其属属性性C也也就就
14、是是一一个个6*2的的矩阵矩阵(或者或者 说说是是含含有有12个个元素元素的的二维二维数数组组)。)。LINGO建建模模语言语言也也称称为为矩阵矩阵生生成成器(器(MATRIX GENERATOR)。类)。类似似DEMAND 和和SUPPLY直接直接把元素把元素列列举举 出出来来的的集合集合,称称为为基基本本集合集合(primary set),而把而把LINK这这种种基基于其于其 它它集合集合而而派生派生出出来来的的二维或二维或多多维维集合集合称称为为派生派生集合集合(derived set)。由由于于是是DEMAND 和和SUPPLY生生成成了了派生派生集合集合LINK,所以,所以 DEMA
15、ND 和和SUPPLY 称称为为LINK的的父父集合集合。输入程序输入程序初始段INGO对数据是按列赋值的语句的实际赋值顺序是 X=(5,2), Y=(1,7), 而不是 X=(5,1), Y=(2,7) 等价写法: “X=5,2; Y=1,7;”同理,数据段中对常数数组A,B的赋值语句也可以写成 A, B=1.25 1.25 8.75 0.75 0.5 4.75 5.75 5 3 6.5 7.25 7.75;输入程序输入程序定义目标和约束,与前例的方法是类似(这里 包含了派生集合),请特别注意进一步体会集 合函数SUM和FOR的用法。由于新建料场的位置理论上讲可以是任意 的,所以在约束的最后
16、(模型的“END”语句上 面的一行)用free函数取消了变量X、Y的非 负限制在程序开头用TITLE语句 对这个模型取了一个标题 “LOCATION PROBLEM;并且对目标 行(OBJ)和两类约束 (DEMAND_CON、 SUPPLY_CON)分别进行 了命名(请特别注意这里约 束命名的特点)。局部最优解 X(1)=7.249997, X(2)=5.695940, Y(1)=7.749998, Y(2)=4.928524, (略),最小运量 =89.8835(吨公里)NLP中局部最优解不不一一定定就是全局最优解,在 help中有这样的叙 述: “Thus, when a nonlinear model is solved, we say the solution is merely a local optimum, and