Lingo软件编程求解规划问题数学建模_第1页
Lingo软件编程求解规划问题数学建模_第2页
Lingo软件编程求解规划问题数学建模_第3页
Lingo软件编程求解规划问题数学建模_第4页
Lingo软件编程求解规划问题数学建模_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Lingo软件编程求解规划问题什么是规划问题?求目标函数在约束条件下的最大值或最小值的问题,统称为规划问题。决策变量、约束条件、目标函数是线性规划的三要素. 主要解决最优生产计划、最优分配、最优设计、最优决策、最佳管理等最优化问题。线性规划非线性规划实数规划整数规划0-1规划例1加工奶制品的生产计划获利24元/公斤 获利16元/公斤 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 每天:每天:一奶制品加工厂用牛奶生产 A1,A2两种奶制品,1 桶牛奶可以在甲车间用12 小时加工成 3 公斤 A1,或者在乙车间

2、用 8 小时加工成 4 公斤 A2。根据市场需求,生产的 A1,A2全部能售出,且每公斤 A1获利 24 元,每公斤 A2获利 16 元。现在加工厂每天能得到 50 桶牛奶的供应,每天正式工人总的劳动时间 480 小时,并且甲车间每天至多能加工 100 公斤 A1,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大.并进一步讨论以下3个附加问题: 1) 若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶? 2) 若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3) 由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?

3、例1加工奶制品的生产计划获利24元/公斤 获利16元/公斤 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 每天:每天:x1桶牛奶生产桶牛奶生产A1 x2桶牛奶生产桶牛奶生产A2 获利获利 243x1 获利获利 164 x2 原料供应原料供应 5021 xx劳动时间劳动时间 48081221 xx加工能力加工能力 10031x决策变量决策变量 目标函数目标函数 216472xxzMax每天获利每天获利约束条件约束条件非负约束非负约束 0,21xx线性规线性规划模型划模型(LP)例1加工奶制品的生产计划00100

4、3480812502112121xxxxxxx216472xxz求 的最大值?-10010203040506070-10010203040506070Linear programx1x2O 3x1=100 x1+x2=50 12x1+8x2=480z=72x1+64x2=720001003480812502112121xxxxxxx216472xxz求 的最大值?用Lingo软件求解Lingo结果中其它项的意思!更多信息例1加工奶制品的生产计划 例例 1 1 求 f = 2xexsin在 0 x8 中的最小值与最大值 max=sin(x)*2*exp(-x);x0;Lingo软件LINGO H

5、elp: LINGO is a simple tool for utilizing the power of linear and nonlinear optimization to formulate large problems concisely, solve them, and analyze the solution. Optimization helps you find the answer that yields the best result; attains the highest profit, output, or happiness; or the one that

6、achieves the lowest cost, waste, or discomfort. Often these problems involve making the most efficient use of your resourcesincluding money, time, machinery, staff, inventory, and more.Lingo 是一个可以简洁地阐述、解决和分析复杂问题的简便工具。其特点是程序执行速度很快,易于输入、修改、求解和分析一个数学规划问题。lingo软件擅长于解决运筹问题,即最有问题,常见的是线性规划。软件擅长于解决运筹问题,即最有问

7、题,常见的是线性规划。而而matlab则功能比较多,主要是以矩阵为基础的运算,也能解决运筹问题。则功能比较多,主要是以矩阵为基础的运算,也能解决运筹问题。 matlab 的功能更强大一些的功能更强大一些 ,也比较难学,东西多,也比较难学,东西多lingo主要用于优化问题,主要用于优化问题,matlab功能强大,几乎什么都能做,但是碰到循环时速度较慢,而且对机器要求较高,功能强大,几乎什么都能做,但是碰到循环时速度较慢,而且对机器要求较高,lingo主要用以解线性规划,方程之类,使用比主要用以解线性规划,方程之类,使用比matlab简单,解决线性问题速度也不错,简单,解决线性问题速度也不错,有些

8、东西不能做。不过现在国外有将有些东西不能做。不过现在国外有将2者结合的。者结合的。matlab都能解,就是麻烦点都能解,就是麻烦点LINGO是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。具。LINGO提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。原则上还是lingo要快,特别是变量较多的时候,但是这里面不能比较非线性规划,因为非线性规划的求解速度不仅取决于问题的规模,还要看非线性程度以及初始. 简单的模型表示LINGO可以将线性、非线性和整

9、数问题迅速得予以公式表示,并且容易阅读、了解和修改。 方便的数据输入和输出选择LINGO建立的模型可以直接从数据库或工作表获取资料。同样地, LINGO可以将求解结果直接输出到数据库或工作表。 强大的求解引擎LINGO内建的求解引擎有线性、非线性(convex and nonconvex)、二次、二次限制和整数最佳化。 Model Interactively or Create Turn-key ApplicationsLINGO提供完全互动的环境供您建立、求解和分析模型。LINGO也提供DLL和OLE界面可供使用者由撰写的程序中呼叫。0 Global Optimum(全局最优)1 Infea

10、sible(不可行)2 Unbounded(无界)3 Undetermined(不确定)4 Feasible(可行)5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)6 Local Optimum(局部最优)7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)8 Cutoff(目标函数的截断值被达到)9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止) LP:线性规划 linear programming QP 二次规划 NLPNONLINE

11、AR PROGRAMMING ILP 线性整数 IQP 二次整数 PILP 线性纯整数 PIQP 二次纯整数 NLP 非线性 NLPNONLINEAR PROGRAMMING INLP 整数非线性 PINLP 纯整数非线性例2军队供给问题corps需求量3537223241324338拥有量B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143军队有某种先进武器302台分别放在6个补给站(depot)中,现由于战争需要,8个军团(corps)分别需要此种武器数目如

12、表中所示,并且给出了从各补给站送一台武器到任一军团的费用,问如何运输可使成本最小?capacity (i)V(i)demand (j)d(j)cost (i , j)c(i,j)number (i , j)n(i,j)例2军队供给问题corps需求量3537223241324338拥有量B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143capacity (i)V(i)demand (j)d(j)cost (i , j)c(i,j)number (i , j)n

13、(i,j) .8 , 1 ,6 , 1 ,8 , 1,6 , 1 . . min61816181jjdNiiVNjiNNtsCNTCiijjijijijijij例2军队供给问题用Lingo软件求解结果Lingo软件 集合段(集合段(SETS ENDSETS) 目标与约束段目标与约束段 数据段(数据段(DATA ENDDATA) 初始段(初始段(INIT ENDINIT)LINGO模型的构成:模型的构成:4个段个段Lingo 是一个可以简洁地阐述、解决和分析复杂问题的简便工具。其特点是程序执行速度很快,易于输入、修改、求解和分析一个数学规划问题。Lingo软件集合概念概念 集是相联系的对象的集合

14、,比如工厂、消费者群体、交通工具集是相联系的对象的集合,比如工厂、消费者群体、交通工具和雇工等等;和雇工等等; 集是集是 LINGO 建模语言的基础,是程序设计最强有力的基本构建模语言的基础,是程序设计最强有力的基本构件目标与约束段;件目标与约束段; 借助于集,能够用一个单一的、长的、简明的复合公式表示一借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型;系列相似的约束,从而可以快速方便地表达规模较大的模型; 集有成员和属性。集有成员和属性。 集部分集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。

15、集部分以关键字“sets:”开始,以“endsets”结束。 一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。 Lingo软件基本集合元素的列举setname /member_list/ : attribute_list;sets: students/John Jill, Rose Mike/: sex, age; endsets 一个原始集是由一些最基本的对象组成的。 集、集成员和集属性 集成员无论用何种字符标记,它的索引都是从1开始连续计数。 在attribute_ list可以指定一

16、个或多个集成员的属性,属性之间必须用逗号隔开。 定义一个原始集,用下面的语法: setname/member_list/:attribute_list;注意:用“”表示该部分内容可选。下同,不再赘述。 Setname是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(AZ)、下划线、阿拉伯数字(0,1,9)组成的总长度不超过32个字符的字符串,且不区分大小写。注意:该命名规则同样适用于集成员名和属性名等的命名。Member_list是集成员列表。采取显式罗列和隐式罗列两种方式。 类型类型隐式列举格式隐式列举格式示例示

17、例示例集合的元素示例集合的元素数字型数字型 1.n1.51, 2, 3, 4, 5字符字符-数字型数字型stringM.stringNCar101.car208Car101, car102, , car208星期型星期型 dayM.dayNMON.FRIMON, TUE, WED, THU, FRI月份型月份型 monthM.monthNOCT.JANOCT, NOV, DEC, JAN年份年份-月份型月份型monthYearM.monthYearNOCT2001.JAN2002OCT2001, NOV2001, DEC2001, JAN2002Lingo软件基本集合元素的隐式列举集成员不放在

18、集定义中,而在随后的数据部分来定义。 sets: students:sex,age; endsets data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata 注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。Lingo软件派生集setname(parent_set_list) /member_list/: attribute_list;一个派生集是用一个或多个其它集来定义的。也就是说,它的成员来自于其它已存在的集。稠密集:稠密集:派生集成员由父集成员所有组合构成; 稀疏集:稀疏集:其成员为父集

19、成员所有组合构成的集合的一个子集。显式:links (depot, corps)/d1 c2,d2 c3,d3 c6,d4 c3,d5 c1,d6 c8/:cost, number;过滤:links (depot, corps) |capacity( &1) #ge# demand ( &2):cost;派生集的成员列表有两种方式生成:显式罗列;设置成员资格过滤器。 sets: product/A B/; machine/M N/; week/1.2/; allowed(product,machine,week):x;endsetsLINGO生成了三个父集的所有组合共八组作为allowed集的

20、成员。列表如下:编号 成员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)例例sets: !学生集:性别属性sex,1表示男性,0表示女性;年龄属性age. ; students/John,Jill,Rose,Mike/:sex,age; !男学生和女学生的联系集:友好程度属性friend,0,1之间的数。 ; linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend; !男学生和女学生的友好程度大于0.5的集; li

21、nkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;endsetsdata: sex,age = 1 16 0 14 0 17 0 13; friend = 0.3 0.5 0.6;enddata用竖线(|)来标记一个成员资格过滤器的开始。#eq#是逻辑运算符,用来判断是否“相等”,可参考4. &1可看作派生集的第1个原始父集的索引,它取遍该原始父集的所有成员;&2可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成员;&3,&4,以此类推。 集合集合 派生集合派生集合 基本集合基本集合 稀疏集合稀疏集合 稠密集合稠密集合 元素列表法元素列表法 元素

22、过滤法元素过滤法 直接列举法直接列举法 隐式列举法隐式列举法Lingo软件集合setname /member_list/ : attribute_list;setname(parent_set_list) /member_list/: attribute_list;Lingo软件数据段与初始段数据段:数据段:输入集成员和数据,提供了模型相对静止部分和数据分离的可能性。 object_list = value_list; 对象列数值列;初始段:初始段:为决策变量设置初始值。在初始部分输入的值仅被 LINGO 求解器当作初始点来用,并且仅仅并且仅仅对非线性模型有用对非线性模型有用。和数据部分指定变

23、量的值不同,LINGO求解器可以自由改变自由改变初始部分初始化的变量的值。以“init:”开始,以“endinit”结束。初始部分的初始声明规则和数据部分的数据声明规则相同。 sets: set1/A,B,C/: X,Y; endsets data: X,Y=1 4 2 5 3 6; enddatadata: X=1,2,3; Y=4,5,6;enddata和数据部分指定变量的值不同,LINGO求解器可以自由改变初始部分初始化的变量的值。 例例 init: X, Y = 0, .1; endinit Y=log(X); X2+Y2=1;优先级优先级运算符运算符最高最高#NOT# (负号)(负号

24、)* /+ (减法)(减法)#EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR#最低最低(=)三类运算符:三类运算符: 算术运算符算术运算符 逻辑运算符逻辑运算符 关系运算符关系运算符Lingo软件运算符与优先级主要用于集循环函数的条件表达式中形成模型的一个约束条件,指定一个表达式的左边是否等于、小于等于、或者大于等于右边。针对数值进行操作#not# 否定该操作数的逻辑值,not是一个一元运算符#eq#若两个运算数相等,则为true;否则为flase#ne# 若两个运算符不相等,则为true;否则为flase#gt# 若左边的运算符严格大于右边的运算符,则为true

25、;否则为flase#ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase#lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase#le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and# 仅当两个参数都为true时,结果为true;否则为flase#or# 仅当两个参数都为false时,结果为false;否则为trueLingo软件函数abs(x)返回 x 的绝对值sin(x)返回 x 的正弦值,x 采用弧度制cos(x)返回 x 的余弦值tan(x)返回 x 的正切值exp(x)返回常数 e 的 x 次方log(x)返

26、回 x 的自然对数lgm(x)返回 x 的 gamma 函数的自然对数sign(x)如果 x=0 时,返回不超过 x 的最大整数;当 x0 时,返回不低于 x 的最大整数。smax(x1,x2,xn)返回 x1,x2,xn 中的最大值smin(x1,x2,xn)返回 x1,x2,xn 中的最小值数学函数Lingo软件函数变量定界函数bin(x)限制 x 为 0 或 1bnd(L,x,U)限制 LxUfree(x)取消对变量 x 的默认下界为 0 的限制,即 x 可以取任意实数gin(x)限制 x 为整数min和max返回指定的集成员的一个表达式的最小值或最大值。qrand(seed)产生服从(

27、0,1)区间的拟随机数。qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个mn的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。例例4.5 model:data: M=4; N=2; seed=1234567;enddatasets: rows/1.M/; cols/1.N/; table(rows,cols): x;endsetsdata: X=qrand(seed);enddataend如果没有为函数指定种子,那么LINGO将用系统时间构造种子。dat

28、a: N=6;enddatasets: number/1.N/:x;endsetsdata: x = 5 1 3 4 6 10;enddata minv=min(number(I) | I #le# 5: x); end 输入和输出函数输入和输出函数 1file函数函数 该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为file(filename)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。 例例 以例1.2来讲解file函数的用法。注意到在例1.2的编码中有两处涉及到数据。第一个地方是集部分的6个warehouses集成员和8个vendors

29、集成员;第二个地方是数据部分的capacity,demand和cost数据。为了使数据和我们的模型完全分开,我们把它们移到外部的文本文件中。修改模型代码以便于用file函数把数据从文本文件中拖到模型中来。修改后(修改处代码黑体加粗)的模型代码如下:model:!6发点8收点运输问题;sets: warehouses/ file(1_2.txt) /: capacity; vendors/ file(1_2.txt) /: demand; links(warehouses,vendors): cost, volume;endsets!目标函数; min=sum(links: cost*volum

30、e);!需求约束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!产量约束; for(warehouses(I): sum(vendors(J): volume(I,J)= required(J);end例 Lingo与Excel的连接corps需求量3537223241324338拥有量B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143capacity (i)V(i)demand (j)d

31、(j)cost (i , j)c(i,j)number (i , j)n(i,j) .8 , 1 ,6 , 1 ,8 , 1,6 , 1 . . min61816181jjdNiiVNjiNNtsCNTCiijjijijijijij3、ole函数 是从 EXCEL 中引入或输出数据的接口函数,它是基于传输的 OLE 技术。OLE传输直接在内存中传输数据,并不借助于中间文件。例3Lingo与Excel的连接OLE 可以同时读集成员和集属性(读写)OLE 只能读一维或二维的 Ranges绝对路径 ole(data.xls);相对路径 ole(D:data.xls);例题00100348081250

32、2112121xxxxxxx216472xxz求 的最大值?用Lingo软件求解Lingo结果中其它项的意思!更多信息例1加工奶制品的生产计划Global optimal solution found at iteration: 3 Objective value: 280.0000 Variable Value Reduced Cost DESKS 2.000000 0.000000 TABLES 0.000000 5.000000 CHAIRS 8.000000 0.000000 Row Slack or Surplus Dual Price 1 280.0000 1.000000 2 2

33、4.00000 0.000000 3 0.000000 10.00000 4 0.000000 10.00000 5 5.000000 0.000000 “Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。 其中基变量的reduced cost值应为0, 对于非基变量 Xj, 相应的 reduced cost值表示当某个变量Xj 增加一个单位时目标函数减少的量( max型问题)。本例中:变量tables对应的reduced cost值为5,表示当非基变量tables的值从0变为 1时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值 = 280 - 5 = 275。“Value”给出最优解中各变量的值:造2个书桌(desks), 0个餐桌(tables), 8个椅子(chairs)。所以desks、chairs是基变量(非0),tables是非基变量(0)。 灵敏度的分析灵敏度分析的结果是Ranges in which the basis is unchanged: Objective Coefficie

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论