1、源于第二次世界大战期间的运筹学研究,有效地解决了如何将有限的资源分配于各项军事活动,以取得最优的战争效果等重大军事决策问题,为盟军取得二战的胜利作出了不可磨灭的贡献。战后,该项技术不但在军事科学上不断发展,在工农业生产、科学实验、工程技术、经济管理和社会科学中都有着广泛的应用和发展。特别是计算机技术的引入,更使得运筹学的研究和应用如虎添翼,一些大规模或超大规模的决策变量和约束条件问题的求解也变成了现实。,规划模型简介,简单说规划模型目标是使投入越少,产出越多。,LINGO可用于求解线性规划(LP),二次规划(QP),非线性规划(NLP),整数规划(IP),除此之外,也可以用于一些线性、非线性方
2、程组的求解。LINGO还是最优化问题的一种建模语言,包括许多常用的数学函数可以调用,并可以接受其他数据文件(如文本文件、Excel电子表格文件、数据库文件等),同时LINGO提供了与电子表格软件(如Excel等)的接口,能够直接集成到电子表格中使用。即使对优化方面知识了解不多的用户,也能够方便地建模和输入、有效地求解。,LINGO软件简介,LINGO软件是一套专门用于求解最优化问题的软件包。,图解法是直接在平面直角坐标系中作图解线性规划问题的一种方法。这种方法简单直观,适合于求解两个变量的线性规划问题。,【例1】求解下例线性规划,【解】:法一图解法求解过程法二LINGO求解,s.t,1.1 图
3、解法,最优解X(15,10),目标函数的最大值Z85,1.可行域 :满足每个约束的点称为可行解,可行解集合称为可行域;2.最优解 :在可行域上使目标函数取得最大或最小值的点就是最优解。对应的函数值为最优值。,注:图解法只适用于变量为二维的,1.3 LINGO预备知识,1。程序以 model 开始,以 end 结束。,3。每个语句结束都要有“;”,4。不论是数还是变量相乘时,“*”不能省略,5。LINGO中不分大小写。,2。以 max(或min) 引导目标函数。,一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。某炼油厂有四种标准汽油,设其标号分别为,其特性及
4、库存量列于下表中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为,这两种飞机汽油的性能指标及产量需求列于表中。问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。,例1.2汽油混合问题(线性规划问题),分析:设混合后标号为1的汽油所用的四种标准汽量 则相应的2号所用的量为 ,设1号汽油的产量为Z,则,1。2号汽油量应=其需求量;,2。对于标准汽油而言,混合后的1,2汽油量应=其储备量;,3。混合后汽油的蒸汽压力和辛烷数,应满足其性能指标, 即,约束条件:x5+x6+x7+x8=250000x1+x5=02.85x5-1.42x6+4.27x7-18.49x
5、8=016.5x1+2.0x2-4.0x3+17x4=07.5x5-7.0x6-13.0x7+8.0x8=0xj=0(j=1,2.,8),目标函数:max z=x1+x2+x3+x4,3.整数规划,当变量及约束条件都是整数时,称为整数规划。 其中较为特殊的一类情况是01型整数规划则,它要求决策变量的取值仅为0或1 。,01规划的解法一般为穷举法或隐枚举法 。,有四个工人,要分别指派他们完成四项不同的工作,每个人做各项工作所消耗的时间如表。问应该如何指派,才能使总的消耗时间为最小?,例2(整数规则),注意到:,分析:这是一道典型的整数规则问题。,我们记派第 I人去做第j项工作记为Xij,1。每人
6、只能做一项工作。,2。每项工作一人做。,我们得到目标 函数为约束条件:,min=15*x11+19*x21+26*x31+19*x41+18*x12+23*x22+17*x32+21*x42+24*x13+22*x23+16*x33+23*x43+24*x14+18*x24+19*x34+17*x44; x11+x12+x13+x14=1; x21+x22+x23+x24=1; x31+x32+x33+x34=1; x41+x42+x43+x44=1; x11+x21+x31+x41=1; x12+x22+x32+x42=1; x13+x23+x33+x43=1; x14+x24+x34+x4
7、4=1;,注:LINGO也是一种建模语言,可以通过编程解决大规模的问题。,问题:若模型推广,变成10人,10项工作,如何做?,model: sets: jh/1,2,3,4/:; link(jh,jh):a,x; endsets data: a=15,18,21,2419,23,22,1826,17,16,1919,21,23,17; enddata min=sum(link(i,j):a(i,j)*x(i,j); for(jh(i):sum(jh(j):x(i,j)=1); for(jh(j):sum(jh(i):x(i,j)=1); for(link(i,j): BIN( x(i,j);,
8、3.2 LINGO预备知识,在LINGO中默认的变量都是大于等于0的。如果要重新定义变量的定义域,可以调用内部函数。,注:内部函数以 开头,约束条件:,1。满足工地的需求量,2。运出量不超过仓库储存量,建立模型:,模型结果,下面主要介绍LINGO编程语言,4.2 LINGO预备知识,1)。集合段:以“SET”开始,以“ENDSET”结束。定义集合变量,元素,和属性。集合名/元素/:属性元素:类似于数组的下标。属性:定义集合的变量,类似于数组。属性之间必须用逗号或空格隔开.,1。LINGO模型由5段成:,2)。数据段:以“DATA:”开始,以“ENDDATA”结束.对集合的属性(数组)输入必要的
9、 常数数据。 attribute list(属性) = value_list;(常数列表) (value_list)中数据用逗号或空格隔开。 在此段也可引入参数,“变量名=?”,在运行时才对参数赋值。但这仅用于单个变量赋值,而不能用于属性变量(数组)。,4)。目标与约束段:定义目标函数,约束条件。,5)。计算段:以“CALC”开始,以“ENDCALA”结束。对一些原始 数据进行计算处理。,2。集合的定义:,以4.1为例: Demand/16/:a,b,d :集合名为Demand,共6个元素,a,b,d 为属于此集合的变量,其为6维的向量。 Supply/1,2/:x,y,e :集合名为Supp
10、ly ,共2个元素,x,y,e 为属于此集合的变量,其为2维的向量。 基本集合,Link(demand,supply):c :集合link 是由集合demand和 supply生成 其元素由demand和 supply的笛卡尔积构成,即,3)。初始段:以“init:”开始,以“endinit”结束。对集合的属性(数组)定义初值,共6*2=12个元素,变量c即为6*2的矩阵,派生集合,3.循环语句:,sum():求和语句,表示 c(i,j) 的下标j在集合supply中变 化,从1取到2。,for():循环函数。表示c(i,j) 的下标i在集合demand中变 化从1取到6。,free ():函
11、数取消了变量X、Y 非负限制,for(demand(i):sum(supply(j):c(i,j) =d(i););,5.1 目标规划的数学模型,线性规划模型的特征是在满足一组约束条件下,寻求一个目标的最优解(最大值或最小值)。,而在现实生活中最优只是相对的,或者说没有绝对意义下的最优,只有相对意义下的满意。,1978年诺贝尔经济学奖获得者.西蒙(H.A.Simon-美国卡内基-梅隆大学,1916-)教授提出“满意行为模型要比最大化行为模型丰富得多”,否定了企业的决策者是“经济人”概念和“最大化”行为准则,提出了“管理人”的概念和“令人满意”的行为准则,对现代企业管理的决策科学进行了开创性的研
12、究。,目标规划研究企业考虑现有的资源条件下,在多个经营目标中去寻求满意解,即使得完成目标的总体结果离事先制定目标的差距最小。,例5.1】最优生产计划问题。某企业在计划期内计划生产甲、乙、丙三种产品。这些产品分别需要要在设备A、B上加工,需要消耗材料C、D,按工艺资料规定,单件产品在不同设备上加工及所需要的资源如表11所示。已知在计划期内设备的加工能力各为200台时,可供材料分别为360、300公斤;每生产一件甲、乙、丙三种产品,企业可获得利润分别为40、30、50元,假定市场需求无限制。企业决策者应如何安排生产计划,使企业在计划期内总的利润收入最大?,产,产品,使总利润最大的线性规划模型为:,
13、解:,最优解X(50,30,10),Z3400。,现在决策者根据企业的实际情况和市场需求,需要重新制定经营目标,其目标的优先顺序是:,(1)利润不少于3200元; (2)产品甲与产品乙的产量比例尽量不超过1.5; (3)提高产品丙的产量使之达到30件; (4)设备加工能力不足可以加班解决,能不加班最好 不加班; (5)受到资金的限制,只能使用现有材料不能再购进,【解】 设甲、乙、丙产品的产量分别为x1、x2、x3。如果按线性规划建模思路,最优解实质是求下列一组不等式的解,通过计算不等式无解,即使设备B加班10小时仍然无解。,在实际生产过程中生产方案总是存在的,无解只能说明在现有资源条件下,不可
14、能完全满足所有经营目标。,目标规划是按事先制定的目标顺序逐项检查,尽可能使得结果达到预定目标,即使不能达到目标也使得离目标的差距最小,这就是目标规划的求解思路,对应的解称为满意解。,下面建立例5.1的目标规划数学模型。,其中d0、d0。,设d为未达到目标值的差值,称为负偏差变量,,d为超过目标值的差值,称为正偏差变量,(1)设为未达到利润目标的差值 ,为超出利润目标的差值, 当利润小于3200时 0且 0,有,1。设置偏差变量:,2。处理目标函数与约束,当利润大于3200时 0 且 0,有成立。,当利润恰好等于3200时 =0 且 0,有成立。,实际利润只有上述三种情形之一发生,因而可以将三个
15、等式写成一个等式,利润不少于3200理解为达到或超过3200,即使不能达到也要尽可能接近3200,可以表达成目标函数 取最小值,则有,(2)设 分别为未达到和超过产品比例要求的偏差变量,则产量比例尽量不超过1.5的数学表达式为:,(3)设 分别为产品丙的产量未达到和超过30件的偏差变量,则产量丙的产量尽可能达到30件的数学表达式为 :,(4)设 为设备A的使用时间偏差变量,为 设备B的使用时间偏差变量,最好不加班的含义是 同时取最小值,等价于 取最小值,则设备的目标函数和约束为:,(5)材料不能购进表示不允许有正偏差,约束条件为小于等于约束。,1。一个目标中的两个偏差变量 至少一个等于零,注:
16、,2。当期望结果不超过目标值时,目标函数求 ;当期望结果不低于目标值时,目标函数求 ;当期望结果恰好等于目标值时,目标函数求 。,3。约束条件14,称为柔性约束:允许结果与所目标值存在正或负的偏差;约束条件5,称为刚性约束:要求结果一定不能有正或负的偏差。,3。目标的优先级与权系数,目标的优先分为两个层次:,第一个层次是目标分成不同优先级,在计算目标规划时,必须先优化高优先级的目标,然后再优化低优先级的目标。通常以 表示不同的因子,并规定,第二个层次是目标处于同一优先级,但两个目标的权重不一样,因此两目标同时优化,但用权系数的大小来表示目标重要性的差别。,4.问题的目标规划数学模型,LINGO
17、程序,注:(1)在数据段赋值时用“?”,表示在运行时才给变量赋值,(2)在用循环语句时,for(Level(i) | i #lt# size(Level): | i #lt# size(Level)为过滤条件,表示i的范围“大于或小于”某值; “#lt# “为逻辑运算符,通常作为过滤条件使用。,1) #AND#(与),#OR#(或) , #NOT#(非),2)#EQ#( =), #NE#( ), #GT#( ), #GE#( =), #LT#( ), #LE#( =),(3)运行时输值:,第一级:p(i):1 , 0 , 0 , 0 goal(i):任一较大的值 结果:第一级的最优偏差值为0,
18、第二级:p(i):0 , 1 , 0 , 0 goal(i):0 ,较大值,较大值 结果:第二级的最优偏差值为0,第四级:p(i):0 , 0 , 0 , 1 goal(i):0 ,0,0 结果:第四级的最优偏差值为14.44444,第三级:p(i):0 , 0 , 1 , 0 goal(i):0 ,0,较大值 结果:第三级的最优偏差值为0,运行结果如下:,X( 1) 28.33333 X( 2) 18.88889 X( 3) 30.00000,Global optimal solution found at iteration: 14Objective value: 14.44444Vari
19、able Value Reduced CostP( 1) 0.000000 0.000000P( 2) 0.000000 0.000000P( 3) 0.000000 0.000000P( 4) 1.000000 0.000000Z( 1) 0.000000 -0.5555556E-01Z( 2) 0.000000 -0.2222222Z( 3) 0.000000 -1.222222Z( 4) 14.44444 0.000000GOAL( 1) 0.000000 0.000000GOAL( 2) 0.000000 0.000000GOAL( 3) 0.000000 0.000000GOAL(
20、4) 0.000000 0.000000X( 1) 28.33333 0.000000X( 2) 18.88889 0.000000X( 3) 30.00000 0.000000,注:目标规划的一般模型。,设xj(j=1,2,n)为决策变量,,式中:Pk为第k级优先因子,k=1,K; 为分别赋予第l个目标约束的正负偏差变量的权系数;gl为目标的预期目标值,l=1,L。 (4.1b)为刚性约束,(4.1c)为柔性约束。,5。目标规划求解:,序贯式算法:,根据优先级的先后次序,将目标规划问题分解成一系列单目标规划问题,并将上一级的结果作为下一级的约束条件,依次求解。,LINGO与Excle的链接,
21、LINGO建模语言可以解决大规模的优化问题。在实际中模型中所需的数据可能以一定的格式保存在独立的文件中,同时也可能要求将计算的结果输入到指定文件中保存下来。,LINGO与外部文件的输入输出的三种方法:,1。Edit|Paste Special,2. File:输入数据Text:输出结果,3。ole:与电子表格的链接,在此仅介绍第3种,与Excle的链接,例:,解: 建立模型,附:程序的注释,LINGO通过OLE函数与Excle链接,该函数只能在LINGO模型的集合段,数据段,初始段使用,其格式为:,OLE(文件名.xls,数据的单元范围),注:Excle到LINGO:,1).集合段:直接引用
22、“OLE(.)” 2).数据段,初始段:变量(或属性)=“OLE(.)”,将LINGO结果输到Excle:,数据段: “OLE(.)” =变量(或属性),将数据传入LINGO中时,需对Excle中数据进行命名,具体做法如下:,用鼠标选中表格的B2:B7单元,然后选择Excle的“插入|名称|定义”,弹出一对话框,输入名称“supply”.同理,选中B11:B18,输入名称“need”,cost=OLE(Book1.XLS);,命名时单元格名最好与变量名相同,这样LINGO在调用时可以省略单元名。,注:,supply,need=OLE(Book1.XLS);,如:,同样:,在Excle中选中一单元格,命名为X,,OLE(Book1.XLS,x)=x;,将LINGO运行结果输到Excle中,