数学规划模型与lingo入门数学规划模型决策变量x=(x1,x2,…,xn)目标函数MinZ=f(x)约束条件s.txA(Rn)等式或不等式求解线性:单纯形法非线性:……数学规划线性规划非线性规划整数规划连续规划0-1规划一、Lingo软件二、Lingo基本语法1、定义了目标函数为MIN=..MAX=..2、以一个分号“;”结尾——除SETS,ENDSETS,DATA,ENDDATA,END之外3、可以放在约束条件的右端,同时数字也可放在约束条件的左端。4、假定各变量非负。5、注释:“!”6、、为≤、≥逻辑运算符#NOT#否定#EQ#相等#NE#不等#AND#并且#OR#或者#GT#大于#GE#大于等于#LT#小于#LE#小于等于算术运算符+-*/^关系运算符(=)=(=)三、Lingo运算符和函数1、运算符及其优先级Lingo内部函数——”@”@ABS(X)@SIN(X)@COS(X)@TAN(X)@LOG(X)@EXP(X)@SMAX(list)@SMIN(list)@SIGN(X)@FLOOR(X)2、Lingo基本数学函数@GIN(X)整数变量@BIN(X)0-1变量@FREE(X)自由变量@BND(L,X,U)[L,U]3、Lingo变量定界函数分段函数@IF(logical_condition,true_result,false_result)4、Lingo条件判断函数5、Lingo集合循环函数难点!重点!——略例1@free(x2);min=1.4*x1+7*x2+0.9*x3+6*x4+3*x5+4.1*x6;6.1*x1+8.4*x2+.9*x3+8.5*x4+4.8*x5+2.3*x6=31.82;x6=x4+0.1;x3=@if(x5#gt#0,x5-0.2,x1+0.4);x4=@if(x6#gt#0,x6-0.1,x4);@bnd(-5,x1,5);@bnd(0,x3,1.3);例2加工奶制品的生产计划1桶牛奶3公斤A112小时8小时4公斤A2或获利24元/公斤获利16元/公斤50桶牛奶时间480小时至多加工100公斤A1制订生产计划,使每天获利最大每天:1桶牛奶3公斤A112小时8小时4公斤A2或获利24元/公斤获利16元/公斤x1桶牛奶生产A1x2桶牛奶生产A2获利24×3x1获利16×4x2原料供应5021xx劳动时间48081221xx加工能力10031x决策变量目标函数216472xxzMax每天获利约束条件非负约束0,21xx线性规划模型(LP)时间480小时至多加工100公斤A150桶牛奶每天线性规划模型的一般形式11max,1,2,...,.s.t.0,1,2,...,.niiinikkikizcxaxbimxin目标函数和所有的约束条件都是设计变量的线性函数.min.s.tzcxAxbvlbxvub矩阵形式:模型求解图解法x1x20ABCDl1l2l3l4l55021xx48081221xx10031x0,21xx约束条件50:211xxl480812:212xxl1003:13xl0:,0:2514xlxl216472xxzMax目标函数Z=0Z=2400Z=3360z=c(常数)~等值线c在B(20,30)点得到最优解目标函数和约束条件是线性函数可行域为直线段围成的凸多边形目标函数的等值线为直线最优解一定在凸多边形的某个顶点取得。模型求解软件实现LINGOmax=72*x1+64*x2;x1+x250;12*x1+8*x2480;3*x1100;OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=2DORANGE(SENSITIVITY)ANALYSIS?No20桶牛奶生产A1,30桶生产A2,利润3360元。例2加工奶制品的生产计划1桶牛奶3公斤A112小时8小时4公斤A2或获利24元/公斤获利16元/公斤50桶牛奶时间480小时至多加工100公斤A1•35元可买到1桶牛奶,买吗?若买,每天最多买多少?•可聘用临时工人,付出的工资最多是每小时几元?•A1的获利增加到30元/公斤,应否改变生产计划?每天:结果解释OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=2原料无剩余时间无剩余加工能力剩余40max=72*x1+64*x2;x1+x250;12*x1+8*x2480;3*x1100;三种资源“资源”剩余为零的约束为紧约束(有效约束)结果解释OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=2最优解下“资源”增加1单位时“效益”的增量原料增加1单位,利润增长48时间增加1单位,利润增长2加工能力增长不影响利润影子价格•35元可买到1桶牛奶,要买吗?3548,应该买!•聘用临时工人付出的工资最多每小时几元?2元!RANGESINWHICHTHEBASISISUNCHANGED:OBJCOEFFICIENTRANGESVARIABLECURRENTALLOWABLEALLOWABLECOEFINCREASEDECREASEX172.00000024.0000008.000000X264.0000008.00000016.000000RIGHTHANDSIDERANGESROWCURRENTALLOWABLEALLOWABLERHSINCREASEDECREASE250.00000010.0000006.6666673480.00000053.33333280.0000004100.000000INFINITY40.000000最优解不变时目标函数系数允许变化范围DORANGE(SENSITIVITY)ANALYSIS?Yesx1系数范围(64,96)x2系数范围(48,72)•A1获利增加到30元/千克,应否改变生产计划x1系数由243=72增加为303=90,在允许范围内不变!(约束条件不变)结果解释RANGESINWHICHTHEBASISISUNCHANGED:OBJCOEFFICIENTRANGESVARIABLECURRENTALLOWABLEALLOWABLECOEFINCREASEDECREASEX172.00000024.0000008.000000X264.0000008.00000016.000000RIGHTHANDSIDERANGESROWCURRENTALLOWABLEALLOWABLERHSINCREASEDECREASE250.00000010.0000006.6666673480.00000053.33333280.0000004100.000000INFINITY40.000000影子价格有意义时约束右端的允许变化范围原料最多增加10时间最多增加53•35元可买到1桶牛奶,每天最多买多少?最多买10桶!(目标函数不变)基本使用构成:4个段目标与约束段集合段(SETSENDSETS)数据段(DATAENDDATA)初始段(INITENDINIT)(计算段(CALCENDCALC))四、Lingo建模语言某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)假设:料场和工地之间有直线道路(1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨。制定每天的供应计划:即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。i123456a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611例3选址问题决策目标约束解:决策变量:料场j到工地i的运量——cij——12维线性规划模型?lingo——表达式?26221/2112161min[()()].,1,...,6,1,20,1,...,6,1,2ijjijijiijijijjiijcxaybstcdicejcij目标:吨公里约束:需求供应目标与约束段MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddatainit:endinitmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(i):@sum(demand(j):c(j,i))=e(i););@for(supply:@free(X);@free(Y););END集合段数据段初始段供应约束需求需求点的位置供需量供应初始点目标需求约束连接建筑工地位置坐标(ai,bi)、水泥日用量di:对每个建筑工地(6个)都有一个对应的值都是一个由6个元素组成的数组——是已知的料场位置坐标(xj,yj)、日储量ej对每个料场(2个)都有一个对应的值都是一个由2个元素组成的数组——目前是已知的料场到建筑工地的供应计划cij对每个料场与建筑工地之间(6×2)都有一个对应的值是一个6×2个元素组成的矩阵——是未知数LINDO无数组,每个变量输入——麻烦(1)Lingo的集合Set——下标集合——100个工地?1、Lingo的集合Set及其属性Attribute例3Lingo中集的定义语法:setname/member_list/:attribute_list;说明:setname为集的名称;/member_list/为成员列表;attribute_list为属性列表。(2)集合Set及其属性Attribute定义数组下标集合demand/1..6/———表示6个建筑工地a,b,d称为该集合的属性———表示坐标(ai,bi)、水泥日用量di定义数组下标集合supply/1..2/———表示6个建筑工地该集合的属性x,y,e———表示坐标(xj,yj)、日储量ej定义数组下标集合link(demand,supply)———表示6×2个料场到建筑工地的连接该集合的属性c———表示每个料场与建筑工地之间供应计划cij1到6的整数建立下标集合(3)Lingo建模语言——集合段数据段需求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,s