lingo入门教程(1).ppt
《lingo入门教程(1).ppt》由会员分享,可在线阅读,更多相关《lingo入门教程(1).ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 . LINGO入门入门LINGOLINGO的界面的界面LINGO软件的主窗口(用软件的主窗口(用户界面),所有其他窗口户界面),所有其他窗口都在这个窗口之内。都在这个窗口之内。 模型窗口(模型窗口(Model Window),用于输入),用于输入LINGO优化模型(即优化模型(即LINGO程序)。程序)。 状态行(最左边显状态行(最左边显示示“Ready”,表示,表示 “准备就绪准备就绪”)当前时间当前时间 当前光标当前光标的位置的位置 一个简单的一个简单的LINGO程序程序例例 直接用LINGO来解如下二次规划问题: 40,322100. .123 . 02779821212122212
2、121为整数xxxxxxtsxxxxxxMax输入窗口如下:输入窗口如下:程序语句输入的备注:程序语句输入的备注:LINGO总是根据总是根据“MAX=”或或“MIN=”寻找目标函数寻找目标函数,而除注释语句和而除注释语句和TITLE语句外的其他语句都是约束条语句外的其他语句都是约束条件,因此件,因此语句的顺序并不重要语句的顺序并不重要 。限定变量取整数值的语句为限定变量取整数值的语句为“GIN(X1)”和和“GIN(X2)”,不可以写成,不可以写成“GIN(2)”,否则,否则LINGO将把这个模型看成没有整数变量。将把这个模型看成没有整数变量。LINGO中函数一律需要以中函数一律需要以“”开头
3、开头,其中整型变量,其中整型变量函数(函数(BIN、GIN)和上下界限定函数()和上下界限定函数(FREE、SUB、SLB),),BIN函数在函数在01规划中有广泛应规划中有广泛应用用BND( L,X,U)表示表示L=X=U输出结果:输出结果:运行菜单命令运行菜单命令“LINGO|Solve” 最优整数解最优整数解X=(35,65)最大利润最大利润=11077.5 一个简单的一个简单的LINGO程序程序LINGO的基本用法的几点的基本用法的几点注意注意事项事项 LINGO中不区分大小写字母;变量和行名可以超过8个字符,但不能超过32个字符,且必须以字母开头。用LINGO解优化模型时已假定所有变
4、量非负(除非用限定变量取值范围的函数free或sub或slb另行说明)。变量可以放在约束条件的右端(同时数字也可放在约束条件的左端)。但为了提高LINGO求解时的效率,应尽可能采用线性表达式定义目标和约束(如果可能的话)。语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编写程序时应注意模型的可读性。例如:一行只写一个语句,按照语句之间的嵌套关系对语句安排适当的缩进,增强层次感。以感叹号开始的是说明语句(说明语句也需要以分号结束))。2 . 在在LINGO中使用集合中使用集合基本集合与派生集合基本集合与派生集合 例例 建筑工地的位置建筑工地的位置(用平面坐标用平面坐标a, b表示,距离
5、单位:表示,距离单位:公里公里)及水泥日用量及水泥日用量d(吨吨)下表给出。有两个临时料场位下表给出。有两个临时料场位于于P (5,1), Q (2, 7),日储量各有日储量各有20吨。从吨。从A, B两料场分别两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有多大?新的料场应建在何处,节省的吨公里数有多大?a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611建立模型建立模型记工地的位置为记工地的位置为 ,水泥日用量为,水泥日用量为 ;料场;料场位置为位置
6、为 ,日储量为,日储量为 ;从料场;从料场 向工地向工地 的的运送量为运送量为 。 ),(iiba6, 1,idi),(jjyx2 , 1,jejjiijc 2622112161MIN1s.t.,1,2,62,1,23ijjijijiijijijjifcxaybcdicejL使用现有临时料场时,决策变量只有使用现有临时料场时,决策变量只有 (非负),所以这是(非负),所以这是LP模型;当为新模型;当为新建料场选址时决策变量为建料场选址时决策变量为 和和 ,由于目标函数,由于目标函数 对对 是非线性的,是非线性的,所以在新建料场时是所以在新建料场时是NLP模型。先解模型。先解NLP模型,而把现有
7、临时料场的位置作模型,而把现有临时料场的位置作为初始解告诉为初始解告诉LINGO。 ijcijcjjyx ,fjjyx ,本例中集合的概念本例中集合的概念利用集合的概念,可以定义需求点利用集合的概念,可以定义需求点DEMAND和供应点和供应点SUPPLY两个集合,分别有两个集合,分别有6个和个和2个元素个元素(下标下标)。但决。但决策变量策变量(运送量运送量) 与集合与集合DEMAND和集合和集合SUPPLY都都有关系的。该如何定义这样的属性?有关系的。该如何定义这样的属性?ijc集合的属性相当于以集合的元素为下标的数组。这里的集合的属性相当于以集合的元素为下标的数组。这里的 相当于二维数组。
8、它的两个下标分别来自集合相当于二维数组。它的两个下标分别来自集合DEMAND和和SUPPLY,因此可以定义一个由二元对组,因此可以定义一个由二元对组成的新的集合,然后将成的新的集合,然后将 定义成这个新集合的属性。定义成这个新集合的属性。ijcijc输入程序输入程序 定义了三个集合,其中定义了三个集合,其中LINK在前在前两个集合两个集合DEMAND 和和SUPPLY的的基础上定义基础上定义表示集合表示集合LINK中的元素就是集合中的元素就是集合DEMAND 和和SUPPLY的元素组合成的有序二元组,的元素组合成的有序二元组,从数学上看从数学上看LINK是是DEMAND 和和SUPPLY的笛的
9、笛卡儿积,也就是说卡儿积,也就是说LINK=(S,T)|SDEMAND,TSUPPLY因此,其属性因此,其属性C也就是一个也就是一个6*2的矩阵(或者的矩阵(或者说是含有说是含有12个元素的二维数组)。个元素的二维数组)。LINGO建模语言也称为矩阵生成器(建模语言也称为矩阵生成器(MATRIX GENERATOR)。类似)。类似DEMAND 和和SUPPLY直接把元素列举出直接把元素列举出来的集合,称为来的集合,称为基本集合基本集合(primary set),而把而把LINK这种基于其它这种基于其它集合而派生出来的二维或多维集合称为集合而派生出来的二维或多维集合称为派生集合派生集合(deri
10、ved set)。由于是由于是DEMAND 和和SUPPLY生成了派生集合生成了派生集合LINK,所以,所以DEMAND 和和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;输入程序输入程序 定义目标和约束,与前例的方法是类似(这里包含了派生集合
11、),请特别注意进一步体会集合函数SUM和FOR的用法。由于新建料场的位置理论上讲可以是任意的,所以在约束的最后(模型的“END”语句上面的一行)用free函数取消了变量X、Y的非负限制在程序开头用TITLE语句对这个模型取了一个标题“LOCATION PROBLEM;并且对目标行(OBJ)和两类约束(DEMAND_CON、SUPPLY_CON)分别进行了命名(请特别注意这里约束命名的特点)。 解答解答:运行菜单命令运行菜单命令“LINGO|Solve” 局部最优解局部最优解X(1)=7.249997, X(2)=5.695940,Y(1)=7.749998, Y(2)=4.928524,C(略
12、),(略),最小运量最小运量=89.8835(吨公里吨公里)。 问题问题:最小运量最小运量89.8835是不是全局最优是不是全局最优 是用是用“LINGO|Options”菜单命令打开选项对话框,在菜单命令打开选项对话框,在“Global Solver”选项卡上选择选项卡上选择“Use Global Solver”, 激激活全局最优求解程序。活全局最优求解程序。问题问题:最小运量最小运量89.8835是不是全局最优是不是全局最优 为减少计算工作量,对为减少计算工作量,对X,Y的取值再做一些限制。虽然理论上的取值再做一些限制。虽然理论上新建料场的位置可以是任意的,但显然最佳的料场位置不应该离新建
13、料场的位置可以是任意的,但显然最佳的料场位置不应该离工地太远,至少不应该超出现在工地太远,至少不应该超出现在6个工地所决定的坐标的最大、个工地所决定的坐标的最大、最小值决定的矩形之外,即最小值决定的矩形之外,即: 0.5=x=8.75, 0.75=y=7.75. 可以用可以用bnd函数加函数加上这个条件取代模型上这个条件取代模型END上面的行,运行上面的行,运行NLP模型,全局最优模型,全局最优求解程序花费的时间求解程序花费的时间仍然很长,运行仍然很长,运行27分分35秒时人为终止求解秒时人为终止求解(按下按下“Interrupt Solver”按钮按钮)得到左得到左边模型窗口和全局求边模型窗
14、口和全局求解器的状态窗口解器的状态窗口此时目标函数值的下界(此时目标函数值的下界(Obj Bound=85.2638)与目前得到的最好)与目前得到的最好的可行解的目标函数值(的可行解的目标函数值(Best Obj=85.2661)相差已经非常小,可)相差已经非常小,可以认为已经得到了全局最优解。以认为已经得到了全局最优解。 计算结果计算结果 012345678901234567835476112016工地与料场示意图工地与料场示意图 : “*”表示料场,表示料场,“+”表示工地表示工地 可以认为是模型的最后结果可以认为是模型的最后结果 附注:如果要把料厂P(5, 1), Q (2, 7)的位置
15、看成是已知并且固定的,这时是LP模型。只需要把初始段的“X Y =5,1,2,7;”语句移到数据段就可以了。此时,运行结果告诉我们得到全局最优解(变量C的取值这里略去),最小运量136.2275(吨公里)。稠密集合与稀疏集合稠密集合与稀疏集合 包含了两个基本集合构成的所有二元有序对的派生集合包含了两个基本集合构成的所有二元有序对的派生集合称为称为稠密集合稠密集合(简称稠集简称稠集)。有时候,在实际问题中,一。有时候,在实际问题中,一些属性些属性(数组数组) 只在笛卡儿积的一个真子集合上定义,这只在笛卡儿积的一个真子集合上定义,这种派生集合称为种派生集合称为稀疏集合稀疏集合(简称疏集简称疏集)。
16、例例 (最短路问题最短路问题) 在纵横交错的公路网中,货车司机希望找到一条在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路从一个城市到另一个城市的最短路. 下图表示的是公路网下图表示的是公路网, 节点表节点表示货车可以停靠的城市示货车可以停靠的城市,弧上的权表示两个城市之间的距离弧上的权表示两个城市之间的距离(百公百公里里). 那么那么,货车从城市货车从城市S出发到达城市出发到达城市T,如何选择行驶路线如何选择行驶路线,使所经使所经过的路程最短过的路程最短?STA1 A2 A3 B1 B2 C1 C2 633665874678956STA1 A2 A3 B1 B2 C1
17、 C2 633665874678956分析分析 假设从假设从S到到T的最优行驶路线的最优行驶路线 P 经过城市经过城市C1, 则则P中从中从S到到C1的子路的子路也一定是从也一定是从S到到C1的最优行驶路线的最优行驶路线; 假设假设 P 经过城市经过城市C2, 则则P中从中从S到到C2的子路也一定是从的子路也一定是从S到到C2的最优的最优行驶路线行驶路线. 因此因此, 为得到从为得到从S到到T的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Ck(k=1,2)的最优行驶路线的最优行驶路线, 就可以方便地得到从就可以方便地得到从S到到T的最优行驶路线的最优行驶路线. 同样同样,为
18、了求出从为了求出从S到到Ck(k=1,2)的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Bj(j=1,2)的最优行驶路线的最优行驶路线; 为了求出从为了求出从S到到Bj(j=1,2)的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Ai (i=1,2,3)的最优行驶路线的最优行驶路线. 而而S到到Ai(i=1,2,3)的最优行驶路线是很容的最优行驶路线是很容易得到的易得到的(实际上实际上, 此例中此例中S到到Ai(i=1,2,3)只有唯一的道路只有唯一的道路) 分析分析 STA1 A2 A3 B1 B2 C1 C2 633665874678956此例中可把从
19、S到T的行驶过程分成4个阶段,即 SAi (i=1,2或3), Ai Bj(j=1或2), Bj Ck(k=1或2), Ck T. 记d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之间没有道路直接相连,则可以认为直接距离为),用L(X)表示城市S到城市X的最优行驶路线的路长: 0;1min,.2YXL SL XL Yd Y XXS本例的本例的LINGO求解求解“CITIES”(城市城市):一个基本集合一个基本集合(元素通过枚举给出元素通过枚举给出)L:CITIES对应的属性变量对应的属性变量(我们要求的最短路长我们要求的最短路长) “ROADS”(道路):由CITIES导出的一个派生
20、集合(请特别注意其用法),由于只有一部分城市之间有道路相连,所以不应该把它定义成稠密集合,将其元素通过枚举给出,这就是一个稀疏集合。 D:稀疏集合ROADS对应的属性变量(给定的距离)本例的计算本例的计算 1231123321233112221221216,3,3;min6,8,7107;min5,6,474;min6,8158;min7,9169;min5,6205.L AL AL AL BL AL AL AL AL BL AL AL AL AL CL BL BL BL CL BL BL BL TL CL CL CSTA1 A2 A3 B1 B2 C1 C2 633665874678956所
21、以, 从S到T的最优行驶路线的路长为20. 进一步分析以上求解过程, 可以得到从S到T的最优行驶路线为S A3 B2 C1 T.这种计算方法在数学上称为动态规划(Dynamic Programming) 本例的本例的LINGO求解求解“CITIES”(城市城市):一个基本集合一个基本集合(元素通过枚举给出元素通过枚举给出)L:CITIES对应的属性变量对应的属性变量(我们要求的最短路长我们要求的最短路长) “ROADS”(道路):由CITIES导出的一个派生集合(请特别注意其用法),由于只有一部分城市之间有道路相连,所以不应该把它定义成稠密集合,将其元素通过枚举给出,这就是一个稀疏集合。 D:
22、稀疏集合ROADS对应的属性变量(给定的距离)本例的本例的LINGO求解求解从模型中还可以看出:这个从模型中还可以看出:这个LINGO程序可以没有目标程序可以没有目标函数,这在函数,这在LINGO中,可以用来找可行解中,可以用来找可行解(解方程组和解方程组和不等式组不等式组)。在数据段对在数据段对L进行赋值,只有进行赋值,只有L(S)=0已已知,后面的值为空知,后面的值为空(但位置必须留出来,但位置必须留出来,即逗号即逗号“,”一个也不能少,否则会出一个也不能少,否则会出错错)。如果这个语句直接写成。如果这个语句直接写成“L=0;”,语法上看也是对的,但其含义是语法上看也是对的,但其含义是L所
23、有所有元素的取值全部为元素的取值全部为0,所以也会与题意,所以也会与题意不符。不符。本例的本例的LINGO求解求解虽然集合虽然集合CITIES中的元素不是数字,但当中的元素不是数字,但当它以它以CITIES(I)的形式出现在循环中时,引的形式出现在循环中时,引用下标用下标I却实际上仍是正整数,也就是说却实际上仍是正整数,也就是说I指指的正是元素在集合中的位置的正是元素在集合中的位置(顺序顺序),一般称,一般称为元素的索引为元素的索引(INDEX)。在在for循环中的过滤条件里用了一个函数循环中的过滤条件里用了一个函数“index”, 其作用是返回一个元素在集合其作用是返回一个元素在集合中的索引
24、值,这里中的索引值,这里index(S)=1(即元素即元素S在在集合中的索引值为集合中的索引值为1),所以逻辑关系式,所以逻辑关系式“I#GT#index(S)”可以可以直接等价地可以可以直接等价地写成写成“I#GT#1” 。这里。这里index(S)实际上还实际上还是是index(CITIES,S)的简写,即返回的简写,即返回S在集在集合合CITIES中的索引值。中的索引值。本例的本例的LINGO求解结果求解结果从S到T的最优行驶路线的路长为20(进一步分析,可以得到最优行驶路线为S A3 B2 C1 T)。 本例中定义稀疏集合本例中定义稀疏集合ROADS的方法是将其元素通过枚举的方法是将其
25、元素通过枚举给出,有时如果元素比较多,用起来不方便。另一种定给出,有时如果元素比较多,用起来不方便。另一种定义稀疏集合的方法是义稀疏集合的方法是“元素过滤元素过滤”法,能够从笛卡儿积法,能够从笛卡儿积中系统地过滤下来一些真正的元素。中系统地过滤下来一些真正的元素。例例 某班某班8名同学准备分成名同学准备分成4个调查队个调查队(每队两人每队两人)前往前往4个个地区进行社会调查。这地区进行社会调查。这8名同学两两之间组队的效率如名同学两两之间组队的效率如下表所示下表所示(由于对称性,只列出了严格上三角部分由于对称性,只列出了严格上三角部分),问,问如何组队可以使总效率最高?如何组队可以使总效率最高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- lingo 入门教程
限制150内