您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 数学建模讲座优化建模与LINGO优化软件
数学建模讲座优化建模与LINGO优化软件例1minf(x1,x2)=-2x1-6x2+x12-2x1x2+2x22s.t.x1+x2≤2-x1+2x2≤2x1≥0,x2≥0Lingo基础Lingo程序MIN=-2*X1-6*X2+X1*X1-2*X1*X2+2*X1*X1;X1+X2=2;-X1+2*X2=2;Lingo基础计算结果Objectivevalue:-9.777778X1=0.6666667X2=1.333333Lingo基础例2)12424()(22122211xxxxxexfxx1+x2=0s.t.1.5+x1x2-x1-x20-x1x2–100Lingo基础Lingo程序min=@exp(x1)*(4*x1*x1+2*x2*x2+4*x1*x2+2*x2+1);x1+x2=0;1.5+x1*x2-x1-x2=0;-x1*x2-10=0;@free(x1);@free(x2);Lingo基础计算结果Objectivevalue:5.276848X1=1.224745X2=-1.224745这是局部最优值Lingo基础Lingo菜单中Options,选GlobalSolver,在UseGlobalSolver中打钩,再次计算。Objectivevalue:1.156627X1=-3.162278X2=3.162278Lingo基础例三2,1,6,...,1,..])()[(min612121612/122jecidctsbyaxcjijiiijjjiijijijLingo基础例三中,x,y,e是一维数组,长度为2,a,b,d也是一维数组,长度为6,c是二维数组(6×2矩阵)Lingo中如何定义它们?Lingo基础Lingo程序example3_2sets: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;enddataLingo基础init:x,y=5,1,2,7;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:@bnd(0.5,X,8.75);@bnd(0.75,Y,7.75););ENDLingo基础计算结果为Objectivevalue:89.88349模型的集部分LINGO有两种类型的集:原始集(primitiveset)和派生集(derivedset)。一个原始集是由一些最基本的对象组成的。一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。定义一个原始集,用下面的语法:setname[/member_list/][:attribute_list];注意:用“[]”表示该部分内容可选。Member_list是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们模型的数据部分数据部分以关键字“data:”开始,以关键字“enddata”结束。在这里,可以指定集成员、集的属性。数据部分的未知数值有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格数据部分的未知数值sets:years/1..5/:capacity;endsetsdata:capacity=,34,20,,;enddata属性capacity的第2个和第3个值分别为34和20,其余的未知模型的初始部分一个初始部分以“init:”开始,以“endinit”结束。初始部分的初始声明规则和数据部分的数据声明规则相同。模型的初始部分init:x,y=5,1,2,7;endinitLINGO函数基本运算符数学函数金融函数概率函数变量界定函数集操作函数集循环函数数据输入输出函数辅助函数算术运算符^乘方﹡乘/除﹢加﹣减逻辑运算符#not##eq##ne##gt##ge##lt##le##and##or#关系运算符LINGO有三种关系运算符:“=”、“=”和“=”。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:A+ε=B,数学函数@abs(x)@sin(x)@cos(x)@tan(x)@exp(x)@log(x)@lgm(x)返回x的gamma函数的自然对数@sign(x)如果x0返回-1;否则,返回1@floor(x)返回x的整数部分。@smax(x1,x2,…,xn)@smin(x1,x2,…,xn)变量界定函数@bin(x)限制x为0或1@bnd(L,x,U)限制L≤x≤U@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x)限制x为整数集操作函数@index([set_name,]primitive_set_element)该函数返回在集set_name中原始集成员primitive_set_element的索引。集操作函数@wrap(index,limit)该函数为index模limit再加1@size(set_name)该函数返回集set_name的成员个数集合循环函数四个集合循环函数:FOR、SUM、MAX、MIN@function(setname[(set_index_list)[|condition]]:expression_list);例:PAIRSJIJIMATCHJIBENEFIT),(),(*),(@SUM(PAIRS(I,J):BENEFIT(I,J)*MATCH(I,J));例:@FOR(STUDENTS(I):@SUM(pair(j,k)|j#EQ#i#OR#k#EQ#i:match(j,k))=1);...2,1,1),(),(ikjmatchikijpairkj或@FILE和@TEXT:文本文件输入输出data:a=@file(example3_3.ldt);b=@file(example3_3.ldt);d=@file(example3_3.ldt);e=@file(example3_3.ldt);enddatainit:x,y=@file(example3_3.ldt);endinit1.25,8.75,0.5,5.75,3,7.25~1.25,0.75,4.75,5,6.5,7.75~3,5,4,7,6,11~20,20~5,1,2,7Example3_3.ldt的格式@FILE和@TEXT:文本文件输入输出比较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;@OLE:与EXCEL连接使用格式@OLE(“filename”[,range_name_list])filename为电子表文件名,range_name_list为数据的单元范围。@OLE的使用例子Excel文件example3_4.xls的内容abdexyresult1.251.25320518.750.75520270.54.7545.755736.567.257.7511注意要将表格中的数据进行命名:选中数据,选菜单“插入|名称|定义”在这里分别命名为a,b,d,e,x,y,result@OLE的使用例子Lingo文件example3_4.lg4的内容data:a,b,d,e=@OLE(d:\数学建模\EXAMPLE3_4.XLS);enddatainit:x,y=@Ole(d:\数学建模\Example3_4.xls);endinit@OLE的使用例子如果在Lingo文件example3_4.lg4加上以下内容其他不变data:@ole(d:\数学建模\EXAMPLE3_4.XLS,result)=c;@ole(d:\数学建模\EXAMPLE3_4.XLS,x)=x;@ole(d:\数学建模\EXAMPLE3_4.XLS,y)=y;enddata@OLE的使用例子则example3_4.xls变为abdexyresult1.251.253205.695944.92852438.750.755207.2499977.7500.54.75455.7557036.5647.257.751107015011注意其中x,y,result的变化例加工奶制品的生产计划1桶牛奶3公斤A112小时8小时4公斤A2或获利24元/公斤获利16元/公斤50桶牛奶时间480小时至多加工100公斤A1制订生产计划,使每天获利最大•35元可买到1桶牛奶,买吗?若买,每天最多买多少?•可聘用临时工人,付出的工资最多是每小时几元?•A1的获利增加到30元/公斤,应否改变生产计划?每天: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桶牛奶每天模型求解max=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=220桶牛奶生产A1,30桶生产A2,利润3360元。模型求解reducedcost值表示当该非基变量增加一个单位时(其他非基变量保持不变)目标函数减少的量(对max型问题)OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=2也可理解为:为了使该非基变量变成基变量,目标函数中对应系数应增加的量OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000原料无剩余时间无剩余加工能力剩余40max72x1+64x
本文标题:数学建模讲座优化建模与LINGO优化软件
链接地址:https://www.777doc.com/doc-4734564 .html