LINGO软件的基本使用方法 - 图文(5)

2019-08-29 00:47

L(A1)?6,L(A2)?3,L(A3)?3;L(B1)?min{L(A1)?6,L(A2)?8,L(A3)?7}?10?L(A3)?7,L(B2)?min{L(A1)?5,L(A2)?6,L(A3)?4}?7?L(A3)?4;L(C1)?min{L(B1)?6,L(B2)?8}?15?L(B2)?8,L(C2)?min{L(B1)?7,L(B2)?9}?16?L(B2)?9,L(T)?min{L(C1)?5,L(C2)?6}?20?L(C1)?5.所以,S到T的最优行驶路线的路长为20。进一步分析以上求解过程,可以得到S到T的最优行驶路线的路线为S?A3?B2?C1?T.

上面这种计算方法在数学上称为动态规划(dynamic programming),是最优化的一个分支。 作为一个例子,我们用LINGO来解决最短路问题,我们可以编写如图3-22的LINGO程序。集合段定义的\(城市)是一个基本集合(元素通过枚举给出),L是起对应的属性变量(我们要求最短路长);“ROADS”(道路)是由CITIES导出的一个派生集合(请特别注意其用法),由于只有一部分城市之间由道路相连,所以不应该把它定义成稠密集合,我们进一步将其元素通过枚举给出,这就是一个稀疏集合,D是稀疏集合ROADS对应的属性变量(给定的距离)。

图3-22 最短路问题的模

从模型我们还可以看出:这个LINGO程序可以没有目标函数,这在LINGO中是允许的,可以用来找可行解(解方程组和不等式组)。此外,在数据段我们对L进行了赋值,但只有L(S)=0是已知的,所以后面的值为空(但位置必须留出来,即用逗号“,”一贯也不能少,否则回出错)。如果这个语句直接写成“L=0;”语法上看是对的,但其含义是L所有元素的取值全部为0,所以也会与题意不符。

从这个例子还可以看出,虽然集合CITIES中的元素不是数字,但当它以CITIES(i)的形式出现在循环中时,引用下标i却实际上仍是整数,也就是说i指的正是元素在集合中的位置(顺序),一般称为元素的索引(index)。我们在@FOR循环中的过滤条件里故意用了

21

一个函数:\(index)\其作用是返回一个元素在集合中是索引值,这里@(index)=1(即元素S在集合中的索引值为1),所以逻辑关系式\可以直接等价地写成\也是可以的.这里@index(s)实际上还是@index(CITIES,S)的简写,即返回S在集合CITIES中的索引值.

运行以上程序得到结果(图3-23).可以看出,S到T的最优行驶路线的路长为20(进一步分析以上求解过程,可以得到S到T的最优行驶路线的路线为S?A3?B2?C1?T.)

图3-23 最短路问题的结果

上面这个例子中定义稀疏集合ROADS的方法是将其元素通过枚举给出,有时候如果元素比较多,这还是太麻烦了,用起来不方便。LINGO提供了另一种定义稀疏集合的方法,这就是“元素过滤法”,能够从构成派生集合的父集合的笛卡儿积中的系统地过滤下来的一写真正需要的元素。请看下面的例子。

例3.6 某班8名同学准备分成4个调查队(每队两人)前往4个地区进行社会调查。假设这8名同学两两之间组队的效率如表3-5所示(由于对称性,只列出了严格上三角部分),问如何组队可以使总效率最高?

这是一个典型的匹配(matching)问题,把表3-5的效率矩阵记为BENEFIT(由于对称性,这个矩阵只有严格上三角部分共28个数取非零值)。用MATCH(Si,Sj)=1表示同学Si,Sj组成一队,而MATCH(Si,Sj)=0表示同学Si,Sj不组队。由于对称性,只需考虑i

min?{BENEFIT(I,J)?MATCH(I,J)};????????(14)I?Js.t.J?I或K?J(15)?{MATCH(J,K)}?1,I?1,2,34,??????????

MATCH(J,K)?{0,1}.??????????????????(16)表3-5同学两两之间组队的效率

22

学生 S1 S2 S3 S4 S5 S6 S7 S8 S1 一 S2 一 S3 一 S4 一 S5 一 S6 一 S7 一 9 一 一 一 一 一 一 3 4 2 1 5 6 1 7 3 5 2 1 一 4 4 2 9 2 一 一 1 5 5 2 一 一 一 8 7 6 一 一 一 一 2 3 一 一 一 一 一 4 模型输入 LINGO见图3-24,其中STUDENTS集合的元素列表“S1..S8”等价于写成“S1 S2 S3 S4 S5 S6 S7 S8”,它没有相关属性列表,只用于表示一个下标集合。我们应该特别注意,在挨批声集合“PAIRS”的定义中,增加了过滤条件,即逻辑关系式“&2#GT#&\意思是第2个父集合的索引值(用“&2”表示)大于第1个父集合的元素的索引值(用“&1”表示)。这样,‘‘PAIRS”中的元素就正好对应上面表3-5中是严格上三角部分的二维下标(共28个元素)。BENEFIT和MATCH都是这个集合PAIRS的属性。

图3-24 稀疏集合的例子

读者还应注意数据段对BENEFIT的赋值方式,体会我们前面提到的“LINGO是按照列的顺序对属性变量的元素进行赋值的”,在约束部分,过漉条件“J#EQ# I #OR #K#EQ# I”是由逻辑运算符“#OR#(或者)”连接的一个 复合的逻辑关系方式,连接由“#EQ#(等于)”表示的两个逻辑关系。由于“#OR#”的运算级别低于“#EQ#的”,所以这个逻辑式中没有必要使用括号指定运算次序。LINGO中的运算符及其优先级关系可以参见3.3.1节。

选择菜单命令“LINGO|Solve”运行这个程序,可以得到全局最优值为30。由于MATCH变量中多数为0我们这里练习一下如何更清晰地浏览最优解,选择菜单命令“LINGO|Solution\可以看到图3-25所示的对话框,在对话框中的\属性或行名)”里选择“Text(文本格式)\,并选择\Only只显示非零值)“选项,然后单击”OK“按钮,得到的正我们想看的关于最优解的非零分量的报告(如图3-26所示)。学生最佳的组队方式是:(1,8),(2,4),(3,7),(5,6)。

23

图3-25 解答报告对话框

图3-26 例3.6的解答结果

3.2.4 集合的使用小结

下面把 前面介绍的不同类型及其小结以下,表示在图3-27中

选择,我们归纳一下基本集合和派生集合的定义语法。基本集合的定义格式为(以下

语法中凡是在方括号“[]”中的内容,表示是可

集合 派生集合 基本集合 稀疏集合 稠密集合 元素列表法 元素过滤法 直接列举法 隐式列举法 选的项,即该项可以有也可以没有):

图3-27 集合的饿不同类型及其关系

setname[/member-list/][:attribute-list];

24

其中setname为定义的集合名,member-list为元素列表,attribute-list为属性列表 ,元素列表利用采用显示列举法。隐式列举发可以有几种不同格式,见表3-6。 类型 隐式列举格式 示例 示例集合表示的元素 数字型 1?n 1?5 1,2,3,4,5 字符-数字型 stringM..stringN car101…car208 car101 car102…car208 日期(星期)型 dayM…dayN MON…FRI MON,TUE,WED,THU,FRI 月份型 monthM…monthN OCT…JAN OCT,NOV,DEC,JAN 年份-月份型 monthYearM… OCT2001… OCT2001,NOV2001, monthYearN JAN2002 DEC2001,JAN2002 上面的语法还告诉我们元素列表 和属性列表都是可选的饿。当属性列表不在集合定义中出现时,这样的集合往往只是为了将来在程序中作为一个循环变量了来使用,或者作为构造更复杂的派生集合的负集使用(参见前面例3.6(匹配问题)中的集合STUDENTS,段以赋值语句的方式直接给出元素列表。例如,3.2.1节的模型(图3-14)的集合段和数据段可以分别改为

SETS:

QUARTERS:DEM,RP,INV; ENDSETS DATA:

QUARTERS DEM=1 40 2 60 3 75 4 25; !注意LINGO按列赋值的特点; ENDDATA

派生集合的一般定义格式为;

setname(parent-set-list)[/member-list/][:attribute-list];

其中与基本集合的定义相比较只是多了一个parent-set-list(父集合列表)。父集合列表中的集合(如set1,set2,?)称为派生集合setname的父集合,它们本身也可以是派生集合。当元素列表(member-list)不在集合顶和中出现时,还可以在程序的数据段以赋值语句的方式给出元素列表;若在程序的数据段也不以赋值语句的方式给出元素列表,则认为定义的时稠密集合,即父集合中所有元素的有序组合(笛卡儿积)都是setname的元素(利用过滤条件)两种不同方式,请参看前面的介绍。

3.3 运算符和函数

3.3.1 运算符及其优先级

在前面的很多例子里,我们陆续用到了一些运算符,现在归纳一下LINGO 中的三运算符:算术运算符,逻辑运算符和关系运算符。

算术运算符实际上就是加、减、乘方等数学运算(即数与数之间的运算,运算结果也是数)。LINGO 中的算术运算符有以下5种:

+(加法), -(减法或负号),*(乘法),/(除法),^(求幂).

逻辑运算符就是结果只有\真(TRUE)\和\假(FALSE)”两个值(称为\逻辑值\的运

25


LINGO软件的基本使用方法 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:甲级单位编制磁敏三极管项目可行性报告(立项可研+贷款+用地+201

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: