您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 《Lingo软件学习》PPT课件
目录Lingo的发展、简介示例用编程语言建立模型Lingo中部分函数介绍应用举例一、Lingo发展、简介一、lingo是美国lindo公司开发的求解数学规划系列软件的一个,它的主要功能是求解大型线性、非线性和整数规划问题;二、主要功能特色(1)既能求解线性规划问题,也有较强的求解非线性规划问题的能力;(2)输入模型简练直观;(3)运行速度快、计算能力强;(4)内置数模语言,提供了几十个内部函数,可用较少语句,较直观的方式描述较大规模的优化问题;(5)将集合的概念引入编程语言,很容易将实际问题转化为lingo模型;(6)能很方便的与Excel、数据库等其他软件交换数据;二、示例在LINGO中求解如下的LP问题:在模型窗口中输入如下代码:min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;然后点击工具条上的运行按钮即可。程序lingo的语法规定1、求解目标函数的最大值或最小值分别用MAX=…或者MIN=…来表示;2、每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;3、变量名称必须以字母(A˜Z)开头,有字母、数字(0˜9)和下划线组成,长度不能超过32个字符,不区分大小写;4、可以给语句加上标号;5、以!开头,以;号结束的语句是注释语句;6、如果对变量的取值范围没有特殊说明,则默认所有决策变量都非负;7、lingo模型以”model”开头,以“end”结束,对于比较简单的模型,这两个语句可以省略;点击菜单lingo|solve求解即可对例一结果的相关说明例一运行后得到如下结果:Globaloptimalsolutionfound.Objectivevalue:800.0000Totalsolveriterations:2VariableValueReducedCostX1250.00000.000000X2100.00000.000000RowSlackorSurplusDualPrice1800.0000-1.00000020.000000-4.0000003150.00000.00000040.0000001.000000对例一结果的相关说明1、报告说明运行了2步找到全局最优解,目标函数值为800,变量值分别为X1=250,X2=100.2、“ReducedCost”的含义是缩减成本系数,“Row”是输入模型中的行号,“SlackorSurplus”为松弛或剩余,即约束条件左边与右边的差值,如果约束条件无法满足是,即没有可行解,则松弛或剩余的值为负数,“DualPrice”为影子价格,就是该变量增加一个单位,能使目标函数增加增加的值。三、用编程语言建立模型上面介绍了lingo的基本用法,其输入模型简单,一般的数学表达式直接输入即可,但是如果变量和约束条件很多则有很多不足之处,例如:有200*200个变量显然要一个个输入将会非常麻烦!所以在lingo里面引入了集合的概念,这为建立大规模数学规划模型提供了方便,也可以更好的用lingo语言编写程序表达一个实际的优化问题。102011ijijijcx例二:某公司有6个货栈,库存货物总数分别为,60,55,51,43,41,52,现有8个客户要一批货,,数量分别为35,37,22,32,41,32,43,38。各个货栈到客户处的单位货物运输价格见表1,试确定各个客栈到各个客户调运数量,使总的运输费用最小?设xij表示第i个货栈到第j个客户的货运量。Cij表示从第i个货栈到第j个客户运价,ai表示第i个货栈的供货量,dj表示第j个客户的订货量。则可建立本问题的数学模型:68118161min1,2,,6.1,2,,80,1,2,,6,1,2,,8ijijijijijijjiijzcxxaistxdjxij下面用lingo语言表述:集合(set)是一组相关对象的组合,代表模型中的实际事物,并与数学变量及常量联系起来,是实际问题到数学的抽象。上面的例子中6个客栈和8个客户可以看成两个集合。其中集合要明确三个方面的内容:集合的名称、集合内的成员、集合的属性。可以分别定义客栈集合和客户集合:Kezhan/w1..w6/AI;Kehu/v1..v8/DJ;其中kezhan和kehu是集合的名称,“..”是特定的省略号,AI和DJ分别是集合的属性,“/”是规定的语法规则,以上面两个集合为基础可以再定义一个表示运输关系的集合,links(kezhan,kehu):c,x;称为衍生集合。衍生集合的定义语句有以下要素组成:集合的名称、对应的初始集合、集合的成员、集合的属性。所以模型的完整的集合定义为:sets:kezhan/w1..w6/AI;kehu/v1..v8/DJ;links(kezhan,kehu):c,x;endsets集合定义部分以sets:开头,以endsets结束,两个语句必须单独成行,endsets后面不能有符号。数据部分:data:AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;c=6,2,6,7,4,2,5,94,9,5,3,8,5,8,25,2,1,9,7,4,3,37,6,7,3,9,2,7,12,3,9,5,7,2,6,55,5,2,2,8,1,4,3;enddata语法规则和上面类似以data:开头,以enddata结束且不能有符号。目标函数的表达式用lingo表述:min=@sum(links(i,j):c(i,j)*x(i,j));@sum是lingo的内部函数,其作用是对某个集合的所有成员求指定表达式的和,该函数需要两个参数,第一个参数是集合名称,指定对该集合的所有成员,第二个参数是一个表达式,表示求和运算对该表达式进行。其运算规则是,先求c(i,j)*x(i,j)的值,然后求和。约束条件的表示:@for(kezhan(I):@sum(kehu(J):x(I,J))=AI(I));@for也是lingo提供的内部函数,它的作用是某个集合的所有成员列表分别生成一个约束条件,也要一个集合名;一个表示该集合所有成员生成对应的约束表达式,@sum和@for是使用很多的还可以嵌套使用。所以得到一下完整模型:model:sets:kezhan/w1..w6/:AI;kehu/v1..v8/:DJ;links(kezhan,kehu):c,x;endsetsdata:AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;c=6,2,6,7,4,2,5,94,9,5,3,8,5,8,25,2,1,9,7,4,3,37,6,7,3,9,2,7,12,3,9,5,7,2,6,55,5,2,2,8,1,4,3;enddatamin=@sum(links:c*x);!目标函数;@for(kezhan(I):@sum(kehu(J):x(I,J))=AI(I));!约束条件;@for(kehu(J):@sum(kezhan(I):x(I,J))=DJ(J));!约束条件;EndLingo以Model:开头,以end结束,这两个语句单独成行补充:关于与Excel中数据的链接先将Excel中的数据复制到剪切板上,然后将光标置于要插入数据的部位,再在lingo编辑菜单中选择选择性粘贴(PasteSpecial),注意粘贴与粘贴链接的区别!四、Lingo中部分函数介绍LINGO中的函数有基本元算符,数学函数,金融函数,变量限定函数等,全部函数请参照Edit|pastefuntion。算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:^乘方﹡乘/除﹢加﹣减LINGO唯一的一元算术运算符是取反函数“﹣”LINGO具有9种逻辑运算符:#not#否定该操作数的逻辑值,#not#是一个一元运算符#eq#若两个运算数相等,则为true;否则为flase#ne#若两个运算符不相等,则为true;否则为flase#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase#lt#若左边的运算符严格小于右边的运算符,则为true;否则为flase#le#若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and#仅当两个参数都为true时,结果为true;否则为flase#or#仅当两个参数都为false时,结果为false;否则为true在集合里用到的有:@FOR用于对集合的所有元素产生约束;@SUM计算出基于集合元素表达式的总和;@MIN求出基于集合元素的表达式的最小值;@MAX求出基于集合元素的表达式的最大值;@BIN限制变量为0或1,该函数在0-1规划中特别有用;@GIN限制变量为整数@BND(L,X,U)限制变量在L和U之间。其他函数请参考其他资料!五、应用举例一、指派问题:设有n项工作需要分配给n个人去做,没人做一项,由于个人的工作效率不同,因而完成同一工作所需要时间也就不同,设人员i完成j项工作所需时间为Cij,问如何分配工作,使完成所有工作所用的总时间最少?这类问题称为指派问题,也称为最优匹配问题,是一类重要的组合最优化问题,其一般模型如下如分配甲、乙、丙丁戊去完成ABCDE五项工作,没人完成一项,每项共作只能由一个人完成,数据,程序nn1111minz=1,1,2,,1,=1,2,,,01ijijijnijinijijjcxxjnxinx或二旅行售货商(TSP)问题:其问题:有一个旅行推销商,从某个城市出发,要遍访若干城市各一次且仅一次最后返回原出发城市。已知从城市i到j的旅费为Cij,问如何安排旅行路线使总旅费最少?一般模型如下:程序nn1111minz=1,1,2,,,1,=1,2,,,01,1,2,ijijijnijinijjijcxxjnijxinjixijn或三、职员时序安排模型一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。程序Lingo的其他应用,如最短路问题、最小生成树问题、最小费用最大流问题等。以上都是整数规划或者线性规划。其他如求解非线性规划和多目标规划的应用请参考其他资料!Lingo还可以与许多外部文件之间进行数据传递(可以通过剪贴板、文本文件、Excel、数据库(DBMS)、Access数据库)另外别小视Excel的功能,它可以对大量数据进行统计分析
本文标题:《Lingo软件学习》PPT课件
链接地址:https://www.777doc.com/doc-7078187 .html