您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > lingo标准模型与编程
(二) LINGO标准模型与集合(三) LINGO的运算符与函数(一) LINGO基本模型 LINGO标准模型与编程(四)1.从LINDO模型转向LINGO模型的差别 (14点) : (1)目标函数由“MAX=”或“MIN=”开头; (2)约束条件没有约束标志; (3)系数与变量之间有运算符,“*”号不能省略; (4)程序行的结束标志为分号“;”,目标函数行,约束行,说明注释语句行等都必须以分号结束; (5)约束行的提示名称放在方括号“[ ]”中; (6)模型以“MODEL:”开始,以“END”结束,虽然可以省略,为便于阅读,建议保留; 1/7/3.1 (一) LINGO基本模型(7) LINGO的语句顺序不重要,总是根据“MAX=”或 “MIN=”语句来寻找目标函数,其它语句或是约束条件,或是注释语句,或是标题“TITLE”语句; (8)限定变量取整数值的语句为“@GIN(vname)”, 0/1 变量语句为“@BIN(vname)”; 2/7/3.1 (9) LINGO模型不区分大小写字母,变量和行名由以字母开头的字母和数字组成,不超过32个字符; (10) LINGO中函数调用一律用“@”开头,常见的有非负限定函数“@FREE(vname)”,变量取值范围限定函数“@BND(a,vname,b)”;(11) LINGO模型允许乘号“*”和乘方“^”等运算,变量也可以出现在约束的右端,数字可以出现在左端; (12)语句是构成LINGO模型的基本单位,每一条语句必须以分号“;”结尾,多行写成的一条语句,最后以分号“;”结束; (13)注释语句以“!”开始,以“;”结束,选“File|Save”保存文件,文件名的后缀为“.lg4”; 3/7/3.1 (14)所有基于LINDO的模型都可改为LINGO模型,并能在LINGO下运行,而且可以进一步简化.2. LINGO基本模型的进一步简化 4/7/3.1 12个月的数据? 120个月的数据?(1)初始数据修改不便,能否集中存放? (2)约束条件必须逐一输入,不仅容易误输入,而且约束条件数量较大时,输入不方便,也不易修改,能否采用循环方式? 3. LINGO模型基本模型的简化方法: 5/7/3.1 (3)目标函数中,变量较多、项数较多时,输入和修改都不方便,有简洁的输入方式? (4)构成优化问题的关键是目标函数和约束条件,而目标函数和约束条件由变量、常量和它们构成的表达式组成,如何改进变量和常量的表示? 数据段循环语句@FOR( ); 函数@SUM( ); 集合.相当于数组(集合名、下标元素、属性)(5)能否在需要数据的时候才输入?能否将电子表格中数据直接使用? (6)能否使用数学函数计算?能否使用关系不等式? 6/7/3.1 (7)模型中能否作条件判断?能否与数据库通讯? (8)能否将其他文件中的数据调进调出?能否打印或屏幕输出报表格式的文件? 命令行输入、动态数据链接函数表达式、关系表达式条件函数@IF( );、数据库链接文件的输入输出、脚本文件7/7/3.1 工地水泥用量问题LINGO模型 4.判断模型的哪些地方可以进一步简化? 初始数据? 目标函数? 用量平衡? 储量约束?数据段初始段目标与约束段集合段 1/14/3.2 (二) LINGO 的标准模型(1)集合段定义集合变量及其元素与属性,若属性是常量,应在数据段输入,若属性是未知量,则应在初始段输入初值.元素的下标可用“/1…n/”等附在集合名之后; (2)数据段主要用于输入常数元素的属性值,常数属性值之间用逗号或空格分开.如果某单个变量需要在程序运行时赋值,可在数据段使用输入语句: “vname=?”,运行时系统将等待用户输入; (3)初始段主要用于对集合元素变量的属性定义初值, 以利于迭代算法的执行,接近最优解的初值,能提高计算的效率; 1. LINGO标准模型说明(5点) 2/14/3.2(4)目标与约束段没有明显的开始和结束标志,但是一般都会用到求和函数“@SUM( )”和循环函数 “@FOR( )”等内部函数, LINGO会寻找“MAX” 或“MIN”作为目标函数; (5)此外,有些模型还用到计算段,以“CALC”开始, 以“ENDCALC”结束,主要用于对一些原始数据进行预处理计算,便于数据在程序中直接使用, 且只能直接使用赋值语句.要注意的是,该段中语句必须按顺序执行,前面未赋值的变量不能在后面出现。 3/14/3.2(1)基本集合集合名称[/元素下标列举/][:元素属性(变量)列表]; “Quarters/1..4/:Dem,Rp,Op,Inv;” 2. LINGO模型中的集合元素能够直接列举出来的集合称为基本集合,也称为原始集合.定义格式为: 该语句相当于定义了4个数组(基本集合有4个属性) For I=1..4:Dem(I), Rp(I), Op(I),Inv(I); Quarters={ Dem(1), Rp(1), Op(1), Inv(1), Dem(2), Rp(2), Op(2), Inv(2), Dem(3), Rp(3), Op(3), Inv(3), Dem(4), Rp(4), Op(4), Inv(4) }; 4/14/3.2定义3个数组元素: LINGO模型中定义的集合属性相当于一般程序中的数组,如X(i),Y(i),A(i,j),B(i,j)等等. (2)派生集合由2个或2个以上的基本集合派生出来的2维或多维集合称为派生集合,也称导出集合.定义格式为集合名称(基本集合1,基本集合2,…) [/元素下标(组)列举/][:元素属性(变量)列表]; Roads(City,City)/ S,A1 S,A2 S,A3 /:D; D(S,A1), D(S,A2), D(S,A3)等 5/14/3.2(3)稠密集合与稀疏集合派生集合=基本集合´基本集合 (基本集合的笛卡尔积) 如果派生集合的元素包含了所有笛卡尔积二元对 (或多元对),称这种派生集合为稠密集合; 如果派生集合的元素只包含部分笛卡尔积二元对 (或多元对),称这种派生集合为稀疏集合; 稀疏集合元素(下标数组,不是属性)的定义方式: (1)枚举集合的元素(下标数组); (2)用复合逻辑关系式过滤. @SUM(Pairs(J,K)|J#EQ#I #OR# K#EQ#I: Match(J,K)=1); 6/14/3.2元素列表法元素过滤法直接列举法隐式列举法稠密集合稀疏集合基本集合派生集合 3.集合类型与关系模型集合数字型 1,2,3,4,5 1..5 字符数字型 AB1,AB2,AB3,AB4,AB5 AB1..AB5 星期型 SUN,MON,TUE,WED SUN..WED 月份型 OCT,NOV,DEC,JAN OCT..JAN 元素类型显式列举隐式列举 7/14/3.28/14/3.2 4. LINGO模型实例练习 (1) 将LINGO语句展开表示,判断该如何赋值?9/14/3.2 将LINGO语句展开表示,判断该如何赋值?10/14/3.2 将LINGO语句展开表示,判断该如何赋值?11/14/3.2 LINGO模型示例分析与上机练习 (2) SAILCO公司接到下四个季度帆船需求量的定单分别为40条、60条、75条、25条,需求必须按时满足.已知公司正常生产能力为每季度40条帆船, 每条帆船的生产费用为$400,如果加班生产,每条船的生产费用为$450.假定每个季度末,每条船的库存费用为$20,初始库存为10条船.问如何安排生产可使总费用最小? 模型假设:设每季度正常产量、加班产量、库存量、需求量分别为x i 、y i 、z i 、d i ,i=1,2,3,4. 目标函数: 4 1 min(40045020) iii i xyz =++å 5.12/14/3.2 40,1,2,3,4 i xi £= 1,1,2,3,4 iiiii zxydzi -=+-+= 0 10 z =约束条件: 公司生产能力限制: 产品量平衡方程: 模型建立: 4 1 min(40045020) iii i xyz =++å ..40,1,2,3,4 i stxi £= 1,1,2,3,4 iiiii zxydzi -=+-+= 0 10 z = ,,,1,2,3,4 iii xyzRi +Î=13/14/3.2 初始数据? 定义集合? 目标函数? 生产能力约束? 产量平衡?14/14/3.2 编写成LINGO模型(程序): 初始数据定义集合目标函数产能约束产量平衡1. LINGO运算符及其优先级 (同一优先级按从左到右的顺序; 括号“( )”内的表达式优先计算) 优先级运算符最高 #NOT#(非), (负号) ^ (乘方) * (乘法), / (除法) + (加法), (减法) #EQ#, #NE#, #GE#, #LE#, #GT#, #LT# #AND#(与), #OR#(或) 最低 (=), = , (=) 1/11/3.3 (三) LINGO的运算符与命令函数(1)集合循环函数(5个) 对集合上的元素(下标)进行循环操作: @FOR(集合名[集合索引列表[|过滤条件]]:表达式组); 2. LINGO内部函数(7种) @FOR(Pairs(I,J):@BIN(MATCH(I,J))); 对集合的每个元素(下标)独立地生成表达式; 当表达式为约束时生成约束表达式.例如 2/11/3.3 @SUM(集合名[集合索引列表[|过滤条件]]:表达式组); @SUM(Link(i,j):c(i,j)*x(i)+y(j)^2); 对集合的属性求和,返回集合上满足条件的表达式的和.如 @FOR(Quarters(I):RP(I)=40); @SUM(Quarters:400*RP+450*OP+20*INV);3/11/3.3 @MAX(集合名[集合索引列表[|过滤条件]]:表达式组); 集合属性最小值函数. (@Max( )和@Min( )一般使用较少) 集合属性最大值函数,返回集合上满足条件的表达式的最大值. @MIN(集合名[集合索引列表[|过滤条件]]:表达式组); @PROD(集合名[集合索引列表[|过滤条件]]:表达式组); 集合属性的乘积函数,返回集合上表达式的积. (2)基本的数学函数对模型中的变量进行初等函数计算,如绝对值函数Abs(X), 幂函数Pow(X,n),Sqr(X),Sqrt(X);三角函数Cos(X),Sin(X).(3)集合操作函数(4个) @INDEX([集合名,]原始集合元素); @INDEX(Students, LiMing); @IN(集合名,原始索引值1[,原始索引值2,…]); 返回集合元素在集合中的顺序编号: 判断集合中是否含有某个索引值,真返回1,假返回0;索引形式用“&1”,“&2”或“@INDEX( )”. 4/11/3.3 @WRAP(I,N); @WRAP(I,N);Û @MOD(I,N)+1; @SIZE(集合名); 防止集合索引越界,等价于返回集合中所包含元素的个数. X=@IN(CSet, @Index(ASet, 2), @Index(BSet, y));(5)变量定界函数(4个) (4)条件判断函数@IF( ) @IF(逻辑条件,真值返回,假值返回); @IF(X #LT# Y, 20, 0); @BND(L,X,U); @BIN(X); @FREE(X); @GIN(X); ÛL=X=U. Û X=0 or X=1. 取消X的非负限制限制X为整数 5/11/3.36/11/3.3 某8名实习生,在生产流水线上按2人一队负责某产品同一道工序,共分成四队.假设8名实习生两两之间组队的工作效率如下表所示,由于对称性,只列出上三角部分.为使工作效率最高,问应如何组队? LINGO模型示例分析与上机
本文标题:lingo标准模型与编程
链接地址:https://www.777doc.com/doc-3521617 .html