ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:251.32KB ,
资源ID:9015546      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9015546.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三章 LINGO软件的使用01.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三章 LINGO软件的使用01.docx

1、第三章 LINGO软件的使用01第三章 LINGO软件的使用LINGO是美国LINDO系统公司开发的一套专门用于求解最优化问题的软件它为求解最优化问题提供了一个平台,主要用于求解线性规划、非线性规划、整数规划、二次规划、线性及非线性方程组等问题它是最优化问题的一种建模语言,包含有许多常用的函数供使用者编写程序时调用,并提供了与其他数据文件的接口,易于方便地输入,求解和分析大规模最优化问题,且执行速度快由于它的功能较强,所以在教学、科研、工业、商业、服务等许多领域得到了广泛的应用3.1 LINGO操作界面简介在Windows操作系统下启动LINGO软件,屏幕上首先显示如图1.1所示的窗口图1.1

2、图1.1中最外层的窗口是LINGO软件的主窗口(LINGO软件的用户界面),所有其他窗口都在这个窗口之内主窗口有:标题栏、菜单栏、工具栏和状态栏目前,状态栏最左边显示的是“Ready”,表示准备就绪,右下角显示的是当前时间,时间前面是当前光标的位置“Ln 1,Col 1”(即1行1列)将来用户可以用选项命令(LINGO|Options|Interface菜单命令)决定是否需要显示工具栏和状态栏LINGO有5个主菜单: File(文件) Edit(编辑) LINGO(LINGO系统) Windows(窗口) Help(帮助)这些菜单的用法与Windows下其他应用程序的标准用法类似,下面只对主菜

3、单中LINGO系统的主要命令进行简要介绍LINGO系统(LINGO)的主菜单 LINGO|Solve(Ctrl-S)LINGO|Solve(Ctrl-S)(求解)命令对当前模型进行编译并求解如果当前模型输入有错误,编译时将报告错误求解时会显示一个求解器运行状态窗口 LINGO|Solution(Ctrl-O)LINGO|Solution(Ctrl-O)(解答)命令显示当前解 LINGO|Range(Ctrl-R)LINGO|Range(Ctrl-R)(灵敏度分析)命令显示当前解的灵敏度分析结果(你必须在此之前求解过当前模型) LINGO|Options(Ctrl-I)LINGO|Options

4、(Ctrl-I)(选项)命令将打开一个含有7个选项卡的对话框窗口,你可以通过它修改LINGO系统的各种控制参数和选项修改完以后,你如果单击“应用”按钮,则新的设置马上生效;如果单击“OK”按钮,则新的设置马上生效,并且同时关闭该窗口;如果单击“Save”按钮,则将当前设置变为默认设置,下次启动LINGO时这些设置仍然有效;如果单击“Default”按钮,则恢复LINGO系统定义的原始默认设置;如果单击“Cancel”按钮将废弃本次操作,退出对话框;单击“Help”按钮将显示本对话框的帮助信息 LINGO|Generate和LINGO|PictureLINGO|Generate和LINGO|Pi

5、cture命令都是在模型窗口下才能使用,他们的功能是按照LINGO模型的完整形式分别以代数表达式形式和矩阵图形形式显示目标函数和约束 LINGO|Debug(Ctrl+D)LINGO|Debug(Ctrl+D)命令分析线性规划无解或无界的原因,建议如何修改 LINGO|Model Statistics(Ctrl+E)LINGO|Model Statistics(Ctrl+E)命令显示当前模型的统计信息 LINGO|Look(Ctrl+L)LINGO|Look(Ctrl+L)命令显示当前模型的文本形式,显示时对所有行按顺序编号图1.2给出了工具栏的简要功能说明图1.2当前光标所在的窗口(窗口标题

6、栏上标有“LINGO Model-LINGO1”),就是模型窗口(model windows),也就是用于输入LINGO优化模型(即LINGO程序)的窗口3.2 LINGO模型的基本特征LINGO模型(程序)从LINGO模型窗口输入,它以语句“MODEL:”开始,以语句“END”结束它是由一系列语句组成,每个语句都是以分号“;”结束,语句是组成LINGO模型的基本单位每行可以写多个语句,为了保持模型的可读性,最好一行只写一个语句,并且按照语句之间的嵌套关系对语句安排适当的缩进,增强层次感以感叹号“!”开始的语句是注释语句(注释语句也需要以分号“;”结束)LINGO模型(程序)一般由5个部分(或

7、称5段)组成:(1)集合段(SETS):这部分要以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量(SET)及其元素(member,含义类似于数组的下标)和属性(attribute,含义类似于数组)格式有基本集和派生集两种基本集:Setname(集合变量名)/member_list(元素列表)/:attribute_list(属性列表);元素列表可以全部一一列出,也可以用格式“/元素1.元素N/”列出,例如SETS:STUDENTS/1,2,3,4,5/:NAME,AGE;ENDSETSSETS:STUDENTS/1.5/:NAME,AGE;ENDSETS派生集:Set

8、name(parent_set_list(源集列表)/member_list/:attribute_list;例如SETS: PRODUCT/A B/; MACHINE/M N/; WEEK/1.2/; ALLOWED( PRODUCT,MACHINE,WEEK);ENDSETS列表可以用逗号“,”分开,也可以用空格分开(2)数据段(DATA):这部分要以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性(数组)输入必要的常数数据格式为:attribute_list(属性列表)=value_list(常数列表);例如SETS: SET1 /A, B, C/: X, Y;ENDS

9、ETSDATA: X = 1 2 3; Y = 4 5 6;ENDDATA(3)初始化段(INIT):这部分要以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性(数组)给出初值格式为:attribute_list(属性列表)=value_list(常数列表);与数据段的用法类似(4)计算段(CALC):这部分要以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行计算处理因为在实际问题中,输入的数据往往是原始数据,不一定能在模型中直接使用,可以在这个段对这些原始数据进行一定的“预处理”,得到模型中真正需要的数据在计算段中语句是顺序执行的(5)目标与约束段:

10、这部分没有段的开始和结束标记,作用在于给定目标函数与约束条件可见除这一段外,其他4个段都有明确的段标记这一段是模型的主要部分,其他段是为这一段服务的其他四段可以没有,这一段必须要有否则不称其为模型这一段一般要用到LINGO的运算符和各种函数3.3 LINGO的运算符和函数LINGO包含有大量的运算符和函数,供程序(建立优化模型)调用,其功能很强充分利用这些函数,对解决问题将是非常方便的下面给出部分函数及简要功能介绍,全部函数及详细功能说明可进一步参考LINGO的使用手册一、运算符及其优先级LINGO的运算符有三类:算数运算符、逻辑运算符和关系运算符1算术运算符:LINGO中的算术运算符有以下5

11、种:+(加法),-(减法或负号),*(乘法),/(除法),(求幂)算术运算是数与数之间的运算,运算结果仍是数2逻辑运算符:LINGO中的逻辑运算符有以下9种,可以分成两类:(1)#AND#(与),#OR#(或),#NOT#(非):这三个运算是逻辑值之间的运算,也就是它们操作的对象本身必须已经是逻辑值或逻辑表达式,计算结果也是逻辑值(2)#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):这6个操作实际上是“数与数之间”的比较,也就是它们操作的对象本身必须是两个数,而逻辑表达式计算的结果是逻辑值3关系运算符:LINGO中的关系运算

12、符有以下3种:(即,小于等于),(等于),(即,大于等于)这三个运算符虽然也是“数与数之间”的比较,但在LINGO中只用来表示优化模型的约束条件,所以不是真正意义上的运算这些运算符的优先级如表3.1所示(同一优先级按左到右的顺序执行;如果有括号“()”,则括号内的表达式优先进行计算)表3.1优先级运算符最高最低#NOT# -(负号)* /+ -(减法)#EQ# #NE# #GT# #GE# #LT# #LE#AND# #OR# 二、基本的数学函数在LINGO中写程序时可以调用大量的内部函数,这些函数以“”符号打头(类似调用命令)LINGO中数学函数的用法与其它语言中的数学函数的用法类似,主要有

13、以下函数:ABS(X):绝对值函数,返回X的绝对值COS(X):余弦函数,返回X的余弦值(X的单位是弧度)EXP(X):指数函数,返回ex的值FLOOR(X):取整函数,返回X的整数部分(向最靠近0的方向取整)LGM(X):返回X的伽马(Gamma)函数的自然对数值LOG(X):自然对数函数,返回X的自然对数值MOD(X,Y):模函数,返回X对Y取模的结果POW(X,Y):指数函数,返回XY的值SIGN(X):符号函数,返回X的符号值(X0时返回-1,X0返回1)SIN(X):正弦函数,返回X的正弦值SMAX(list):最大值函数,返回列表(list)中的最大值SMIN(list):最小值函

14、数,返回列表(list)中的最小值SQR(X):平方函数,返回X的平方值SQRT(X):平方根函数,返回X的正的平方根的值TAN(X):正切函数,返回X的正切值三、集合循环函数集合循环函数是指对集合上的元素(下标)进行循环操作的函数,主要有FOR,MAX,MIN,SUM,PROD五种,其用法如下:function(setname(set_index_list)|conditional_qualifier:expression_list);其中:Function是集合函数名; Setname是集合名;set_index_list是集合索引列表(不需要使用索引时可以省略);|conditional

15、_qualifier是用逻辑表达式给出的过滤条件(无条件时可以省略);:expression_list是一个表达式(对FOR函数,可以是一组表达式)下面简要介绍其作用FOR(setname(set_index_list)|cond_qualifier: exp_list):对集合setname中的每个元素独立地生成由exp_list描述的表达式(通常是优化问题的约束)MAX(setname(set_index_list)|cond_qualifier:exp):返回集合setname上的表达式exp的最大值MIN(setname(set_index_list)|cond_qualifier:e

16、xp):返回集合setname上的表达式exp的最小值SUM(setname(set_index_list)|cond_qualifier:exp):返回集合setname上的表达式exp的和PROD(setname(set_index_list)|cond_qualifier:exp):返回集合setname上的表达式exp的积四、集合操作函数集合操作函数是指对集合进行操作的函数,主要有INDEX,IN,WRAP,SIZE四种,下面简要介绍其作用INDEX(set_name,primitive_set_element):返回元素primitive_set_element在集合set_name

17、中的索引值(即按定义集合时元素出现顺序的位置编号)如果省略集合名set_name,LINGO按程序定义的集合顺序找到第一个含有元素primitive_set_element的集合,并返回索引值如果在所有集合中均没有找到该元素,会给出出错信息IN(set_name,primitive_index_1,primitive_index_2 .):判断一个集合中是否含有索引值集合set_name中包含由索引primitive_index_1,primitive_index_2.所表示的对应元素,则返回1(逻辑值“真”),否则返回0(逻辑值“假”)WRAP(INDEX,LIMIT):返回J=INDEX-

18、K*LIMIT,其中J位于区间1,LIMIT,K为整数当INDEX位于区间1,LIMIT内时直接返回INDEX相当于数学上用INDEX对LIMIT取模函数的值+1,即WRAP(INDEX,LIMIT)=MOD(INDEX,LIMIT)+1此函数对LIMIT1无定义可以想到,此函数的目得之一是防止集合的索引值越界SIZE(set_name):返回集合set_name的模,即元素的个数五、变量定界函数变量定界函数是对变量的取值范围加以限制的函数主要有BIN, BND, FREE, GIN四种,下面简要介绍其作用BIN(variable):限制变量variable为0或1BND(lower_boun

19、d, variable, upper_bound):限制lower_boundvariableupper_boundFREE(variable):取消对变量variable的符号限制(即可取负数、0或正数)GIN(variable):限制变量variable为整数六、财务会计函数财务会计函数是用于计算净现值的函数主要有FPA, FPL两种,下面简要介绍其作用FPA(I,N):返回若干时段单位等额回收净现值其中单位时段利率为I,时段N个,即FPL(I,N):返回一个时段单位回收净现值其中单位时段利率为I,时段N,即七、概率中的相关函数概率中的相关函数是涉及到概率论和随机过程中的一些函数主要有以下

20、函数:PSN(X):返回标准正态分布的分布函数在X点的取值PSL(X):标准正态的线性损失函数,即返回MAX(0,Z-X)的期望值,其中Z为均值为A的Poisson随机变量PPS(A,X):返回均值为A的Poisson分布的分布函数在X点的取值PPL(A,X):Poisson分布的线性损失函数,即返回MAX(0,Z-X)的期望值,其中Z为标准正态随机变量PBN(P,N,X):返回参数为(N,P)的二项分布的分布函数在X点的取值PHG(POP,G,N,X):返回总共有POP个球,其中G个是白球,随机地从中取出N个球,白球不超过X的概率PFD(N,D,X):返回自由度为N和D的F分布的分布函数在X

21、点的取值PCX(N,X):返回自由度为N的分布的分布函数在X点的取值PTD(N,X):返回自由度为N的t分布的分布函数在X点的取值PEB(A,X):返回当到达负荷(强度)为A,服务系统有X个服务器且允许无穷排队时的Erlang繁忙概率PEL(A,X):返回当到达负荷(强度)为A,服务系统有X个服务器且不允许排队时的Erlang繁忙概率PFS(A,X,C):返回当负荷上限为A,顾客数为C,并行服务器数量为X时,有限源的Poisson服务系统得等待顾客数的期望值QRAND(SEED):返回0与1之间的多个拟均匀随机数,其中SEED为种子,默认时取当前计算机时间为种子该函数只能用在数据段(DATA-

22、ENDDATA)RAND(SEED):返回0与1之间的一个伪均匀随机数,其中SEED为种子八、文件输入输出函数文件输入输出函数是指通过文件输入数据和输出结果的函数主要有以下函数:FILE(filename):这个函数提供LINGO与文本文件的接口,用于引用其它ASCII码或文本文件中的数据,其中filename为存放数据的文件名(包括路径,没有指定路径时表示当前目录),该文件中记录之间必须用符号“”分开主要用在集合段和数据段,通过文本文件输入数据TEXT(filename):用于数据段中将解答结果送到文本文件filename中ODBC(data_source,table_name,col_1,

23、 col_2.):这个函数提供LINGO与ODBC(open data base connection,开放式数据库连接)的接口,用于集合段和数据段中引用其它数据库数据或将解答结果送到数据库中其中data_source是数据库名,table_name是数据表名,col_i是数据列名(数据域名)OLE(spreadsheet_file,range_name_list):这个函数提供LINGO与OLE(object linking and embedding,对象链接与嵌入)的借口,用于集合段、数据段和初始段中输入和输出数据库其中spreadsheet_file是文件名,range_name_li

24、st是文件中包含数据的单元范围POINTER(N):在Windows下使用LINGO的动态链接库(dynamic link library ,DLL),直接从共享的内存中传送数据3.4 LINGO软件求解案例一、生产管理问题1问题实例某厂有5种设备A1,A2,A5,用来加工7种零部件B1,B2,B7,每种设备的数量、每种零部件的单位成本及所需各设备的加工工时(以小时计)见表1表1产品B1 B2 B3 B4 B5 B6 B7设备的数量收益 100 60 80 40 110 90 30A1A2A3A4A5 0.5 0.7 0 0 0.3 0.2 0.5 0.1 0.2 0 0.3 0 0.6 0

25、0.2 0 0.8 0 0 0 0.6 0.05 0.03 0 0.07 0.1 0 0.08 0 0 0.01 0 0.05 0 0.0542311在其后的半年中,工厂有设备检修计划(停工检修时间一个月)见表2表2一月二月三月四月五月六月A11台A32台A21台A21台A11台A31台工厂在半年中有订单(必须按时交货)见表3表3产品B1 B2 B3 B4 B5 B6 B7一月二月三月四月五月六月 250 500 150 150 400 100 100 300 250 100 0 200 150 100 150 300 0 0 250 200 100 100 150 200 250 100 0

26、 100 0 100 250 100 500 150 0 250 250 100 300 550 250 100每种零部件库存最多可到100件,现每种零部件有库存80件,库存费用每件每月为0.5元,要求到六月底每种零部件有存货50件,每种零部件生产至少50件工厂每周工作5天,每天2班,每班8小时试回答如下问题:(1) 工厂如何安排各月份各种零部件的加工数量?(2) 单位成本有10%的变化,对计划有什么影响?(3) 设备各增加1台对计划有什么的影响2模型建立设: 为第种零部件在第种设备上的单位加工工时;为第种设备在第月的数量;为第月第种零部件的顶单数量;为第种零部件的单位收益;为第月第种零部件的

27、生产数量;为第月末第种零部件的库存数量;为初始库存假设每月以20天计,有以下模型:3模型求解利用LINGO软件计算,输入model: sets: cp/1.7/:c; yf/1.6/:; sb/1.5/:; sl1(yf,cp):x,d,s; sl2(sb,cp):a; sl3(sb,yf):b; endsets data: a=0.5 0.7 0.0 0.0 0.3 0.2 0.5 0.1 0.2 0.0 0.3 0.0 0.6 0.0 0.2 0.0 0.8 0.0 0.0 0.0 0.6 0.05 0.03 0 0.07 0.1 0 0.08 0 0 0.01 0 0.05 0 0.05

28、; b=3 4 4 4 3 4 2 2 1 1 1 2 3 1 3 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1; d=250 500 150 150 400 100 100 300 250 100 0 200 150 100 150 300 0 0 250 200 100 100 150 200 250 100 0 100 0 100 250 100 500 150 0 250 250 100 300 550 250 100; c=100 60 80 40 110 90 30; enddata min=sum(sl1(k,j):c(j)*x(k,j)+0.5*s(k,j); f

29、or(yf(k):for(sb(i):sum(cp(j):a(i,j)*x(k,j)=320*b(i,k); for(yf(k)|k#gt#1:for(cp(j):s(k,j)=s(k-1,j)+x(k,j)-d(k,j); for(cp(j):s(1,j)=80+x(1,j)-d(1,j); for(cp(j):s(6,j)=50);for(sl1(k,j):s(k,j)=50);end(1)计算结果有:目标函数: 产品生产B1 B2 B3 B4 B5 B6 B7一月二月三月四月五月六月 170 420 70 70 320 50 50300 250 100 50 200 120 70 150 300 50 50 250 200 100 100 150 150 150 100 50 100 50 100 250 100 500 100 50 250 300 150 350 600 300 100 产品库存B1 B2 B3 B4 B5 B6 B7一月二月三月四月五月六月 0 0 0 0 0 30 30 0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1