LINGO的使用方法说明大全

上传人:ni****g 文档编号:497917970 上传时间:2022-10-12 格式:DOCX 页数:18 大小:56.02KB
返回 下载 相关 举报
LINGO的使用方法说明大全_第1页
第1页 / 共18页
LINGO的使用方法说明大全_第2页
第2页 / 共18页
LINGO的使用方法说明大全_第3页
第3页 / 共18页
LINGO的使用方法说明大全_第4页
第4页 / 共18页
LINGO的使用方法说明大全_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《LINGO的使用方法说明大全》由会员分享,可在线阅读,更多相关《LINGO的使用方法说明大全(18页珍藏版)》请在金锄头文库上搜索。

1、LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速 度快.1叭6。是用来求解线性和非线性优化问题的简易工具.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法.LINGO(Linea门Nteractive and General Optimizer )的基本含

2、义是交互式的线性和通过优化求解器.它是美国芝加哥大学的Linus Schrage教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO, LINGO, LINDOAPI和WhatsBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite) 、高级版(super)、超级版(hyper)、工业版(industrial) 、扩展版(extended).不 同版本的LINGO对求解问题的规模有限制,如附表3-1所示.-1不同版本LINGO对求解规模的

3、限制版本类型总变量数整数变量数非线性变量数约束数演示版3003030150求解包5005050250高级版20002002001000超级版80008008004000工业版3200032003200016000扩展版无限无限无限无限LINGO程序框架LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求 解问题,以及排队论模型中最优化等问题.一个LINGO程序一般会包括以下几个部分:(1)集合段:集部分是LINGO模型的一个可选部分.在 LINGO模型中使用集之前,必须在集部分事先 定义.集部分以关键字“ sets: 开始,以“endsets ”结束.一

4、个模型可以没有集部分,或有一个简单的 集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被 引用之前必须先定义.(2)数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定值.数据部分以关键字“ data: 开始,以关键字“ enddata”结束.(3)目标和约束段:这部分用来定义目标函数和约束条件等.该部分没有开始和结束的标记.主要是要用到LINGO的内部函数,尤其是与集合有关的求和与循环函数等.(4)初始段:这个部分要以关键字“ INIT :开始,以关键字“ ENDINIT”结束,它的作用是对集合的 属性定义一个初值.

5、在一般的迭代算法中,如果可以给一个接近最优解的初始值,会大大减少程序运行的 时间.(5)数据预处理段:这一部分是以关键字“ CALC”开始,以关键字“ ENDCALC结束.它的作用是把 原始数据处理成程序模型需要的数据,它的处理是在数据段输入完以后、开始正式求解模型之前进行的, 程序语句是按顺序执行的.LINGO中集合的概念在对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和 雇工等等.LINGO允许把这些相联系的对象聚合成集(sets). 一旦把对象聚合成集,就可以利用集来最大 限度地发挥LINGO建模语言的优势.现在将深入介绍如何创建集,并用数据初始化集

6、的属性.集的构成集是LINGO建模语言的基础,是程序设计最强有力的基本构件.借助于集能够用一个单一的、简明的 复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型.集是一群相联系的对象,这些对象也称为集的元素.一个集可能是一系列产品、卡车或雇员.每个集 的元素可能有一个或多个与之有关联的特征,把这些特征称为属性.属性值可以预先给定,也可以是未知 的,有待于LINGO求解的.LINGO有两种类型的集:原始集 (primitive set)和派生集(derived set).一个原始集是由一些最基本的对象组成的.一个派生集是用一个或多个其它集来定义的,也就是说,它的元素来自于其它已存

7、在的集.模型的集部分集部分在程序中又称为集合段,它是LINGO模型的一个可选部分.在 LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“ sets: 开始,以“ endsets ”结束.一个模型可以没有集部分,或 有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在 模型约束中被引用之前必须先定义.(1)原始集的定义为了定义一个原始集,必须详细说明集的名字,而集的元素和相应的属性是可选的.定义一个原始集,用下面的语法:setname/member_list/:attribute_list;注意:用“口”表示该部分内容是可选的(下同).Se

8、tname是用来标记集的名字,最好具有较强的可读性.集名字必须严格符合标准命名规则:以拉丁32个字符的字符串,字母或下划线为首字符,其后由拉丁字母、下划线、阿拉伯数字组成的总长度不超过且不区分大小写注意:该命名规则同样适用于集元素名和属性名等的命名Member_list 是集元素的列表如果集元素放在集定义中,那么对它们可采取显式和隐式罗列两种方式如果集元素不放在集定义中,那么可以在随后的数据部分定义 当显式罗列元素时,必须为每个元素输入一个不同的名字,中间用空格或逗号隔开,允许混合使用例 定义一个名为friends 的原始集,它具有元素John, Jill , Rose和Mike,其属性有se

9、x和age:sets:friends/John Jill, Rose Mike/: sex, age;endsets 当隐式罗列元素时,不必罗列出每个集元素可采用如下语法:setname/member1.member N/: attribute_list;这里的member!集的第一个元素名,membeN是集的最后一个元素名.LINGO将自动产生中间的所有元素名.LINGO也接受一些特定的首元素名和末元素名,用于创建一些特殊的集. 集元素不放在集定义中,而在随后的数据部分来定义例! 集部分 ;sets:friends:sex,age;endsets! 数据部分 ;data:friends,se

10、x,age=John,1,16 Jill,0,14 Rose,0,17 Mike,1,13;enddata注意:开头用感叹号( ! ) ,末尾用分号( ; )表示注释,可跨多行在集部分只定义了一个集friends ,并未指定元素.在数据部分罗列了集元素John, Jill , Rose和Mike ,并对属性sex 和 age 分别给出了值集元素无论用何种字符标记, 它的索引都是从1开始连续计数在attribute_ list 可以指定一个或多个集元素的属性,属性之间必须用逗号隔开LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助于LINGO求解器求解因此,集

11、属性的值一旦在模型中被确定,就不可能再更改只有在初始部分中给出的集属性值在以后的求解中可更改.这与前面并不矛盾,初始部分是LINGO求解器的需要,并不是描述问题所必须的(2) 定义派生集为了定义一个派生集,必须详细说明集的名字和父集的名字,而集元素和属性是可选的可用下面的语法定义一个派生集:setname(parent_set_list)/member_list/:attribute_list;setname 是集的名字 parent_set_list 是已定义的集的列表,多个时要用逗号隔开如果没有指定成员列表,那么LINGO会自动创建父集元素的所有组合作为派生集的元素.派生集的父集既可以是原

12、始集,也可以是其它的派生集例 sets: product/A,B/;machine/M,N/;week/1.2/;allowed(product,machine,week):x; endsetsLINGO生成了三个父集的所有组合共八组作为allowed集的元素,列表如下:编号元素1(A,M,1)2(A,M,2)3(A,N,1)4(A,N,2)5(B,M,1)6(B,M,2)7(B,N,1)8(B,N,2)元素列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集同原始集一样,派生集元素的

13、说明也可以放在数据部分.一个派生集的元素列表有两种方式生成:显式罗列;设置元素选择的过滤器.当采用方式时,必须显式罗列出所有要包含在派生集中的元素,并且罗列的每个元素要属于稠密集使用前面的例子,显式罗列派生集的元素,如:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一个大的、稀疏的集,那么显式罗列就十分麻烦但是许多稀疏集的元素都满足一些条件,可以把这些逻辑条件看作过滤器,在LINGO生成派生集的元素时把使逻辑条件为假的元素从稠密集中过滤掉例sets:! 学生集:性别属性sex , 1表示男性, 0表示女性;年龄属性age;stud

14、ents/John,Jill,Rose,Mike/:sex,age;!男学生和女学生的联系集:友好程度属性friend ! 0,1之间的数;linkmf(students,students)|sex(&1)#eq#1#and#sex(&2)#eq#0: friend;!男学生和女学生的友好程度大于的集;linkmf2(linkmf) | friend(&1,&2) #ge# : x; endsetsdata:sex,age =1 16,0 14,0 17,0 13;friend =,; enddata用竖线(|)来标记一个元素过滤器的开始.#eq#是逻辑运算符,用来判断是否“相等” .&1可看

15、作派生集的第1个原始父集的索引,它取遍该原始父集的所有元素;&2可看作派生集的第2个原始父集的索引, 它取遍该原始父集的所有元素;&3, &4,,依此类推.注意如果派生集B的父集是另外的派生集A那么上面所说的原始父集是集A向前回溯到最终的原始集,其顺序保持不变,并且派生集A的过滤器对派生集B仍然有效.因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集 所作限制的总和.LINGO数据部分和初始部分在处理模型的数据时,需要为集指定一些元素并且在LINGO求解模型之前为集的某些属性指定数值.为此,LINGO为用户提供了两个可选部分:输入集元素数值的数据部分( Data Section )和为决策变量设置 初始值的初始部分(Init Section ).数据部分(1)数据部分入门数据部分以关键字“ data: 开始,“enddata”结束.在这里,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号