lingo.软件应用及个人思考.ppt_第1页
lingo.软件应用及个人思考.ppt_第2页
lingo.软件应用及个人思考.ppt_第3页
lingo.软件应用及个人思考.ppt_第4页
lingo.软件应用及个人思考.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、浅谈lingo,建模工作室,陈楚璇,2013.11.20,问题:,解:通过分析可以得出方案,如下表,某单位需要加工制作100套工架,每套工架需要长为2.9m,2.1m,1.5m的圆钢各一根。已知原材料长7.4m,现在问题是如何下料使得所用的原材料最省?,在这里要求的就是在完成这一百套工架的情况下原材料最省,设按方案A,B,C,D,E下料的原材料数分别为 根据表可得到下面模型,clear;clc;close all c=0,0.1,0.2,0.3,0.8; b1=0,0,0,0,0; b2=100,100,100; A1=-1,0,0,0,0;0,-1,0,0,0;. 0,0,-1,0,0;0,

2、0,0,-1,0;0,0,0,0,-1; A2=1,2,0,1,0;0,0,2,2,1;3,1,2,0,3; x,fv=linprog(c,A1,b1,A2,b2),x = 12.8243 27.1757 17.1757 32.8243 0.0000 fv =16.0000,A1不等式变量的系数 b1不等式右边的值 A2等式变量的系数 B2等式右边的值,至此,你们觉得右边这些数据可行吗?,然后你们有何想法呢?如何处理?,整数规划,针对该问题,实际上圆钢是不是应该是整数呢?对此你如何解决呢?,四舍五入? 那么x=(13,27,17,33,0)T,那么现在就是整数了! 然而你们觉得这样合适吗?有何

3、想法呢?,那请你看看下面这个方法可否?,model: sets: row/1,2,3/:b; arrange/1.5/:x,c; link(row,arrange):a; endsets data: b=100,100,100; c=0,0.1,0.2,0.3,0.8; a=1,2,0,1,0,0,0,2,2,1,3,1,2,0,3; enddata OBJmin=sum(arrange(j):c(j)*x(j); for(row(i):sum(arrange(j):a(i,j)*x(j)=b(i); for(arrange(j):x(j)=0); end,解得x=(30,10,0,50,0)

4、,最优值z=16,程序,这两种方法的结果是不同的,显然此问题的最优解并非唯一的,用其他方法求解会得到其他最优解,但用matlab不能得到整数解Vpa,一般用四舍五入的方法解出来也是不恰当的 那么,你们是不是觉得应该用第二种求解方法呢?那咱们就一起走进优化世界吧!,LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。可用于一些线性和非线性问题的求解等,是求解优化模型的最佳选择。,百度百科:lingo简介,百度百科:lingo简介,Lingo的特色: 既能求解线性规划问题,也有较强的求解非线性规划问题的能力; 输入

5、模型简练直观; 在于内置建模语言,提供十几个内部函数从而能以较少语句,较直观的方式描述较大规模的优化模型; 将集合的概念引入编程语言,很容易将实际问题转换为Lingo模型; 可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。 能方便与EXCEL,数据库等其他软件交换数据。 最新版本 LINGO 14.0已经发布。,优化类型,连续优化:全部决策变量取值均连续数值(实数),离散优化:部分或全部决策变量只取离散值,线性规划(LP):目标和约束均为线性函数 非线性规划(NLP):目标或约束中有非线性函数 二次规划(QP):目标为二次函数、约束为线性,整数规划(

6、IP):决策变量(全部或部分)为整数 整数线性规划(ILP),整数非线性规划(INLP) 纯整数规划(PIP),混合整数规划(MIP) 一般整数规划,0-1(整数)规划(ZOP),优化模型需要注意的几个基本问题:,尽量使用实数优化模型,尽量减少整数整数变量的个数 尽量使用光滑优化模型,尽量避免使用非光滑函数(指不可微点) 尽量使用线性优化模型,尽量减少使用非线性约束和非线性变量的个数 合理设定变量的上下届,尽可能给出变量的初始值 模型中使用的单位的数量级要适当,Lingo软件基本认识,例:加工奶制品的生产计划,每天:最多50桶牛奶 时间480小时 至多加工100公斤A,制定生产计划,使每天获利

7、最大!,35元可买到1桶牛奶,买吗? 可聘用临时工人,付出的工资最多是几 元/每小时? A获利增加到30元/公斤,应否改变生产计划?,决策变量,目标函数,约束条件,桶牛奶生产A 桶牛奶生产B,获利,获利,每天获利,原料供应 劳动时间 加工能力 非负约束,线性规划模型(LP),软件实现: model: max=72*x1+64*x2; x1+x250; 12*x1+8*x2480; 3*x1100; end,模型求解,20桶牛奶生产A,30桶牛奶生产B,利润3360元,程序,Reduced cost值表示当相应变量增加一个单位时(其他变量保持不变)目标函数减少(增加)的量对max(min)型问题

8、,原料无剩余0 时间无剩余0 加工能力剩余40,结果分析:,三种资源,Slack(松弛:小于等于) or Surplus(剩余:大于等于):松驰变量值(即约束离相等差多少),松弛或剩余,最优解下“资源”增加1单位时“效益”的增量 原料增加1单位,利润增长48 时间增加1单位,利润增长2 加工能力增长不影响利润,对偶价格或影子价格,因为3548,则应该以35元/桶的价格购买,聘用临时工付出的工资最多2元/小时,即不等式右端增加一个单位相应增加(减少)的值max(min)型问题,Lingo 集合和函数,集合段 数据输入段 九类函数,集合段,集部分是LINGO模型的一个可选部分,在使用之前必须事先定

9、义。,以关键字“sets:”开始,以“endsets”结束。,一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方。,sets: . endsets,基本集合 定义一个原始集的语句: setname/member_list/:attribute_list; 集的名字/可选,集的成员/可选,集成员的属性,示例: 定义一个名为friend的基本集合,它具有成员John、Jill、Rose和Mike,属性有sex和age,sets:friend/John Jill,Rose Mike/:sex,age;endsets,sets:friend/1.1000/

10、:sex,age;endsets,派生集合定义一个原始集的语句:setname(parent_set_list)/member_list/:attribute_list; setname是集的名字,parent_set_list是已定义的集的列表,多个时必须用逗号隔开。,sets: rank/1.10/; file/1.20/; student(rank,file):age,sex; endsets,数据部分 以关键字“data:”开始,enddata”结束 sets:friend/John Jill,Rose Mike/:sex,age;endsets data:sex=0,1 ,1,0;a

11、ge=18,19,20,18;enddata,LINGO函数,LINGO有9种类型的函数: 1基本运算符:包括算术运算符、逻辑运算符和关系运算符 2数学函数:三角函数和常规的数学函数 3金融函数:LINGO提供的两种金融函数 4概率函数:LINGO提供了大量概率相关的函数 5变量界定函数:这类函数用来定义变量的取值范围,6集操作函数:这类函数为对集的操作提供帮助 7集循环函数:遍历集的元素,执行一定的操作的函数 8数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出 9辅助函数:各种杂类函数,基本运算符-算术运算符,算术运算符是针对数值进行操作的。LINGO提供了5种二元运

12、算符 乘方 * 乘 / 除 + 加 - 减,LINGO唯一的一元运算符是取反函数”-”。 优先级:-,* and /,+ and 算术运算符示例: 2-5、3,(2+4)/等,逻辑表达式中的3种逻辑算符和6种关系算符,优先级 由高到低 高 #NOT# #EQ# #NE# #GT# #LT# #LE# #AND# #OR# 示例: 2#GT# 3 #AND# 4 #GT# 2 ,其结果为假(0),数学函数,abs(x) 返回x的绝对值 sin(x) 返回x的正弦值,x采用弧度制 cos(x) 返回x的余弦值 tan(x) 返回x的正切值 exp(x) 返回常数e的x次方 log(x) 返回x的自

13、然对数 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提供了两个金融函数。 1fpa(I,n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以fpa(I,n)算得。,例 贷款买房问题 贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款10

14、年,每年需偿还多少元? 代码: 50000 = x * fpa(.0531,10); 答案:x=6573.069元。,金融函数,2fpl(I,n) 返回如下情形净现值:单位时段利率为I,第n个时段支付单位费用,两个函数间的关系:,1pbn(p,n,x):二项分布的分布函数。n和(或)x不是整数时,用线性插值法进行计算。 2pcx(n,x):自由度为n的2分布的分布函数。 3peb(a,x):当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。 4pel(a,x):当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。,概率函数,5pfd(n,d,x)

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

16、的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只允许在模型的数据部分使用,它将用拟随机数填满集属性。 14rand(seed):返回0和1间的伪随机数,依赖于指定的种子。 典型用法:U(I+1)=rand(U(I)。 注意如果seed不变,那么产生

17、的随机数也不变。,实现对变量取值范围的附加限制: bin(x) 限制x为0或1 bnd(L,x,U) 限制LxU free(x) 取消对变量x的默认下界为0的限制, 即x可取任意实数 gin(x) 限制x为整数,变量界定函数(4种),1in(set_name,primitive_index_1 ,primitive_index_2,) 如果元素在指定集中,返回1;否则返回0。 例4.7 全集为I,B是I的一个子集,C是B的补集。 sets: I/x1.x4/; B(I)/x2/; C(I)| #not# in(B, Endsets,集处理函数,2index(set_name, primitiv

18、e_set_element) 返回在集set_name中原始集成员primitive_set_element的索引。 如果set_name被忽略,则将返回与primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。 例 如何确定集成员(B,Y)属于派生集S3。 sets: S1/A B C/; S2/X Y Z/; S3(S1,S2)/A X, A Z, B Y, C X/; endsets X=in(S3,index(S1,B),index(S2,Y);,举例说明有时为index指定集的必要性。 例 sets: girls/debble,sue,al

19、ice/; boys/bob,joe,sue,fred/; endsets I1=index(sue); I2=index(boys,sue); I1=2,I2=3。建议在使用index函数时最好指定集。 3size(set_name) 返回集set_name的成员个数。 模型中明确给出集大小时最好使用该函数。优点是使模型更加数据中立,集大小改变时也更易维护。,遍历整个集进行操作。 语法格式: function(setname(set_index_list)|conditional_qualifier: expression_list); Setname:遍历的集; set_ index_li

20、st:集索引列表; expression_list:被应用到每个集成员的表达式列表,,集循环函数,1for 产生对集成员的约束。 基于建模语言的标量需要显式输入每个约束,但for函数允许只输入一个约束,然后自动产生每个集成员的约束。 例 产生序列1,4,9,16,25 model: sets: number/1.5/:x; endsets for(number(I): x(I)=I2); end,2. sum,该函数返回遍历指定的集成员的一个表达式的和,例:求向量5,1,3,4,6,10前五个数的和,model: sets: A/1.6/:x; x具有A矩阵的属性 endsets data:

21、x=5 1 3 4 6 10; enddata s=sum(A(i) | i#le# 5:x); end,3min和max 返回指定的集成员的一个表达式的最小值或最大值。 例 求向量5,1,3,4,6,10前5个数的最小值,后3个数的最大值。 model: data: N=6; enddata sets: number/1.N/:x; endsets data: x = 5 1 3 4 6 10; enddata minv=min(number(I) | I #le# 5: x);小于等于 maxv=max(number(I) | I #ge# N-2: x);大于等于 end,输入和输出函数

22、,将模型和外部数据(如文本文件、数据库、电子表格等)连接起来,1file函数 从外部文件中输入数据,可放在模型中任何地方。 语法格式:file(filename)。 Filename:文件名,可采用相对路径和绝对路径两种表示方式。 对同一文件的两种表示方式的处理和对两个不同的文件处理一样。,2text函数 将数据部分解输出到文本文件中,可以输出集成员和集属性值 语法格式:text(filename) Filename:文件名,可采用相对路径和绝对路径两种表示方式。 说明:若忽略filename,则数据输出到标准输出设备(一般是屏幕)。,3ole函数 从EXCEL中引入或输出数据的接口函数,基于

23、传输的OLE技术。 语法格式:OLE(spreadsheet_file,range_name_list) 说明:spreadsheet_file表示文件名称 range_name_list表示文件中数据的单元格范围 OLE传输直接在内存中传输数据,并不借助于中间文件。,4.9 辅助函数,代码: model: min=fx+fy; fx=if(x #gt# 0, 100,0)+2*x; fy=if(y #gt# 0,60,0)+3*y; x+y=30; end,1if(logical_condition,true_result,false_result) 评价一个逻辑表达式logical_con

24、dition, 若为真,返回true_ result,否则返回false_result。,例4.18 求解最优化问题,2warn(text,logical_condition) 若条件logical_condition为真,则产生内容为text的信息框。 例4.19 示例。 model: x=1; warn(x是正数,x #gt# 0); end,Lingo建模简例1,例 LINGO模型 运输(lp)、选址(nlp)问题,某公司有6个建筑工地,位置坐标为(ai, bi) (单位:公里),水泥日用量di (单位:吨),假设:料场和工地之间有直线道路,决策变量:料场j到工地i的运送量,目标函数:,从料场 j 到工地 i

温馨提示

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

评论

0/150

提交评论