优化模型与LINGO软件_第1页
优化模型与LINGO软件_第2页
优化模型与LINGO软件_第3页
优化模型与LINGO软件_第4页
优化模型与LINGO软件_第5页
已阅读5页,还剩149页未读 继续免费阅读

下载本文档

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

文档简介

1、优化模型与LINGO软件 李秀云李秀云 人们在生产实践中,常常遇到如下问题:如何利用现有资源安排生产,使产值最大或利润最高;对给定的任务,如何统筹安排,以便用最少的资源消耗去完成任务等.对于这种从生产的计划与组织中提出的以达到最大收益或最小支付为目标的问题的研究,构成了运筹学的一个重要分之-数学规划论.规规划划确定型确定型不确定型不确定型静态规划静态规划动态规划动态规划线性规划线性规划非线性规划非线性规划规划模型的分类规划模型的分类随机规划随机规划模糊规划模糊规划规划又从目标角度划分为单目标和多目标规划又从目标角度划分为单目标和多目标规划又从变量取值角度划分为连续和整数规划又从变量取值角度划分

2、为连续和整数00 12211112121112211nmnmnmmnnnnxxbxaxaxabxaxaxaxcxcxcZ)()(min)max目标函数:目标函数:约束条件:约束条件:线性规划数学模型的一般形式线性规划数学模型的一般形式stst必要概念可行解:满足约束条件可行解:满足约束条件、的解为可行解。的解为可行解。所有解的集合为可行解的集或可行域。所有解的集合为可行解的集或可行域。最优解:使目标函数达到最大值的可行解。最优解:使目标函数达到最大值的可行解。约束方程的转换:由不等式转换为等式。约束方程的转换:由不等式转换为等式。 ijijbxa0 iniinjijxbxxa称为松弛变量称为松

3、弛变量 ijijbxa0 iniinjijxbxxa称为剩余变量称为剩余变量Lingo结果中用“SLACK OR SURPLUS”标识线性规划 线性规划可以在多项式时间内解决问题 求解方法有图解法,单纯行法,内点法 用 Lindo ,Lingo或 Matlab 可以容易求解解的情况解的情况唯唯 一一 解解无无 穷穷 解解无无 界界 解解无可行解无可行解有最优解有最优解无最优解无最优解01 2 3 4 5 6 7 8 1 2 3 4 5 6 x2 x1(4 2) 00124 16 4821222322121212121xxxxxxxxxxZ,max 0,02 1223622max21221212

4、1xxxxxxxxxZ无穷多最优解无穷多最优解x1x2 有唯一解有唯一解图解法 0,122max21212121xxxxxxxxZ无界解无界解x1x2 0,6321 23min2121211xxxxxxxxZx1x2 无可行解无可行解整数规划的数学模型整数规划的数学模型一般形式一般形式且且部部分分或或全全部部为为整整数数或或 n)1.2(j 0)2 . 1( )min(max11jnjijijnjjjxmibxaxcZZ整数规划可分为纯整数规划、混合整数规划、整数规划可分为纯整数规划、混合整数规划、0 01 1整整数规划。数规划。整数规划与线性规划的关系整数规划与线性规划的关系从数学模型上看整

5、数规划似乎是线性规从数学模型上看整数规划似乎是线性规划的一种特殊形式,求解只需在线性规划的一种特殊形式,求解只需在线性规划的基础上,通过舍入取整,寻求满足划的基础上,通过舍入取整,寻求满足整数要求的解即可。但实际上两者却有整数要求的解即可。但实际上两者却有很大的不同,通过舍入得到的解(整数)很大的不同,通过舍入得到的解(整数)也不一定就是最优解,有时甚至不能保也不一定就是最优解,有时甚至不能保证所得倒的解是整数可行解。证所得倒的解是整数可行解。且为整数0,13651914max21212121xxxxxxxxZ首先不考虑整数约束,得到线性规划问题首先不考虑整数约束,得到线性规划问题0,1365

6、1914max21212121xxxxxxxxZ用图解法求出最优解用图解法求出最优解x x1 13/2, 3/2, x x2 2 = 10/3 = 10/3且有且有Z = 29/6Z = 29/6x1x233(3/2,10/3)现求整数解(最优解):现求整数解(最优解):如用如用“舍入取整法舍入取整法”可可得到得到4 4个点即个点即(1,3)(2,3)(1,4)(2,4)(1,3)(2,3)(1,4)(2,4)。显然,它们都不可能是显然,它们都不可能是整数规划的最优解。整数规划的最优解。 按整数规划约束条件,其可行解肯定在线性规划问按整数规划约束条件,其可行解肯定在线性规划问题的可行域内且为整

7、数点。故整数规划问题的可行解题的可行域内且为整数点。故整数规划问题的可行解集是一个有限集,如图所示。集是一个有限集,如图所示。整数规划 目前,常用的求解整数规划的方法有目前,常用的求解整数规划的方法有 分支定界法和割平面法;分支定界法和割平面法; 对于特别的对于特别的01规划问题采用隐枚举法和匈牙规划问题采用隐枚举法和匈牙利法。利法。 。 对于中小型问题可以用Lindo ,Lingo或Matlab求解。 对于大型问题设计启发式算法求解。0-1规划例子 0-1背包问题物体体积6442333151物体价值12 1212 4669510 11234567891012345678910max 1212

8、124669510. .64423335100,1(1,2,.,10)ixxxxxxxxxxstxxxxxxxxxxxi非线性规划 传统的求解方法往往求得的是局部最优解,并且依赖初始点的位置。 非线性规划分类 单变量非线性规划(一维搜索) 多变量无约束非线性规划 多变量有约束非线性规划 Lingo和Matlab中也有相应的求解程序 也可以用遗传算法求解 max f (x1, x2) 21.5 x1sin(4p x1) + x2sin(20p x2) s. t. -3.0 x1 12.1 4.1 x2 5.8非线性规划-二次规划222 334 4 3 10 3m 5 ax. 12 0,0. xy

9、xyxyxyxytxys1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 制订生产计划,使每天获利最大制订生产计划,使每天获利最大 35元可买到元可买到1桶牛奶,买吗?若买,每天最多买多少桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到的获利增加到 30元元/公斤,应否改变生产计划?公斤,应否改变生产计划? 每天:每天:例例4 4 奶制品的生产与销售奶制品的生产与销售 1桶牛奶 3公斤

10、A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 x1桶牛奶生产桶牛奶生产A1 x2桶牛奶生产桶牛奶生产A2 获利获利 243x1 获利获利 164 x2 原料供应原料供应 5021 xx劳动时间劳动时间 48081221 xx加工能力加工能力 10031x决策变量决策变量 目标函数目标函数 216472xxzMax每天获利每天获利约束条件约束条件非负约束非负约束 0,21xx线性线性规划规划模型模型(LP)时间时间480小时小时 至多加工至多加工100公斤公斤A1 50桶牛奶桶牛奶 每天每天例题:SAILCO 公司需要决定下四个季度的帆船生产量下四个季度的帆船需求量分

11、别是40 条,60 条,75 条,25 条,这些需求必须按时满足。每个季度正常的生产能力是40 条帆船,每条船的生产费用为400 美元。如果加班生产,每条船的生产费用为450 美元。每个季度末,每条船的库存费用为20 美元。假定生产提前期为0,初始库存为10 条船。如何安排生产可使总费用最小?用DEM,RP,OP,INV 分别表示需求、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV 对每个季度都应该有一个对应的值,也就说他们都应该是一个由4 个元素组成的数组,其中DEM 是已知的,而RP,OP,INV 是未知数。例 计算6个发点8个收点的最小费用运输问题,产销单位运价如表

12、 (A产地B销地)单价单价B B1 1B B2 2B B3 3B B4 4B B5 5B B6 6B B7 7B B8 8产量产量A A1 16 62 26 67 74 42 25 59 96060A A2 24 49 95 53 38 85 58 82 25555A A3 35 52 21 19 97 74 43 33 35151A A4 47 76 67 73 39 92 27 71 14343A A5 52 23 39 95 57 72 26 65 54141A A6 65 55 52 22 28 81 14 43 35252销量销量353537372222323241413232434

13、33838例如美佳公司计划制造、两种家电产品,已知各制造一件产品分别占用的设备、的台时、调试时间、调试工序及每天可用于这两种家电的能力、各售出一件时的获利情况如表。问该公司制造两种家电各多少件,使利润最大?项目每天可用能力设备(h)设备(h)调试工序(h)利润(元)Max z=2x1+x2;st6x1+2x2=245x2=15x1+x2=0例8 匹配(MATCHING)8 名同学准备分成4 个调查队(每队两人)前往4 个地区进行社会调查。设两两之间组队的效率如表所示(由于对称性只列出了上三角部分),问如何组队可以使总效率最高?StuedentsS1S2S3S4S5S6S7S8S1-934215

14、6S2-173521S3-44292S4-1552S5-876S6-23S7-4“元素过滤”法例9.职员时序安排模型 一项工作一周7 天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14 和12,并要求每个职员一周连续工作5 天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。 LINGO是用来求解线性、整数和非线性规划问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题(庞大的计算量手工是无法解决的),利用LINGO高效的求解器可快速求解并能利用输出分析问题的结果。 LINDOLINDO和和LIN

15、GOLINGO软件能求解的优化模软件能求解的优化模型型 LINGO LINDO优化模型优化模型线性规划线性规划(LP)非线性规划非线性规划(NLP)二次规划二次规划(QP)连续优化连续优化整数规划整数规划(IP)LINGO软件的求解过程Lingo对于解决不同类型的模型有四种求解器a direct solver,a linear solver,a nonlinear solvera branch-and-bound manager.求解模型时,首先直接求解器尝试计算变量的值,比如一个只有一个未知变量的等式约束,a+b+c*x=1(a,b,c为已知量)直接求解器执行完后,如果变量都被计算,那么li

16、ngo显示结果报告;如果仍然有未知的变量,那么lingo通过检查模型的结构和数学内容来决定使用那一种求解器:对于连续模型来说,如果是线性规划那么调用线性求解器,如果是非线性规划,那么调用非线性求解器;对于整数模型(不一定纯整数)来说,激活B-and-B管理器,通过B-and-B管理器调用线性求解器或非线性求解器。 LP QP NLP IP 全局优化全局优化(选选) ILP IQP INLP LINGO软件的求解过程 LINDO/LINGO预处理程序预处理程序线性优化求解程序线性优化求解程序非线性优化求解程序非线性优化求解程序分枝定界管理程序分枝定界管理程序1. 确定常数确定常数2. 识别类型识

17、别类型1. 单纯形算法单纯形算法2. 内点算法内点算法(选选)1、顺序线性规划法、顺序线性规划法(SLP) 2、广义既约梯度法、广义既约梯度法(GRG) (选选) 3、多点搜索、多点搜索(MultiS) (选选) 建立lingo优化模型需注意的地方尽量使用实数优化模型,尽量减少整数约束和整数变量的个数尽量使用光滑优化模型,尽量避免使用非光滑函数(绝对值,符号函数)尽量使用线性优化模型,尽量减少非线性约束和非线性变量的个数合理设定变量的上下界,尽可能给出变量的初始值模型使用的单位数量级要适当,最大最小数尽量不要相差1000倍以上。0.001吨 1000米1千克 1公里Lingo的文件格式“LG4

18、”表示LINGO 格式的模型文件,是一种特殊的二进制格式文件,保存了我们在模型窗口中所能够看到的所有文本和其他对象及其格式信息,只有LINGO 能读出它,用其他系统打开这种文件时会出现乱码“LNG”表示LINGO文本文件,以这个格式保存模型时系统将给出警告,因为模型中的格式信息(如字体、颜色等)将会丢失“LDT”表示数据文件“LTF”表示命令脚本文件“LGR”表示报告文件LINGO函数LINGO 有9 种类型的函数:1 基本运算符:包括算术运算符、逻辑运算符和关系运算符2 数学函数:三角函数和常规的数学函数3 金融函数:LINGO 提供的两种金融函数4 概率函数:LINGO 提供了大量概率相关

19、的函数5 变量界定函数:这类函数用来定义变量的取值范围6 集操作函数:这类函数为对集的操作提供帮助7 集循环函数:遍历集的元素,执行一定的操作的函数8 数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9 辅助函数:各种杂类函数基本运算符-算术运算符算术运算符 LINGO 提供了5 种二元运算符: LINGO 唯一的一元算术运算符是取反函数“” 运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来改变高 (取反) 低 优先级基本运算符-三种关系运算符三种关系运算符 “=”、“=” LINGO 中还能用“”表示”表示=。LINGO 并不支持严格小于

20、和严格大于关系运算符. 如果需要严格小于和严格大于关系,比如让A 严格小于B:A+=B基本运算符-种逻辑运算符 逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。 在创建稀疏集时用在成员资格过滤器中。 #not# #eq# #ne# #gt# #ge# #lt# #le# #and# #or#高低基本运算符的优先级数学函数(lingo8)LINGO 提供了大量的标准数学函数:abs(x) 返回x 的绝对值sin(x) 返回x 的正弦值,x 采用弧度制cos(x) 返回x 的余弦值tan(x) 返回x 的正切值exp(x) 返回常数e 的x 次方log(x)

21、 返回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 中的最小值数学函数(lingo9) 增加了下列函数PROD (product of variables)MOD (modulo)SQRT (square root)SQR (square)POW (exponentiation).注意事项 (1)min= max= (2)省略st (3)支持+,-,*,/,=, (和lin

22、do不同,注意约束中使用*) (4)= 与 =350;x1=100;2*x1+x2=350 x1=1002*x1+x2=0求解二次规划(输入格式例2.)max=98*x1+277*x2-x12-0.3*x1*x2-2*x22;x1+x2100;x12*x2;gin(x1);gin(x2);2212112212121212max 982770.321002,0,xxxx xxxxxxx xx xZ求解非线性方程组求解非线性方程组(输入格式例输入格式例3)model:x2+y2=2;2*x2+x+y2+y=4;end只能求得一组可行解LINGO运行窗口 文件菜单 编辑菜单 程序(LINGO)菜单(

23、运行LINGO)1.求解模型(Solve) 可以将当前模型送入内存并求解例如1(状态窗口(LINGO Solver Status x)模型类型Model LP, 线性规划 QP, 二次规划 NLP, 非线性规划 ILP, 整数线性规划 IQP, 整数二次规划 INLP, 整数非线性规划 PILP, 纯整数线性规划 PIQP, 纯整数二次规划 PINLP,纯整数非线性规划一般来说很难求解一般来说很难求解只用于求解小规模问题只用于求解小规模问题状态State Undetermined, 运行前unknown Infeasible, 不可行解,不能完全满足约束条件 Feasible, 可行解,满足约

24、束条件但未必使得解达到最优 Global Optimum, 线性规划,只要有解就是全局最优解 Local Optimum, 非线性规划,为局部最优解,在option中可以选择使用全局寻优器求解 Unbounded, 解无界 Interrupted, 用户终止!unbound;max=x;!FeasibleX * X + Y = 100;!InfeasibleX * X + Y*Y = -1;例如输入以下例子,看运行状态不可行性infeasiblility 反映了解的可行性,指当前约束不满足的总量当解为Feasible时,有infeasiblility0 当infeasiblility不等于0I

25、nfeasiblility的值应该是求解的所有约束的差值的绝对值之和 扩展求解器状态Extended Solver Status 只有当使用下面三种求解器时候才有显示 “B-and-B”, 分支限界求解器,用于整数含有整数限制的问题 “Global”全局求解器, “Multistart”多初始点求解器, 都是求解非线性规划的方法,需要从options中指定 例如:输入以下例子并运行 max=98*x1+277*x2-x12-0.3*x1*x2-2*x22; x1+x2100; x12*x2; gin(x1);gin(x2);2、求解结果Reduced Cost 表示当变量有微小变动时,目标函数

26、的变化率.基变量的值为0,非基变量的值表示当变量增加一个单位时目标函数减少的量Slack or Surplus 给出变量在最优解下剩余量,即松弛变量的值Dual Price 表示当对应约束有微小变动时(对应约束不等式右端项若增加1个单位),目标函数的变化率(目标函数将增加的单位个数.经济学称影子价格) .变程灵敏性分析(Range) 该命令产生当前模型的灵敏性分析报告:是在求解模型时作出的,因此在求解模型时是激活状态,但默认是不激活的. 激活方式:程序Lingo/设置Options/一般求解器General Solver Tab/Dual Computations/Prices and Ran

27、ges. (注意:先求解再作灵敏性分析) 灵敏性分析是首先在假定约束条件不变的情况下,目标函数的系数发生变化时,最优解和最优值的改变情况.Current Coefficient 给出目标函数相应变量原来的系数Allowable Increase 给出对应变量系数允许增加值Allowable Decrease 给出对应变量系数允许减少值 从而确定变量系数变化范围,保证最优基不变. 由于约束不变,则最优解不变,最优值变.然后在最优基不变的前提下分析影子价格有意义的作用范围,即约束条件右端的限制范围.输出Current RHS Allowable Increase Allowable Decreas

28、e 给出了在影子价格有意义的条件下约束右端的原值和限制范围. 影子价格 影子价格代表着在资源最优利用条件下对第i种单位资源的估价这种估价不是资源的市场价格,而是根据资源在生产中做出的贡献而做的估价 影子价格是约束条件方程右端的i资源值每增加一个单位时,最优目标函数的变化量影子价格是针对某一种资源而言的(与决策变量无关),而问题中其它数据不变补充概念 基 基向量 基变量 非基变量 基解 基可行解 可行基 最优基1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 制订生产计划,使每天

29、获利最大制订生产计划,使每天获利最大 35元可买到元可买到1桶牛奶,买吗?若买,每天最多买多少桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到的获利增加到 30元元/公斤,应否改变生产计划?公斤,应否改变生产计划? 每天:每天:例例4 4 奶制品的生产与销售奶制品的生产与销售 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 x1桶牛奶生产桶牛奶生产A1 x2桶牛奶生产桶牛奶生产A2 获利获利 243x1 获利获利 164 x2 原料供应原料供应 5021 xx

30、劳动时间劳动时间 48081221 xx加工能力加工能力 10031x决策变量决策变量 目标函数目标函数 216472xxzMax每天获利每天获利约束条件约束条件非负约束非负约束 0,21xx线性线性规划规划模型模型(LP)时间时间480小时小时 至多加工至多加工100公斤公斤A1 50桶牛奶桶牛奶 每天每天例题:SAILCO 公司需要决定下四个季度的帆船生产量下四个季度的帆船需求量分别是40 条,60 条,75 条,25 条,这些需求必须按时满足。每个季度正常的生产能力是40 条帆船,每条船的生产费用为400 美元。如果加班生产,每条船的生产费用为450 美元。每个季度末,每条船的库存费用为

31、20 美元。假定生产提前期为0,初始库存为10 条船。如何安排生产可使总费用最小?用DEM,RP,OP,INV 分别表示需求、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV 对每个季度都应该有一个对应的值,也就说他们都应该是一个由4 个元素组成的数组,其中DEM 是已知的,而RP,OP,INV 是未知数。MODEL:SETS:QUARTERS /Q1,Q2,Q3,Q4/ : TIME, DEM, RP, OP, INV;ENDSETSDATA:DEM = 40, 60, 75, 25;TIME = 1, 2, 3, 4;ENDDATAObj MIN = SUM(QUART

32、ERS: 400 * RP + 450 * OP + 20 * INV);FOR(QUARTERS(I) : RP(I) 40);FOR(QUARTERS(I) | TIME(I)#GT#1:INV(I) = INV(I - 1) + RP(I) + OP(I) - DEM(I););INV(1) = 10 + RP(1) + OP(1) - DEM(1);END集合段(SETS ENDSETS)数据段(DATA ENDDATA)目标与约束段最重要的是理解“集合”(SET)及其“属性”(Attribute)的概念集段 集段在集段在LINGO模型中是可选的,如果你在模型中使用模型中是可选的,如果

33、你在模型中使用集,那么你必须在使用前将它在集段中列出。集,那么你必须在使用前将它在集段中列出。 集段的格式为集段的格式为 一个模型可以没有集段,也可以一个集段或者多个集一个模型可以没有集段,也可以一个集段或者多个集段。集段可以出现在模型的任何位置。唯一的限制是段。集段可以出现在模型的任何位置。唯一的限制是你必须在引用之前定义,并且集段的代码出现在你引你必须在引用之前定义,并且集段的代码出现在你引用前。用前。SETS: ENDSETS定义原始集(primitive) 为了在集段中定义一个基本集,你需要指定: 集名 可选项,成员列表 (集中含有的对象) 可选项,属性列表 注意注意:方括号中的为可选

34、项 setname / member_list / : attribute_list;集名 是你为集指定的名字,需要符号标准的命名规则;另外注意LINGO不区分大小写。成员列表 集的成员是“明确的”举例: 集的成员是“隐式的”举例:WAREHOUSES / WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY;WAREHOUSES / 1.6/: CAPACITY;隐式成员列表格式隐式成员列表 n是一个数值或者是一个将在“数据段”被指定的参数。DATA: N = 6;ENDDATASETS: WAREHOUSES / 1.N/: CAPACITY;ENDSETS属性列表 在at

35、tribute_list 中集成员可以有一个或多个属性。SETS:WAREHOUSES / 1.6/: CAPACITY, LOCATION, DOCKS;ENDSETS定义派生集 (derived) 为了在集段中定义一个派生集,你需要指定: 集名 父集 可选项,成员列表 (集中含有的对象) 可选项,属性列表setname( parent_set_list) / member_list / : attribute_list;父集 为一系列先前定义的集,由逗号分隔成员列表 可选项,如果该值为空,LINGO建立父集中各个成员的组合,作为派生集的成员,这种集成为“密集密集(dense)”sets:p

36、roduct/A B/;machine/M N/;week/1.2/;allowed(product,machine,week):x;endsets例例5密集 LINGO 生成了三个父集的所有组合共八组作为allowed 集的成员。列表如下:编号 成员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)成员列表 当派生集包含的member_list为“密集”的一个子集时,我们称这个派生集为“稀疏集稀疏集(sparse)” 。 一个派生集member_list可能由以下情况组成(当然这个集是稀疏集) 一个

37、明确的成员列表(explicit listing) 一个成员关系过滤器(即限制条件)(membership filter)明确的成员列表 显式罗列 allowed(product,machine,week)/A M 1,A N 2,B N 1/;过滤器 用竖线(|)来标记一个成员资格过滤器的开始。 &1 可看作派生集的第1 个原始父集的索引,它取遍该原始父集的所有成员;&2 可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成员;&3,&4,以此类推。 注意如果派生集B 的父集是另外的派生集A,那么上面所说的原始父集是集A 向前回溯到最终的原始集,其顺序保持不变,并且派生集A 的过滤

38、器对派生集B 仍然有效。因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和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的集;linkmf2(linkmf) | friend(&1,&2) #gt# 0

39、.5 : x;endsetsdata:sex,age = 1 16 0 14 0 17 0 13;friend = 0.3 0.5 0.6;enddata过滤器对于父集非派生集,对于父集非派生集,&1取值为取值为1,2,代表代表student的第一个的第一个,第二个元素第二个元素对于父集为派生集对于父集为派生集a,&1&2,并且满足关系并且满足关系例例6集的总结模型的数据部分 数据部分以关键字“data:”开始,以关键字“enddata”结束。 在这里,可以指定集成员、或集的属性。data:object_list = value_list;enddata数值列数值列(value_list) 包

40、含要分配给对象列中的对象的值,用逗号或空格隔开。 注意属性值的个数必须等于集成员的个数。对象列对象列(object_list) 包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性名可以有任意多。 如果对象列中有多个属性名,那么它们的类型必须一致。如果对象列中有一个集名,那么对象列中所有的属性的类型就是这个集。SETS:QUARTERS:DEM,RP,OP,INV;ENDSETSDATA:QUARTERS DEM=1 2 2 4;ENDDATA对属性赋值sets:set1/A,B,C/: X,Y;endsetsdata:X=1,2,3;Y=4,5,6;

41、enddatasets:set1/A,B,C/: X,Y;endsetsdata:X,Y=1 42 53 6;enddata复合数据声明复合数据声明指定属性为一个值sets:days/MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata:needs = 20;enddatasets:days /MO,TU,WE,TH,FR,SA,SU/:needs,cost;endsetsdata:needs cost = 20 100;enddata单个属性单个属性多个属性多个属性数据部分的未知数值sets:years/1.5/: capacity;endsetsdata:capa

42、city = ,34,20,;enddata实时数据处理 在本该放数的地方输入一个问号(?)data:interest_rate,inflation_rate = .085 ?;enddata集循环函数FOR(setname(set_index_list)|cond_qualifier:exp_list)对集中的每个成员产生表达式MAX(setname(set_index_list)|cond_qualifier:expression)返回集setname中的最大值MIN(setname(set_index_list)|cond_qualifier:expression)返回集setname中

43、的最小值SUM(setname(set_index_list)|cond_qualifier:expression)返回集中元素的表达式的和集循环函数使用说明 集循环函数在整个集合上起作用,并且除了FOR函数外,其他函数产生单一的结果。 集循环函数的语法如下: function(setname(set_index_list)|conditional_qualifier:expression_list);集循环函数使用说明function相当于上面4个集循环函数中的一个。setname是你想要进行循环操作的集合的名字。set_index_list是可选项,被用于创建一个索引值(set_index

44、_list为1,2,3,),每个值相当于初始集的一个成员;随着Lingo的每次循环,它将对set_index_list所代表的成员的进行操作;若不用的话,将会把expression_list应用于每一个成员。集循环函数使用说明conditional_qualifier是可选项,被用于限制集循环函数的作用域。在Lingo对setname的每个成员进行操作之前,先计算该成员是否满足conditional_qualifier的条件,当满足时对该成员进行expression_list操作;否则,跳到下一个成员。expression_list是一系列作用于setname成员的表达式。当使用FOR函数时,

45、expression_list可以包含多个表达式,用分号分隔;当使用其他三个(SUM, MAX, and MIN)集循环函数时,expression_list只能包含一个表达式。SETS: TRUCKS / MAC, PETERBILT, FORD, DODGE/: HAUL;ENDSETSFOR( TRUCKS( T): HAUL( T) = 2500);HAUL( MAC) = 2500HAUL( PETERBILT) = 2500HAUL( FORD) = 2500HAUL( DODGE) = 2500nFOR( setname ( set_index_list) | cond_qual

46、ifier: exp_list)产生约束SETS: NUMBERS /1.5/: VALUE, RECIPROCAL;ENDSETSDATA: VALUE = 3 4 2 7 10;ENDDATA FOR( NUMBERS( I): RECIPROCAL( I) = 1 / VALUE( I) );RECIPROCAL( 1) 0.3333333RECIPROCAL( 2) 0.2500000RECIPROCAL( 3) 0.5000000RECIPROCAL( 4) 0.1428571RECIPROCAL( 5) 0.1000000nFOR( setname ( set_index_list

47、) | cond_qualifier: exp_list)赋值SETS: VENDORS / V1 V2 V3 V4 V5 /: DEMAND;ENDSETSDATA: DEMAND = 5 1 3 4 6;ENDDATATOTAL_DEMAND = SUM( VENDORS( J): DEMAND( J);TOTAL_DEMAND = SUM( VENDORS: DEMAND);DEMAND_3 = SUM( VENDORS( J) | J #LE# 3: DEMAND( J);SUM( setname ( set_index_list) | cond_qualifier: expressi

48、on)SETS: VENDORS / V1 V2 V3 V4 V5 /: DEMAND;ENDSETSDATA: DEMAND = 5 1 3 4 6;ENDDATAMAX_DEMAND = MAX( VENDORS( J):DEMAND( J);MAX_DEMAND = MAX( VENDORS: DEMAND);MAX_DEMAND3 = MAX( VENDORS( J) | J #LE# 3: DEMAND( J);MAX( setname ( set_index_list) | cond_qualifier: expression) MIN( setname ( set_index_l

49、ist) | cond_qualifier: expression)MIN_DEMAND = MIN( VENDORS( J):DEMAND( J);MIN_DEMAND = MIN( VENDORS: DEMAND);MIN_DEMAND3 = MIN( VENDORS( J) | J #LE# 3: DEMAND( J);SETS: VENDORS / V1 V2 V3 V4 V5 /: DEMAND;ENDSETSDATA: DEMAND = 5 1 3 4 6;ENDDATA产生序列1,4,9,16,25model:sets:number/1.5/:x;endsetsfor(numbe

50、r(I): x(I)=I2);end求向量5,1,3,4,6,10前5 个数的和。model:data:N=6;enddatasets:number/1.N/:x;endsetsdata:x = 5 1 3 4 6 10;enddatas=sum(number(I) | I #le# 5: x);end注意这种用法注意这种用法求向量5,1,3,4,6,10前5 个数的最小值, 后3 个数的最大值model:data:N=6;enddatasets:number/1.N/:x;endsetsdata:x = 5 1 3 4 6 10;enddataminv=min(number(I) | I #

51、le# 5: x);maxv=max(number(I) | I #ge# N-2: x);end例7 计算6个发点8个收点的最小费用运输问题,产销单位运价如表 (A产地B销地)单价单价B B1 1B B2 2B B3 3B B4 4B B5 5B B6 6B B7 7B B8 8产量产量A A1 16 62 26 67 74 42 25 59 96060A A2 24 49 95 53 38 85 58 82 25555A A3 35 52 21 19 97 74 43 33 35151A A4 47 76 67 73 39 92 27 71 14343A A5 52 23 39 95 57

52、 72 26 65 54141A A6 65 55 52 22 28 81 14 43 35252销量销量35353737222232324141323243433838minijijijCOST VOLUME,for all j in VENDORSijjijVOLUMEDEMANDVENDORSWAREHOUSES数学模型sets: warehouses/wh1.wh6/: capacity; vendors/v1.v8/: demand; links(warehouses,vendors): cost, volume;endsetsVENDORSWAREHOUSESLINKS集合段MIN

53、 = SUM( LINKS(I,J): COST(I,J) * VOLUME(I,J);MinimzeijijijCOST VOLUME目标函数FOR( VENDORS( J): SUM( WAREHOUSES( I): VOLUME( I, J) ) = DEMAND( J) );,for all j in VENDORSijjiVOLUMEDEMAND销量约束,for all i in WAREHOUSESijjjVOLUMECAPFOR( WAREHOUSES( I): SUM( VENDORS( J): VOLUME( I, J) ) = CAPACITY( I) );MODEL:MI

54、N = 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产量约束data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1

55、 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;enddataendmodel:!6发点8收点运输问题;sets: warehouses/wh1.wh6/: capacity; vendors/v1.v8/: demand; links(warehouses,vendors): cost, volume;endsets!目标函数; min=sum(links: cost*volume);!需求约束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!产量约束;

56、 for(warehouses(I): sum(vendors(J): volume(I,J)=capacity(I);!这里是数据;data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 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;enddataend例8 匹配(MATCHING)8 名同学准备分成4 个调查队(每队两人)前往4 个地区进行社会调查。设两两之间组

57、队的效率如表所示(由于对称性只列出了上三角部分),问如何组队可以使总效率最高?StuedentsS1S2S3S4S5S6S7S8S1-9342156S2-173521S3-44292S4-1552S5-876S6-23S7-4“元素过滤”法匹配(MATCHING)目标函数为RATING(Si, Sj)* MATCH(Si, Sj)之和;约束条件是每个同学只能(而且必须在)某一组,即对于任意i 有:只要MATCH 属性的某个下标为i 就加起来,此和=1。显然,这是一个0-1 线性规划MATCH(Si, Sj)=1 表示Si,Sj 组成一队,0 表示不组队。由于对称性只需考虑i= 20 3 S(

58、1) + S( 2) + S( 5) + S( 6) + S( 7) = 16 4 S( 1) + S( 2) + S( 3) + S( 6) + S( 7) = 13 5 S( 1) + S( 2) + S( 3) + S( 4) + S( 7) = 16 6 S( 1) + S( 2) + S( 3) + S( 4) + S( 5) = 19 7 S( 2) + S( 3) + S( 4) + S( 5) + S( 6) = 14 8 S( 3) + S( 4) + S( 5) + S( 6) + S( 7) = 12 ENDmodel:sets:days/1.7/: required,S

59、;endsetsdata:!每天所需的最少职员数;required = 20 16 13 16 19 14 12;enddata!最小化每周所需职员数;min=sum(days: S);for(days(J): sum(days(I) | I #le# 5:S(wrap(J+I+2,7) = required(J);end数据输入输出函数 FILE函数 TEXT函数 OLE函数 ODBC函数 FILE函数 该函数用从外部文件中输入数据,可以放在模型中任何地方。 这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。FILE( filename)!6发点发点8收点运输问题收点运输

60、问题;sets: warehouses/ file(1_2.txt) /: capacity; vendors/ file(1_2.txt) /: demand; links(warehouses,vendors): cost, volume;endsets!目标函数目标函数; min=sum(links: cost*volume);!需求约束需求约束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!产量约束产量约束; for(warehouses(I): sum(vendors(J): volume(I,J)= requi

温馨提示

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

评论

0/150

提交评论