lingo集合性质中的集怎么处理?这个问题该如何求解?

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
如何使用LINGO软件
下载积分:10
内容提示:如何使用LINGO软件
文档格式:PPT|
浏览次数:263|
上传日期: 15:11:16|
文档星级:
全文阅读已结束,如果下载本文需要使用
 10 积分
下载此文档
该用户还上传了这些文档
如何使用LINGO软件
关注微信公众号LINGO入门 当然,还要加上变量的非负约束,构成了这个问题的模型(可用看出是LP模型)。 如果利用数组的概念,这个模型是比较容易建立的。记4个季度组成集合QUARTERS={1,2,3,4},它们就是上面数组的下标集合,而数组DEM,RP,OP,INV对集合QUARTERS中的每个元素1,2,3,4分别对应于一个值。LINGO正是充分利用了这种数组及其下标的关系,引入了“集合”及其“属性”的概念,把QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP,INV称为该集合的属性(即定义在该集合上的属性)。表2.1清楚地列出了集合元素及其属性所确定的所有变量。 表2.1 集合元素及集合的属性确定的所有变量 集合QUARTERS的元素 定义在集合QUARTERS上的属性 DEM RP OP INV 1 DEM(1) RP(1) OP(1) INV(1) 2 DEM(2) RP(2) OP(2) INV(2) 3 DEM(3) RP(3) OP(3) INV(3) 4 DEM(4) RP(4) OP(4) INV(4) 下面我们看看在LINGO中是如何定义集合及其属性的。例2的LP模型在LINGO中的一个典型输入方式见图2-1。我们可以看到这个输入以“MODEL:”开始,以“END”结束,它们之间由语句组成,可以分成三个部分:
图2-1 例2.1的LINGO优化模型 (1) 集合定义部分(从“SETS:”到“ENDSETS”):定义集合及其属性,语句“QUARTERS/1,2,3,4/:DEM,RP,OP,INV;”就是定义了上面所说的集合QUARTERS={1,2,3,4},以及对应于该集合的属性DEM,RP,OP,INV,其结果正是定义了表1所列出的16个变量名(并不一定都是决策变量,如下面马上就看到DEM对应的4个变量是已知的)。 (2) 数据输入部分(从“DATA:”到“ENDDATA”):“DEM=40,60,75,25;”给出常量DEM(给定的需求量)的值,即DEM(1)=40,DEM(2)=60,DEM(3)=75,DEM(4)=25。 (3) 其他部分:给出优化目标和约束。
目标函数(“MIN=”后面所接的表达式)是用求和函数“@SUM(集合(下标):关于集合的属性的表达式)”的方式定义的,这个函数的功能是对语句中的冒号“:”后面的表达式,按照冒号前面的集合指定的下标(元素)进行求和。 9 LINGO入门 本例中目标函数也可以等价地写成“@SUM(QUARTERS(i): 400*RP(i)+450*OP(i)+20*INV(i))”,这里“@SUM”相当于求和符号“∑”,而“QUARTERS(i)”相当于“i∈QUARTERS”的含义(请与目标函数的数学表达式(2.1)比较一下,你会发现它们几乎是一样的!)只是由于本例中目标函数对集合QUARTERS的所有元素(下标)都要求和,所以我们在图2-1的相应语句中可以将下标i省去。
约束是用循环函数“@FOR(集合(下标):关于集合的属性的约束关系式)”的方式定义的,意思是对冒号“:”前面的集合的每个元素(下标),冒号“:”后面的约束关系式都要成立。我们先看能力限制(2.2),即每个季度正常的生产能力是40条帆船,这正是语句“@FOR(QUARTERS(I):RP(I)<40);”的含义。由于对所有元素(下标I),约束的形式是一样的,所以也可以象上面定义目标函数时一样,将下标I省去,即这个语句可以简化成“@FOR(QUARTERS:RP1;“#GT#”是逻辑运算符,意思是“大于(greater than的字首字母缩写)”。
现在运行菜单命令“LINGO|Solve (Ctrl+S)”,可以得到图2-2所示的解答报告,全局最优解RP=(40,40,40,25),OP=(0,10,35,0),最小成本=78450。
下面小结一下LINGO模型最基本的组成要素。LINGO中建立的优化模型除了上面例子给出的三大部分语句外,还可以包括一个“初值设定(INIT)”部分;此外,从LINGO 9.0开始,还可以增加一个“计算(CALC)”部分。因此,一般来说,LINGO中建立的优化模型可以由5个部分组成,或称为5段(section):
(1)集合段(SETS):这部分要以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量(SET)及其元素(member,含义类似于数组的下标)和属性(attribute,含义类似于数组)。如上例中用语句“QUARTERS/1,2,3,4/:DEM,RP,OP,INV;”定义集合QUARTERS={1,2,3,4},以及对应于该集合的属性DEM,RP,OP,INV(这些量的具体数值如果是常量,则可在数据段输入;如果是未知数,则可在初始段输入初值)。自然,当QUARTERS的元素数目不是4而是1000,可以如下定义QUARTERS集合:
QUARTERS/1..1000/:DEM,RP,OP,INV; “1..1000”的意思就是从1到1000的所有整数。
(2)目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分并没有段的开始和结束标记,因此实际上就是除其他4个段(都有明确的段标记)外的LINGO模型。
(3)数据段(DATA):这部分要以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性(数组)输入必要的常数数据。格式为:
attribute(属性)=value_list(常数列表); 常数列表(value_list)中数据之间可以用逗号“,”分开,也可以用空格分开(回车的作用也等价于一个空格)。
10 LINGO入门
在LINGO模型中,如果想在运行时才对参数赋值,可以在数据段使用输入语句。但这仅用于对单个变量赋值,而不能用于属性变量(数组),输入语句格式为:“变量名=?;”。
例2.1的求解结果报告窗口
(4)初始段(INIT):这部分要以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性(数组)定义初值(因为求解算法一般都是迭代算法,所以用户如果能给出一个比较好的迭代初值,对提高算法的计算效率是有益的)。定义初值的格式为:
attribute(属性)=value_list(常数列表); 这与数据段中的用法是类似的。
(5)计算段(CALC):这部分要以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行“预处理”(这种处理是在数据段的数据输入完成以后、LINGO开始正式求解模型之前进行的)。注意,在计算段中,语句是顺序执行的。此外,在计算段中只能直接使用赋值语句,而不能包含需要经过解方程或经过求解优化问题以后才能决定的变量。 2.2
基本集合与派生集合
例2.2 建筑工地的位置(用平面坐标a,b表示,距离单位:km)及水泥日用量d(单位:t)由表2.2给出。目前有两个临时料场位于P(5,1),Q(2,7),日储量各有20t。求从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有多大?
11 LINGO入门
记工地的位置为(ai,bi)水泥日用量为di,i=1,2,…,6;料场位置为(xj,yj),日储量为ej,j=1,2;从料场j向工地i的运送量为cij(非负)。 表2.2 工地的位置(a,b)及水泥日用量的d
1 1.25 1.25 3 2 8.75 0.75 5 263 0.5 4.75 4 4 5.75 5 7 5 3 6.5 6 6 7.25 7.75 11 这个优化问题的数学规划模型为
minf???cij(xj?ai)2?(yj?bi)2 j?1i?1
?cj?162ij?di,i?1,...,6
?ci?1ij?ej,j?1,2
当使用现有的临时料场时,决策变量只有cij,所以这是个LP模型;当为新建料场选址时,决策变量为cij和xj,yj,由于目标函数f对xj,yj是非线性的,所以在新建料场时是NLP模型。我们先解NLP模型,而把现有临时料场的位置作为初始解告诉LINGO。
我们前面说过,集合的属性相当于以集合的元素为下标的数组。显然可以定义需求点demand和供应点supply两个集合,分别有6个和2个元素(下标)。而这里的cij相当于二维数组,它的两个下标分别来自集合demand和supply,这就启发我们可以利用集合demand和supply,定义一个由二元数对组成的新的集合,然后将cij定义成这个新集合的属性。
12 LINGO入门 图2-3 例2.2的NLP优化模型
具体的输入程序如图2-3所示。我们在集合段中定义了三个集合,其中demand和supply集合的属性的含义与上例2.1类似,而link则是在前两个集合的基础上定义的一个新集合。语句 link(demand,supply):c; 表示集合link中的元素就是集合demand和supply的元素组合成的有序二元组,从数学上看link就是demand和supply的笛卡儿积,也就是说 link={(s,t)|s∈demand,t∈supply } 因此,其属性c就是一个6×2的矩阵(或者说是含有12个元素的二维数组)。
类似于demand和supply这种直接把元素列举出来的集合,称为基本集合(primary set,也可译为“原始集合”),而把link这种基于其他集合而派生出来的二维或多维集合称为派生集合(derived set,也可译为“导出集合”),由于是demand和supply生成了派生集合link,所以demand和supply称为link的父集合。
本模型中还包括了初始段,请特别注意其中“x,y=5,1,2,7;”语句的实际赋值顺序是x=(5,2),y=(1,7),而不是x=(5,1),y=(2,7)。也就是说,LINGO对数据是按列赋值,而不是按行。当然,直接写成两个语句“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; 这时,分割数据的空格与逗号“,”或“回车”的作用是等价的。
程序接下来定义目标函数和约束。由于新建料场的位置理论上讲可以是任意的,所以我们在约束的最后(模型的“END”语句上面的一行)用@free函数取消了变量x,y的非负限制。此外,对目标行([OBJ])和两类约束(DEMAND_CON和SUPPLY_CON)分别命名了行号(通过“LINGO|Generate|Display Model (Ctrl+G)”命令可以查看约束的行号)。
运行菜单命令“LINGO|Solve (Ctrl+S)”,很快得到求解报告:局部最优解是X(1)=
5.695945,X(2)=7.250000,Y(1)=4.928613,Y( 2)=7.750000,c(略)。最小运量= 89.88347(t?km)。要验证这个问题的NLP模型的最小运量89.88347是不是全局最优,可以考虑用全局最优求解器验证(如果你使用的是试用版软件,则可能不能用全局求解器求解本例,因为问题的规模已经太大了)。激活全局最优求解程序的方法是用“LINGO|Options”菜单命令打开选项对话框,在“Global Solver”选项卡上选择“Use Global Solver”。运行NLP模型,发现全局最优求解程序花费的时间相当长。
如果要把料场P(5,1),Q(2,7)的位置看成是已知并且固定的,这时是LP模型,只需要把图2-3中初始段的语句“x,y=5,1,2,7;”移到数据段就可以了。此时求得全局最优解为136.2275(t?km)(c的取值略)。 2.3
稠密集合与稀疏集合
例2.2中,我们把派生集合link的元素定义为demand和supply的笛卡儿积,即包含了两个基本集合构成的所有二元有序对。这种派生集合称为稠密集合(简称稠集)。其实,在LINGO中,派生集合的元素可以定义为只是这个笛卡儿积的一个真子集合,这种派生集合称为稀疏集合(简称疏集)。君,已阅读到文档的结尾了呢~~
lingo处理实例&#40;多目标问题&#41;问题,解决,目标,多目标,Lingo,LINGO,多目标优化,多目标规划,多目标决策,多目标插件
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
lingo处理实例&#40;多目标问题&#41;
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口LINGO软件中集合的使用--《硅谷》2008年24期
LINGO软件中集合的使用
【摘要】:集合是LINGO软件中重要的组成要素。介绍集合的定义,结合实例说明集合的基本用法。对集合做分类,详细讲解派生集合中的稠密集合、稀疏集合的一般形式和使用方法。
【作者单位】:
【关键词】:
【分类号】:TP319【正文快照】:
一、引,LINGO软件是由美国LINDO系统公司研制开发的求解大型数学规划问题的软件包,可以用来求解线性规划、整数规划、二次规划、非线性规划问题等。在LINGO软件中,集合及其属性的使用占据了相当重要的作用。集合能够实现只输入少数几行文字就能建立起含有大规模变量的目标
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【相似文献】
中国期刊全文数据库
罗飞翔;邢鹏举;杨和礼;;[J];山西建筑;2008年25期
陶思俊;邹海林;;[J];硅谷;2008年24期
吕良军;郝振莉;;[J];中国科技信息;2006年01期
张玥杰;张涛;朱靖波;姚天顺;;[J];计算机科学;2006年03期
刘瞡忠;[J];现代计算机;2005年06期
杨国锋,邱静,钱彦岭,刘冠军;[J];国防科技大学学报;2004年03期
朱清新,朱肇乾;[J];计算机应用;2003年03期
马良;[J];控制与决策;2002年S1期
焦容,陈金海,方方;[J];小型微型计算机系统;2000年04期
焦容,虞险云,严哲南,陈金海;[J];计算机工程;1999年12期
中国重要会议论文全文数据库
谭彦显;曾霞文;蔡素玲;;[A];2007年中国机械工程学会年会论文集[C];2007年
房树琼;杨保安;郁钟铭;;[A];2006中国控制与决策学术年会论文集[C];2006年
中国硕士学位论文全文数据库
王铁虎;[D];华北水利水电学院;2007年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号1.&&& 在Lingo中使用集合
4.1 集合的基本用法和lingo模型的基本要素
Lingo虽然使用方便,但是如果要解决几万个,几十万个变量的优化问题时,我们总不能一个一个地列出x1,x2,&,x1000来解决,而这样的问题在实际企业的应用中也是经常遇到的。好在Lingo中设计了集合语言来表示大规模变量的输入,只需一行文字就可以建立起含有大规模变量的目标函数和成千上万条约束。而Lingo的早期版本软件Lindo却不包含这样的功能。
现通过下例来对Lingo的集合、属性概念进行介绍。
例2 SAILCO公司需要决定决定下四个季度的帆船生产量。下四个季度的帆船需求量分别为40条,60条,75条,25条,这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条帆船的生产费用为400美元。如果加班生产,每条船的生产费用为450美元。每个季度末,每条船的库存费用为20美元。假定生产提前期为0,初始库存为10条船。如何安排生产可使总费用最小?
分析与解:用DEM、RP、OP、INV分别表示需求量,正常生产的产量,加班生产的产量,库存量。则DEM、RP、OP、INV对每个季度都应有一个对应的值,也就是说他们都应该是一个由4个元素组成的数组,其中DEM已知,而RP,OP,INV未知。现在我们可以写出该问题的模型:
此外还有各变量非负的约束。
记4个季度组成的集合,他们就是DEM、RP、OP、INV等变量的下标集合,对于,都有值与之对应。LINGO正是充分利用这种数组及其下标的关系,引入了&集合&与&属性&的概念。本例中我们把称之为集合,DEM、RP、OP、INV称为集合具有的属性(即定义在该集合上的属性)。下图表示了这种集合与属性的关系。
集合QUARTERS的元素
定义在集合QUARTERS上的属性
下面我们看看Lingo中具体如何定义集合及其属性。下面是例2的Lingo代码:
QUARTERS/1,2,3,4/:DEM,RP,OP,INV;
Min=@sum(QUARTERS:400*RP+450*OP+20*INV);
@for(QUARTERS(I):RP(I)&=40;);
@for(QUARTERS(I)|I#GT#1:
INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););
INV(1)=10+RP(1)+OP(1)-DEM(1);
DEM=40,60,75,25;
我们总结一下上面代码的特点:
(1)、模型以&MODEL:&开始,以&END&结束。它们之间由语句组成,可以分成三步分。
(2)、集合定义部分以&SETS:&开始,以&ENDSETS&结束。中间定义了集合和相应属性。语句&QUARTERS/1,2,3,4/:DEM,RP,OP,INV;&定义了集合QUARTERS,以及该集合的属性DEM、RP、OP、INV,其结果正是上表里面的16个变量名。可以定义空集合,比如&Empty set/1,2,3,4/;&空集合的用法将在派生集中讲述。
(3)、数据输入部分以&DATA:&开始,以&ENDDATA&结束,语句&DEM=40,60,75,25;&给出了常量DEM的值,即DEM(1)=40,DEM(2)=60,DEM(3)=75,DEM(4)=25. 语句&DEM=40,60,75,25;&也可以写成语句&DEM=40 60 75 25;&即数据之间可以用逗号或空格分开。
(4)、其他部分,给出了目标函数和约束。其中目标函数(&min=&后面所接的表达式)是用求和函数
&@sum=(集合(下标):关于集合的属性的表达式)&
的方式定义的,这个函数的功能是对语句冒号&:&后面的表达式,按照&:&前面的集合指定的下标元素进行求和。本例中目标函数也可以写成
&Min=@sum(QUARTERS(i):400*RP(i)+450*OP(i)+20*INV(i))&
这里&@sum&相当于求和符号,而&QUARTERS(i)&相当于&&,而由于本例中已默认对所有的QUARTERS的元素求和,所以实例中可以将下标i省略。
约束是用循环函数&@for(集合(下标):关于集合的属性的约束关系式)&的方式定义的,意思是对于&:&前面的集合的每个元素(下标),冒号&:&后面的约束关系式都要成立。但对于这个约束,实际上I=1时要用到变量,但我们定义属性变量的时候是从I=1开始的,即是一个常数,为了区别I=1和I=2,3,4,我们要将I=1的约束单独列出来,而对I=2,3,4的约束我们对集合下标做了的约束,即用了&#GT#1&(这个限制条件与集合之间有一个竖线&|&分开,称为过滤条件),&I#GT#1&就表示,&#GT#&是lingo中的逻辑表达式。
小结一下lingo模型最基本的组成要素:
(1)&&&&&&&
集合段:以&SETS:&开始,以&ENDSETS&结束。作用在于定义必要的集合和属性。注意一个细节,我们可以定义QUARTERS/1,2,3,4/,若QUARTERS有1000个元素,我们也不必将其一一列出,而可以简写为QUARTERS/1..1000/.
(2)&&&&&&&
目标和约束段:这部分不像其他部分,没有段的开始和结束的标记。因此是除去其他段以外的所有语句。
(3)&&&&&&&
数据段:以&DATA:&开始,以&ENDDATA&结束,作用在于对集合的属性输入必要的常数数据,格式为:& 属性=常数列表;常数列表中的常数或以逗号&,&分开,或以空格分开& &.
(4)&&&&&&&
初始段:以&INIT:&开始,以&ENDINIT&结束。作用在于对集合的属性定义初值。因为求解算法是迭代算法,所以一个好的初值可以让程序更快解决。定义初值的格式为:
属性=常数列表;
(5)&&&&&&&
计算段:以&CALC:&开始,以&ENDCALC&结束,作用在于对一些原始数据进行计算处理,这种处理是在输入数据后,求解模型前进行的。例如,对上面的例子,如果我们希望可以得到全年的总需求和季度平均需求,可以增加这个段:
T_DEM=@sum(QUARTERS:DEM);!总需求;
A_DEM=T_DEM/@size(QUARTERS);!平均需求;
要注意的是计算段中语句是按顺序执行的,故上面的两个语句不能调换。
阅读(...) 评论()

我要回帖

更多关于 lingo集合覆盖程序 的文章

 

随机推荐