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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Lingo教程.docx

1、Lingo教程LINGO教程 LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。1 LINGO快速入门 安装:实验室的所有电脑都已经事先安装好了Lingo 8(或者9, 10, 11)。如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的, 按照提示一步一步地安装完毕。 简单例子:当你在windows系统下开始运行LINGO时,会得到类似于下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Mo

2、del LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。下面举两个例子。例 1 某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。 产品I产品II设备 1 28台时原材料A 4 016kg原材料B 0 412kg该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。设x_1、x_2分别表示在计划期内产品I、II的产量。因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台

3、时数,即可用不等式表示为x_1 + 2x_2 =8同理,因原材料A、B的限量,可以得到以下不等式4x_1 =164x_2 =12该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数 max z=2x_1+3x_2约束条件 x_1 + 2x_2 =84x_1 =164x_2 =0一般来说,一个优化模型将由以下三部分组成:1. 目标函数(Objective Function):要达到的目标。2. 决策变量(Decision variables):每组决策变量的值代表一种方

4、案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码:Max = 2*x1+3*x2;!This is a linear program.X1+2*x2=8;4*x116;4*x212;注意:1.每一个lingo表达式最后要跟一个分号; 2.多数电脑中没有符号,lingo中=代替;为了方便可以用代替大于等于。3.我们可以添加一些注释,增加程序的可读性。注释以

5、一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。4Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。点击工具栏上的按钮或者用Lingo菜单下的solve求解这个模型,如果模型没有语法错误,即可得到如下结果。 Global optimal solution found. 已经找到全局最优解 Objective value: 14.00000 目标函数值 Infeasibilities: 0.000000 不可行的约束数 Total solver iterations: 1 迭代次数 Vari

6、able Value Reduced Cost X1 4.000000 0.000000 X2 2.000000 0.000000 Row Slack or Surplus Dual Price 1 14.00000 1.000000 2 0.000000 1.500000 3 0.000000 0.1250000 4 4.000000 0.000000Reduced Cost()非基变量变为基变量时目标函数的系数必须的增加值。Dual Price(对偶价格或者影子价格)在编译阶段没有语法错误,lingo会调用内部的求解器开始为你的模型搜索最优解,还最后会显示一个求解状态窗口:求解状态窗口内各

7、项:Variables Box(变量框) Total: 模型中的变量总个数 (total number of variables in the model) Nonlinear: 模型中非线形变量的个数(the number of the total variables that are nonlinear)注: X * X + Y = 100; 中X是非线性变量,Y是线性变量。 Integer: 模型中整数变量的个数(total number of integer variables in the model)注意:计算各种变量个数时,不计算可以确定变量值的变量。如:如果约束条件中x=10,

8、那么这个变量不被看做是一个变量Constraints Box Total:所有的约束条件个数(total constraints in the expanded model) Nonlinear:所有的非线性约束的个数(the number of these constraints that are nonlinear)Nonzeroes Box(约束框)Total:模型中非零系数的个数。Nonlinear:非线性变量个数。如果一个约束条件里中的所有变量都是确定的,则约束条件不进行计数。The Nonzeros box shows the total nonzero coefficients

9、in the model and the number of these that appear on nonlinear variablesNonzeroes Box(非零框)显示该模型的总非零系数和非线性的这些变量出现的数目。Generator Memory Used Box求解时使用的内存量Elapsed Runtime Box求解模型时用的时间,这个会受电脑运行的其他程序的影响。Solver Status BoxFieldDescriptionModel ClassDisplays the models classification. Possible classes are LP(线

10、性规划), QP(二次规划), ILP(整数线性规划), IQP(整数二次规划), PILP(纯整数线性规划), PIQP(纯整数二次规划), NLP(非线性规划), INLP(整数非线性规划), and PINLP(纯整数非线性规划).StateGives the Status of the current solution. Possible states are Global Optimum(全局最优), Local Optimum(局部最优), Feasible(可行), Infeasible(不可行), Unbounded(无界), Interrupted(中断), and Unde

11、termined(不确定).Objective目标函数的当前值Current value of the objective function.Infeasibility约束条件冲突的个数IterationsNumber of solver iterations.(算法的迭代次数)Extended Solver Status BoxFieldDescriptionSolver TypeThe type of specialized solver in use, and will be either B-and-B(分支定界法), Global(全局最优求解法), or Multistart(多个

12、初始点求解法).Best ObjThe objective value of the best solution found so far.(目前得到的最优解对应的目标函数值)Obj BoundThe theoretical bound on the objective.(目标函数值的理论上下界)StepsThe number of steps taken by the extended solver.(特殊的几种求解程序运行的步骤数:如分支定界法已求解的分支数,全局最优法已求解的子问题数)ActiveThe number of active subproblems remaining to

13、be analyzed(有效的步数)。Lingo程序的一些规则:1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。2. 变量和它前面的系数之间要用“*”连接, 中间可以有空格。3. 变量名不区分大小写,但必须以字母开始, 不超过32个字符。4. 数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“=”表示“大于等于”。小于等于也可以用更简单的“”表示。Lingo模型语言:例1.2 运输问题使用LINGO软件计算6个仓库8个销售地的最小费用运输问题。产销单

14、位运价如下表。单位 销地运价产地V1V2V3V4V5V6V7V8库存量WH16267425960WH24953858255WH35219743351WH47673927143WH52395726541WH65522814352需求量3537223241324338设VOLUME_i_j为从仓库i运送到销售地j那里的货物量, 那么我们的目标函数可以表示为:MIN = 6 * VOLUME_1_1 + 2 * VOLUME_1_2 + 6 * VOLUME_1_3 + 7 * VOLUME_1_4 + 4 * VOLUME_1_5 +.8 * VOLUME_6_5 + VOLUME_6_6 + 4

15、 * VOLUME_6_7 +3 * VOLUME_6_8;这里我们只列出了48个项中的9项,输入这么多的数据非常麻烦,而且容易出错。而运用Lingo提供的模型语言则可以很容易的来描述这个目标函数,而且很容易扩充模型。在数学上可以用数学符号表示目标函数为:Minimize ij COST ij VOLUME ij运用Lingo模型语言来描述上面的目标函数,这样的描述简短,容易输入,容易读,更容易理解。MIN = SUM( LINKS(I,J): COST(I,J) * VOLUME(I,J);也就是说,在仓库和销售地之间的所有可能运送调价下求运送总运费最小。下面比较一些数学表述和Lingos的

16、语法Math NotationLINGO SyntaxMinimizeMIN =ijSUM( LINKS( I, J): )COST ijCOST(I,J)*VOLUME ijVOLUME(I,J)接下来看约束条件:在模型里有两类约束,第一类是销售地要得到需要的货物量,我们称这类约束为需求约束。第二类称为容量限制,每个仓库运出的货物量不能大于它的库存量。先考虑第一个销售地的约束,VOLUME_1_1 + VOLUME_2_1 + VOLUME_3_1 +VOLUME_4_1 + VOLUME_5_1 +VOLUME_6_1 = 35;剩下还要输入7个类似的约束。用运用数学符号表述这个约束:i

17、VOLUMEij = DEMANDj, 对每个销售地j成立。对应的Lingo模型语言描述是:FOR( VENDORS( J): SUM( WAREHOUSES( I): VOLUME( I, J) = DEMAND( J);比较一些数学符号和Lingo语法Math NotationLINGO Syntax对于每个销售地jFOR( VENDORS( J): iSUM( WAREHOUSES( I): VOLUME ijVOLUME( I, J)=DEMAND jDEMAND( J);类似的仓库的容量限制用Lingo语言描述为:FOR( WAREHOUSES( I):SUM( VENDORS( J

18、): VOLUME( I, J)=CAPACITY( I);目前我们得到下面的Lingo模型:MODEL:MIN = SUM( LINKS( I, J): COST( I, J) * VOLUME( I, J);FOR( VENDORS( J): SUM( WAREHOUSES( I): VOLUME( I, J) = DEMAND( J);FOR( WAREHOUSES( I): SUM( VENDORS( J): VOLUME( I, J) = CAPACITY( I); End但是我们还要定义一些变量。集合段:在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEM

19、AND( J), LINKS( I, J)。这些量将在Lingo中的集合段定义。集合段以SETS:表示开始,以ENDSETS表示结束。如果一个集合的元素都已经定义过,就可以用一些循环函数(如for).上面的三个集合在Lingo的集合段定义为:SETS: WAREHOUSES: CAPACITY; VENDORS: DEMAND; LINKS(WAREHOUSES, VENDORS): COST, VOLUME; ENDSETSWAREHOUSES: CAPACITY;这一句表示在集合WAREHOUSES上有一个属性CAPACITY,即每个仓库都有一个容量属性。VENDORS: DEMAND;这

20、一句表示在集合VENDORS上有一个DEMAND的属性,即每个销售地有一个货物需求量的属性。LINKS( WAREHOUSES, VENDORS): COST, VOLUME;这个集合表示的是运送网络的关系,而每个关系有COST 和VOLUME的属性,即单位运货量的运费和运量的属性。第三个集合Link的定义和前两个不同,他们是由前两个派生出来的,是前面连个集合的笛卡尔积。注:1. 集合的属性相当于以集合的元素为下标的数组。Lingo中没有数组的概念,只有定义在集合上的属性的概念。2 集合的定义语法:set_name/set_member/:attribute_list;集合的名称在左边,右边是

21、这个集合上的属性,他们之间用冒号“:”分割开,最后由分号表示结束。如果在同一个集合上有多个属性时,不同的属性之间用逗号“,”隔开,如本例的cost和volume属性。 如果要特别列出集合的元素时,在集合的名称后把元素写在两条斜线之间,如本例中的仓库可以写为WAREHOUSES/WH1, WH2, WH3, WH4, WH5, WH6/: CAPACITY;也可以写为WAREHOUSES/WH1.WH6/: CAPACITY;Lingo会自动生成需要的集合元素。集合段的具体定义在后面详述。数据段:数据段以DATA:开始,以ENDDATA表示数据段结束。DATA: !attribute value

22、s; CAPACITY = 60 55 51 43 41 52; DEMAND = 35 37 22 32 41 32 43 38; COST = 6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; ENDDATA在本例中有三种已知数据,容量CAPACITY、需求量DEMAND,单位运费COST。注意:在给类似link这样的集合赋值时,外边的指标先增加。使用LINGO软件,编制程序如下:MODEL:! A 6 Warehouse 8 Vendor Tra

23、nsportation Problem;SETS: WAREHOUSES/Wh1.Wh6/: CAPACITY; VENDORS/V1.v8/: DEMAND; LINKS( WAREHOUSES, VENDORS): COST, VOLUME;ENDSETS! Here is the data;DATA: !attribute values; CAPACITY = 60 55 51 43 41 52; DEMAND = 35 37 22 32 41 32 43 38; COST = 6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3

24、 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3;ENDDATA! The objective; MIN = SUM( LINKS(I, J): COST(I, J) * VOLUME(I, J);! The demand constraints; FOR( VENDORS( J): SUM( WAREHOUSES(I): VOLUME( I, J) = DEMAND(J);! The capacity constraints; FOR( WAREHOUSES(I): SUM( VENDORS(J): VOLUME(I, J) = CAPACITY(I);End

25、最后点击按钮求解。注:1. Longo模型以model:表示模型开始,以end表示模型结束。2. 叹号为lingo的注释符,以分号表示注释结束。注释可以写在多行,一般显示为绿色。3. 如果只想看到求解结果中的非零部分,可以在菜单中选择solution,在属性或行名称下拉框中选择volume,在勾选Nonzeros复选框。Lingo中允许命名约束条件的名称,这样做可以使得我们的求解报告更容易阅读,还可以使得我们查找错误的时候更容易(但命名不是必须的)。命名放在一个方括弧里,插入到约束的最开始部分。MODEL:! A 6 Warehouse 8 Vendor Transportation Prob

26、lem;SETS: WAREHOUSES: CAPACITY; VENDORS: DEMAND; LINKS( WAREHOUSES, VENDORS): COST, VOLUME;ENDSETSDATA: !set members; WAREHOUSES = WH1 WH2 WH3 WH4 WH5 WH6; VENDORS = V1 V2 V3 V4 V5 V6 V7 V8; !attribute values; CAPACITY = 60 55 51 43 41 52; DEMAND = 35 37 22 32 41 32 43 38; COST = 6 2 6 7 4 2 5 9 4 9

27、 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3;ENDDATA! The objective; OBJECTIVE MIN = SUM( LINKS( I, J): COST( I, J) * VOLUME( I, J);! The demand constraints; FOR( VENDORS( J): DEMAND_ROW SUM( WAREHOUSES( I): VOLUME( I, J) = DEMAND( J);! The capacity constraints; FOR(

28、WAREHOUSES( I): CAPACITY_ROW SUM( VENDORS( J): VOLUME( I, J) = CAPACITY( I);END2 LINGO中的集对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。2.1 为什么使用集集是LINGO建模语言的基础,是程序设计最强有力的基本构件。

29、借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么是集集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。LINGO有两种类型的集:原始集(primitiveset)和派生集(derived set)。一个原始集是由一些最基本的对象组成的。一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。2.3 模型的集部分集部分是LINGO模型的一个可选部分。在LING

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

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