数学软件应用之Ling.ppt

上传人:小飞机 文档编号:6578303 上传时间:2023-11-14 格式:PPT 页数:39 大小:229.50KB
返回 下载 相关 举报
数学软件应用之Ling.ppt_第1页
第1页 / 共39页
数学软件应用之Ling.ppt_第2页
第2页 / 共39页
数学软件应用之Ling.ppt_第3页
第3页 / 共39页
数学软件应用之Ling.ppt_第4页
第4页 / 共39页
数学软件应用之Ling.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《数学软件应用之Ling.ppt》由会员分享,可在线阅读,更多相关《数学软件应用之Ling.ppt(39页珍藏版)》请在三一办公上搜索。

1、 1 LINGO 概述LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。LINGO的最新版本为LINGO10.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。,第二篇 LINGO软件,返回总目录,返回总目录,上一页,1.LINGO WINDOWS命令1.1 文件菜单(File Menu)1 新建(New)从文件菜单中选用“新建”命令、单击“新

2、建”按钮或直接按F2键可以创建一个新的“Model”窗口。在这个新的“Model”窗口中能够输入所要求解的模型。2 打开(Open)从文件菜单中选用“打开”命令、单击“打开”按钮或直接按F3键可以打开一个已经存在的文本文件。这个文件可能是一个Model文件。3 保存(Save)从文件菜单中选用“保存”命令、单击“保存”按钮或直接按F4键用来保存当前活动窗口(最前台的窗口)中的模型结果、命令序列等保存为文件。4 另存为(Save As)从文件菜单中选用“另存为”命令或按F5键可以将当前活动窗口中的内容保存为文本文件,其文件名为你在“另存为”对话框中输入的文件名。利用这种方法你可以将任何窗口的内容

3、如模型、求解结果或命令保存为文件。5 关闭(Close)在文件菜单中选用“关闭”(Close)命令或按F6键将关闭当前活动窗口。如果这个窗口是新建窗口或已经改变了当前文件的内容,LINGO系统将会提示是否想要保存改变后的内容。,6 打印(Print)在文件菜单中选用“打印”(Print)命令、单击“打印”按钮或直接按F7键可以将当前活动窗口中的内容发送到打印机。7 打印设置(Print Setup)在文件菜单中选用“打印设置”命令或直接按F8键可以将文件输出到指定的打印机。8 打印预览(Print Preview)在文件菜单中选用“打印预览”命令或直接按Shift+F8键可以进行打印预览。9

4、输出到日志文件(Log Output)从文件菜单中选用“Log Output”命令或按F9键打开一个对话框,用于生成一个日志文件,它存储接下来在“命令窗口”中输入的所有命令。10提交LINGO命令脚本文件(Take Commands)从文件菜单中选用“Take Commands”命令或直接按F11键就可以将LINGO命令脚本(command script)文件提交给系统进程来运行。11引入LINGO文件(Import Lingo File)从文件菜单中选用“Import Lingo File”命令或直接按F12键可以打开一个LINGO格式模型的文件,然后LINGO系统会尽可能把模型转化为LIN

5、GO语法允许的程序。12退出(Exit),返回本节,1.2 编辑菜单(Edit Menu)1 恢复(Undo)从编辑菜单中选用“恢复”(Undo)命令或按Ctrl+Z组合键,将撤销上次操作、恢复至其前的状态。2 剪切(Cut)从编辑菜单中选用“剪切”(Cut)命令或按Ctrl+X组合键可以将当前选中的内容剪切至剪贴板中。3 复制(Copy)从编辑菜单中选用“复制”(Copy)命令、单击“复制”按钮或按Ctrl+C组合键可以将当前选中的内容复制到剪贴板中。4 粘贴(Paste)从编辑菜单中选用“粘贴”(Paste)命令、单击“粘贴”按钮或按Ctrl+V组合键可以将粘贴板中的当前内容复制到当前插入

6、点的位置。5 粘贴特定.(Paste Special。)与上面的命令不同,它可以用于剪贴板中的内容不是文本的情形。6 全选(Select All)从编辑菜单中选用“Select All”命令或按Ctrl+A组合键可选定当前窗口中的所有内容。,返回本节,7 匹配小括号(Match Parenthesis)从编辑菜单中选用“Match Parenthesis”命令、单击“Match Parenthesis”按钮或按Ctrl+P组合键可以为当前选中的开括号查找匹配的闭括号。8 粘贴函数(Paste Function)从编辑菜单中选用“Paste Function”命令可以将LINGO的内部函数粘贴到

7、当前插入点。1.3 LINGO菜单1 求解模型(Slove)从LINGO菜单中选用“求解”命令、单击“Slove”按钮或按Ctrl+S组合键可以将当前模型送入内存求解。2 求解结果(Solution)从LINGO菜单中选用“Solution”命令、单击“Solution”按钮或直接按Ctrl+O组合键可以打开求解结果的对话框。这里可以指定查看当前内存中求解结果的那些内容。,返回本节,3 查看(Look)从LINGO菜单中选用“Look”命令或直接按Ctrl+L组合键可以查看全部的或选中的模型文本内容。4 灵敏性分析(Range,Ctrl+R)用该命令产生当前模型的灵敏性分析报告:研究当目标函数

8、的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options,选择General Solver Tab,在Dual Computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。5.模型通常形式(Generate)从LINGO菜单中选用“Generate”命令或直接按Ctrl+G组合键可以创建当前模型的代数形式、LINGO模型或MPS格式文本。,返回本节,

9、6.选项(Options)从LINGO菜单中选用“Options”命令、单击“Options”按钮或直接按Ctrl+I组合键可以改变一些影响LINGO模型求解时的参数。该命令将打开一个含有7个选项卡的窗口,你可以通过它修改LINGO系统的各种参数和选项。修改完以后,你如果单击“Apply(应用)”按钮,则新的设置马上生效;如果单击“OK(确定)”按钮,则新的设置马上生效,并且同时关闭该窗口。如果单击“Save(保存)”按钮,则将当前设置变为默认设置,下次启动LINGO时这些设置仍然有效。单击“Default(缺省值)”按钮,则恢复LINGO系统定义的原始默认设置(缺省设置)。(1)Interf

10、ace(界面)选项卡(2)General Solver(通用求解器)选项卡(3)Linear Solver(线性求解器)选项卡(4)Nonlinear Solver(非线性求解器)选项卡(5)Integer Pre-Solver(整数预处理求解器)选项卡(6)Integer Solver(整数求解器)选项卡(7)Global Solver(全局最优求解器)选项卡,返回本节,LINGO建立优化模型时可以引用大量的内部函数,这些函数以“”符号打头。LINGO有9种类型的函数:1 基本运算符:包括算术运算符、逻辑运算符和关系运算符2 数学函数:三角函数和常规的数学函数3 金融函数:LINGO提供的两

11、种金融函数4 概率函数:LINGO提供了大量概率相关的函数5 变量界定函数:这类函数用来定义变量的取值范围6 集操作函数:这类函数为对集的操作提供帮助7 集循环函数:遍历集的元素,执行一定的操作的函数8 数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9 辅助函数:各种杂类函数,2.LINGO函数,返回本节,2.1.1 算术运算符算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:乘方;乘;除;加;减.LINGO唯一的一元算术运算符是取反函数“”。这些运算符的优先级由高到底为:高(取反);.低运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括

12、号“()”来改变,2.1 运算符,返回本节,2.1.2 逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。LINGO具有种逻辑运算符:#not#否定该操作数的逻辑值,not是一个一元运算符#eq#若两个运算数相等,则为true;否则为flase#ne#若两个运算符不相等,则为true;否则为flase#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase#lt#若左边的运算符严格小于右边的运算符,则为

13、true;否则为flase#le#若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and#仅当两个参数都为true时,结果为true;否则为flase#or#仅当两个参数都为false时,结果为false;否则为true这些运算符的优先级由高到低为:高#not#eq#ne#gt#ge#lt#le#低#and#or#,返回本节,2.1.3 关系运算符在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为

14、真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。LINGO有三种关系运算符:“=”、“=”。LINGO中还能用“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:A=,LINGO提供了大量的标准数学函数:abs(x)返回x的绝对值sin(x)返回x的正弦值,x采用弧度制cos(x)返回x的余弦值tan(x)返回x的正切值exp(x)返回常数e的x次方log(x)返回x的自然对数lgm(x)返回x的gamma函数的自然对数sign(x)如果x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整

15、数。smax(x1,x2,xn)返回x1,x2,xn中的最大值smin(x1,x2,xn)返回x1,x2,xn中的最小值,2.2常用数学函数,返回本节,2.3 变量界定函数,返回本节,变量界定函数实现对变量取值范围的附加限制,共4种:bin(x)限制x为0或1bnd(L,x,U)限制LxUfree(x)取消对变量x的默认下界为0的限制,即x可以取任意实数gin(x)限制x为整数在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+。free取消了默认的下界为0的限制,使变量也可以取负值。bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。,1fpa(I,n)返回如下情

16、形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。fpa的计算公式为 2fpl(I,n)返回如下情形的净现值:单位时段利率为I,第n个时段支付单位费用。fpl(I,n)的计算公式为,2.4 金融(财务)函数,返回本节,2.5 概率函数,返回本节,1pbn(p,n,x)二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。2pcx(n,x)自由度为n的2分布的累积分布函数。3peb(a,x)当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。4pel(a,x)当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。5

17、pfd(n,d,x)自由度为n和d的F分布的累积分布函数。6pfs(a,x,c)当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x不是整数时,采用线性插值进行计算。,7phg(pop,g,n,x)超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(npop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。8ppl(a,x)Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机

18、变量z服从均值为a的Poisson分布。9pps(a,x)均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。10psl(x)单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。11psn(x)标准正态分布的累积分布函数。12ptd(n,x)自由度为n的t分布的累积分布函数,返回本节,返回本节,13qrand(seed)产生服从(0,1)区间的拟随机数。qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个mn的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;

19、在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。14rand(seed)返回0和1间的伪随机数,依赖于指定的种子。典型用法是U(I+1)=rand(U(I)。注意如果seed不变,那么产生的随机数也不变。,2.6 集操作函数1in(set_name,primitive_index_1,primitive_index_2,)如果元素在指定集中,返回1;否则返回0。2index(set_name,primitive_set_element)该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name被忽略,那么LINGO将返回

20、与primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。3wrap(index,limit)该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间1,limit内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用。4size(set_name)该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。,返回本节,集循环函数遍历整个集进行操作。其语法为function(setname(set_index_list)|c

21、onditional_qualifier:expression_list);function相应于下面罗列的四个集循环函数之一;setname是要遍历的集;set_ index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行function操作,否则跳过,继续执行下一次循环。expression_list是被应用到每个集成员的表达式列表,当用的是for函数时,expression_list可以包含多个表达式,其间用逗号隔开。

22、这些表达式将被作为约束加到模型中。当使用其余的三个集循环函数时,expression_list只能有一个表达式。如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集。,2.7 集循环函数,返回本节,返回本节,1for该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。2sum该函数返回遍历指定的集成员的一个表达式的和。3min和max返回指定的集成员的一个表达式的最小值或最大值。,输入和输出函数可以把模型和外部数据比如文本文件、数据库和电子

23、表格等连接起来。1file函数 该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为file(filename)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。file函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。当使用file函数时,可把记录的内容(除了一些记录结束标记外)看作是替代模型中file(filename)位置的文本。这也就是说,一条记录可以是声明的一部分,整个声明,或一系列声明。在数据文件中注释被忽略。注意在LINGO中不允许嵌套调用file函数。,2.8 输入和输出函数,返回本节,2text函数该函

24、数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法text(filename)这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。text函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。我们把用接口函数产生输出的数据声明称为输出操作。输出操作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。,返回本节,3ole函数ole是从EXCEL中引入或输出数据的接口函数,它是基于传输的ole技术。

25、OLE传输直接在内存中传输数据,并不借助于中间文件。当使用ole时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用ole函数,必须有EXCEL5及其以上版本。ole函数可在数据部分和初始部分引入数据。ole可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。ole只能读一维或二维的Ranges(在单个的EXCEL工作表(sheet)中

26、),但不能读间断的或三维的Ranges。Ranges是自左而右、自上而下来读。,返回本节,返回本节,4ranged(variable_or_row_name)为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。5rangeu(variable_or_row_name)为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。6status():返回LINGO求解模型结束后的状态 7dual dual(variable_or_row_name)返回变量的判别数(检验数)或约束行的对偶(影子)价格(dual prices)。,1if(logical_condition,true_

27、result,false_result)if函数将评价一个逻辑表达式logical_condition,如果为真,返回true_ result,否则返回false_result 2warn(text,logical_condition)如果逻辑条件logical_condition为真,则产生一个内容为text的信息框。,2.9 辅助函数,返回本节,返回本节,3窗口菜单(Windows Menu)1 命令行窗口(Open Command Window)从窗口菜单中选用“Open Command Window”命令或直接按Ctrl+1可以打开LINGO的命令行窗口。在命令行窗口中可以获得命令行界

28、面,在“:”提示符后可以输入LINGO的命令行命令。2 状态窗口(Status Window)从窗口菜单中选用“Status Window”命令或直接按Ctrl+2可以打开LINGO的求解状态窗口。如果在编译期间没有表达错误,那么LINGO将调用适当的求解器来求解模型。当求解器开始运行时,它就会显示如下的求解器状态窗口(LINGO Solver Status)。4帮助菜单(Help Menu)1 帮助主题(Help Menu)从帮助菜单中选用“Help Menu”可以打开LINGO的帮助文件。2 关于LINGO(About Lingo)关于当前LINGO的版本信息等。,LINGO模型以MODE

29、L开始,以END结束。中间为语句,分为四大部分(SECTION):(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:SETNAME/member list(or 1.n)/:attribute,attribute,etc。另一类是是导

30、出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:SETNAME(set1,set2,etc。):attribute,attribute,etc。如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。,6LINGO编写格式,返回本节,返回本节,(2)目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。(3)数据部分(DATA):这部分以“DATA:”开始,以“END DATA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=va

31、lue_list。该部分主要是方便数据的输入。(4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。,编写LINGO程序要注意的几点:,返回本节,1.所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。2.LINGO求解非线性规划时已约定各变量非负。,Lingo综合举例,Feasible solution found at iteration:0 Variable Value X 0.4543360 Y 1.339247,旅行售货员问题(又称货郎担问题,Traveling Salesman Problem),避免产生回路约束条件,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号