优化软件LinGo的使用_第1页
优化软件LinGo的使用_第2页
优化软件LinGo的使用_第3页
优化软件LinGo的使用_第4页
优化软件LinGo的使用_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

优化软件LINGO及其应用

最优化是工程技术、经济管理、科学研究、社会生活中经常遇到的问题,如:优化模型和优化软件的重要意义结构设计资源分配生产计划运输方案解决优化问题的手段

经验积累,主观判断

作试验,比优劣

建立数学模型(优化模型),求最优策略(决策)(最)优化:在一定条件下,寻求使目标最大(小)的决策

CUMCM赛题:约一半以上与优化有关,需用软件求解无约束优化优化(Optimization),规划(Programming)线性规划非线性规划网络优化组合优化整数规划不确定规划多目标规划目标规划动态规划2023/1/114优化问题三要素:决策变量;目标函数;约束条件约束条件决策变量优化问题的一般形式可行解(满足约束)与可行域(可行解的集合)最优解(取到最小/大值的可行解)目标函数约束优化的简单分类

线性规划(LP)

目标和约束均为线性函数

非线性规划(NLP)

目标或约束中存在非线性函数

二次规划(QP)

目标为二次函数、约束为线性

整数规划(IP)

决策变量(全部或部分)为整数整数线性规划(ILP),整数非线性规划(INLP)

纯整数规划(PIP),混合整数规划(MIP)

一般整数规划,0-1(整数)规划连续优化离散优化数学规划常用优化软件1.LINDO/LINGO软件2.MATLAB优化工具箱3.EXCEL软件的优化功能4.SAS(统计分析)软件的优化功能5.其它LINDO公司软件产品简要介绍

美国芝加哥(Chicago)大学的LinusSchrage教授于1980年前后开发,后来成立LINDO系统公司(LINDOSystemsInc.),网址:

LINDO:LinearINteractiveandDiscreteOptimizer(V6.1)LINGO:LinearINteractiveGeneralOptimizer(V9.0)LINDOAPI:LINDOApplicationProgrammingInterface(V3.0)What’sBest!:(SpreadSheete.g.EXCEL)(V8.0)演示(试用)版、学生版、高级版、超级版、工业版、扩展版…(求解问题规模和选件不同)LINGO软件能求解的优化模型

优化模型线性规划(LP)非线性规划(NLP)二次规划(QP)连续优化整数规划(IP)LPQPNLPIP全局优化(选)

ILPIQPINLP

LINDO/LINGO软件的求解过程LINDO/LINGO预处理程序线性优化求解程序非线性优化求解程序分枝定界管理程序1.确定常数2.识别类型1.单纯形算法2.内点算法(选)1、顺序线性规划法(SLP)2、广义既约梯度法(GRG)(选)3、多点搜索(Multistart)(选)建模时需要注意的几个基本问题

1、尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等3、尽量使用线性模型,减少非线性约束和非线性变量的个数

(如x/y<5改为x<5y)4、合理设定变量上下界,尽可能给出变量初始值5、模型中使用的参数数量级要适当(如小于103)LINGO软件的使用一、lingo简介例1某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示:

每个书桌每个餐桌每个椅子现有资源总数木料8单位6单位1单位48单位漆工4单位2单位1.5单位20单位木工2单位1.5单位0.5单位8单位成品单价60单位30单位20单位

若要求桌子的生产量不超过5件,如何安排三种产的生产可使利润最大?解:用desks、tables和chairs分别表示三种产品的生产量,建立线性规划(LP)模型在命令窗口中输入:Model:max=60*desks+30*tables+20*chairs;8*desks+6*tables+chairs<=48;4*desks+2*tables+1.5*chairs<=20;2*desks+1.5*tables+0.5*chairs<=8;tables<=5;end然后点击工具条上的按钮即可

Globaloptimalsolutionfoundatiteration:6Objectivevalue:280.0000VariableValueReducedCostDESKS2.0000000.000000TABLES0.0000005.000000CHAIRS8.0000000.000000RowSlackorSurplusDualPrice1280.00001.000000224.000000.00000030.00000010.0000040.00000010.0000055.0000000.000000表示6次迭代后得到全局最优解表示最优目标值为280最优解中各变量的值表示当变量有微小变动时,目标函数的变化率

给出松驰变量的值,若值为0,表示该约束为紧约束

第一行表示目标函数

第二行对应第一个约束

对偶价格.表示当对应约束有微小变动时,目标函数的变化率

变量界定函数变量界定函数实现对变量取值范围的附加限制:@bin(x)限制x为0或1@bnd(L,x,U)限制L≤x≤U@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x)限制x为整数在默认情况下,lingo规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束在命令窗口中输入:max=3*x1-2*x2+6*x3;2*x1+2*x2-x3<=3;x1+4*x2+2*x3<=5;2*x1+x2<=4;4*x2+3*x3<=8;@bin(x1);@bin(x2);@bin(x3);Globaloptimalsolutionfoundatiteration:0Objectivevalue:9.000000VariableValueReducedCostX11.000000-3.000000X20.0000002.000000X31.000000-6.000000RowSlackorSurplusDualPrice19.0000001.00000022.0000000.00000032.0000000.00000042.0000000.00000055.0000000.000000在命令窗口中输入:max=3*x1-2*x2+6*x3;2*x1+2*x2-x3<=3;x1+4*x2+2*x3<=5;2*x1+x2<=4;4*x2+3*x3<=8;@gin(x1);@gin(x2);@gin(x3);Globaloptimalsolutionfoundatiteration:0Objectivevalue:15.00000VariableValueReducedCostX11.000000-3.000000X20.0000002.000000X32.000000-6.000000RowSlackorSurplusDualPrice115.000001.00000023.0000000.00000030.0000000.00000042.0000000.00000052.0000000.000000例一奶制品加工厂用牛奶生产A1,A2两种奶制品,1桶牛奶可以在甲车间用12小时加工成3公斤A1,或者在乙车间用8小时加工成4公斤A2。根据市场需求,生产的A1,A2全部能售出,且每公斤A1获利24元,每公斤A2获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A1,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大.并进一步讨论以下3个附加问题:1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?程序如下:max=72*x1+64*x2;x1+x2<=50;12*x1+8*x2<=480;3*x1<=100;解:设该厂每天给甲车间x1桶牛奶,给乙车间x2桶牛奶,可得线性规划模型Globaloptimalsolutionfoundatiteration:4Objectivevalue:3360.000VariableValueReducedCostX120.000000.000000X230.000000.000000RowSlackorSurplusDualPrice13360.0001.00000020.00000048.0000030.0000002.000000440.000000.000000结果说明:线性规划的最优解为x1=20,x2=30,最优值为z=3360,即用20桶牛奶生产A1,30桶牛奶生产A2,可获最大利润3360元原料、劳动时间的剩余均为零,车间甲尚余40(公斤)加工能力

原料增加1个单位(1桶牛奶)时利润增长48(元)

Rangesinwhichthebasisisunchanged:

ObjectiveCoefficientRangesCurrentAllowableAllowableVariableCoefficientIncreaseDecreaseX172.0000024.000008.000000X264.000008.00000016.00000RighthandSideRangesRowCurrentAllowableAllowableRHSIncreaseDecrease250.0000010.000006.6666673480.000053.3333380.000004100.0000INFINITY40.00000最优基不变条件下目标函数系数的允许变化范围:x1的系数为(72-8,72+24)=(64,96)

给出了影子价格有意义条件下约束右端的限制范围:如milk原料=(50-6.66667,50+10)

模型min或max

f(x)S.T.G(x)≤或≥或=0

L≤x≤U要素:

1.变量(符号)2.常量(数据)

3.关系(函数、方程)例题1数学模型:mins.t.其中:xl=5246cl=

494c=106712161059541010要素:

1.下标集/数组

(符号)2.常量(数据)

3.关系(函数、方程)

目标与约束段集合段(SETSENDSETS)数据段(DATAENDDATA)初始段(INITENDINIT)计算段(CALCENDCALC)-LINGO9.0LINGO模型的构成:5个段要素:

1.下标集/数组

(符号)2.常量(数据)

3.关系(函数、方程)实例集合段数据段目标与约束段模型变量数学表示:

Lingo表示:1.单下标集及1维数组SI/1..n/:CL;①直接列举成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。例可以定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age:

sets:students/JohnJill,RoseMike/:sex,age;endsets结果:定义两个4维数组{Sex(john),Sex(jill),Sex(rose),Sex(mike)}{age(john),age(jill),age(rose),age(mike)}②隐式列举成员时,不必罗列出每个集成员。可采用如下语法:setname/member1..memberN/[:attribute_list];这里的member1是集的第一个成员名,memberN是集的最末一个成员名。LINGO将自动产生中间的所有成员名。LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。列表如下:隐式成员列表格式示例所产生集成员1..n1..51,2,3,4,5StringM..StringNCar2..car14Car2,Car3,Car4,…,Car14DayM..DayNMon..FriMon,Tue,Wed,Thu,FriMonthM..MonthNOct..JanOct,Nov,Dec,JanMonthYearM..MonthYearNOct2001..Jan2002Oct2001,Nov2001,Dec2001,Jan2002③集成员不放在集定义中,而在随后的数据部分来定义。例

!集部分;sets:students:sex,age;endsets!数据部分;data:students,sex,age=John116Jill014Rose017Mike113;enddataStudents=John,Jill,Rose,Mike;Sex=1001;Age=16141713;变量数学表示:

Lingo表示:2.多下标集及多维数组SI/1..n/;SJ/1..m/;IJ(SI,SJ):x,c;例sets:product/AB/;machine/MN/;allowed(product,machine):x;endsetsLINGO生成了2个父集的所有组合共4组作为allowed集的成员。列表如下:编号成员1X(A,M)2

X(A,N)3

X(B,M)4

X(B,N)成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。

如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有两种方式生成:①元素列表;②元素过滤。

①元素列表

sets:product/AB/;machine/MN/;allowed(product,machine)/A,MB,N/:X;endsetsLINGO生成了2个父集的所有组合共2组作为allowed集的成员。列表如下:编号成员1(A,M)2

(B,N)②元素过滤

sets:!生成ABCD四人的性别和年龄数组

s/A,B,C,D/:sex,age;!男和女的联系集

linkmf(s,s)|sex(&1)#eq#1#and#sex(&2)#eq#0:friend;endsets用竖线(|)来标记一个成员资格过滤器的开始;#eq#是逻辑运算符,用来判断是否“相等”;

&1可看作派生集的第1个原始父集的索引,它取遍该原始父集的所有成员;&2可看作派生集的第2个原始父集的索引集合的类型

集合派生集合基本集合稀疏集合稠密集合元素列表法元素过滤法直接列举法隐式列举法setname[/member_list/][:attribute_list];setname(parent_set_list)[/member_list/][:attribute_list];SETS:CITIES/A1,A2,A3,B1,B2/;ROADS(CITIES,CITIES)/ A1,B1A1,B2A2,B1A3,B2/:D;ENDSETSSETS:STUDENTS/S1..S8/;PAIRS(STUDENTS,STUDENTS)|&2#GT#&1:BENEFIT,MATCH;ENDSETS运算符的优先级优先级运算符最高#NOT#—(负号)^*/+—(减法)#EQ##NE##GT##GE##LT##LE##AND##OR#最低<(=)=>(=)三类运算符:算术运算符逻辑运算符关系运算符特殊符号

!段落注释符

;段落结束符

[]

方程注释符变量(符号)要求

命名同程序语言

不区分大小写集合函数数学表示:

LinGo表示:2.@SUM(I(i)

|

i#LE#k:a(i));1.@SUM(IJ(i,j):c(i,j)*x(i,j));条件和逻辑运算符#EQ#

=#NE#≠#GT#>#GE#≥#LT#<#LE#≤#AND#与#OR#或#NOT#

非@IF(条件表达式,真值,否值)条件函数数学函数@ABS(X)@COS(X)@EXP(X)@LOG(X)@SIN(X)@TAN(X)@SMAX(X1,X2,...,XN)@SMIN(X1,X2,...,XN)@FLOOR(X)integerfunction@LGM(X)gammafunction@SIGN(X)signfunction集合函数特征@函数(下标集

(下标变量)

|下标限制条件

:

变量表达式);@SUM(I(i)

|

i#LE#k:a(i));重要的集合函数@FOR@FOR(I(i)|i#NE#3:cl(i)<=100);

重要的集合函数@FOR@SUM@MIN@MAX例题1数学模型:mins.t.其中:xl=5246cl=

494c=106712161059541010分析:下标变量有:

1.xl4个分量

2.cl3个分量

3.x,c3×4个分量下标集:

si

1,…,3sj1,…,4sij

=(si,sj)1.下标变量si/1..3/:cl;sj/1..4/:xl;sij(si,sj):c,x;lingo建模:lingo建模2.目标函数或min@sum(sij:c*x);minmin@sum(sij(i,j):c(i,j)*x(i,j));2.约束条件:@for(sj(j):等式);@for(si(i):@sum(sj(j)):x(i,j))=cl(i));默认@sum(si(i):x(i))=xl(j)完整模型:model:sets:si/1..3/:cl;sj/1..4/:xl;sij(si,sj):c,x;endsets!数据设置;data:

xl=5246;cl=494;c=106712161059541010;enddata[obj]min=@sum(sij:c*x);@for(sj(j):

[eq1]@sum(si(i):x(i,j))=xl(j));@for(si(i):

[eq2]@sum(sj(j):x(i,j))=cl(i));end模型求解最优非零解灵敏度分析Lingo模型例题选址问题:NLP改建两个新料场,需要确定新料场位置(xj,yj)和运量cij

,在其它条件不变下使总吨公里数最小。决策变量:cij,(xj,yj)~16维非线性规划模型LINGO模型的构成:4个段集合段(SETSENDSETS)数据段(DATAENDDATA)初始段(INITENDINIT)目标与约束段

局部最优:89.8835(吨公里

)LP:移到数据段边界例题2数学模型:2000,Bmins.t.其中:b,c,s为常量变量取值限制@BND(下限,变量或分量,上限);默认下限为0@FREE(变量或分量);

@GIN(变量或分量);限制变量或分量为整数@BIN(变量或分量);限制变量或分量为0,1通常与@for联用@for(I:@bin(x));完整模型:model:sets:GC/1..7/:s,t;A/1..15/:y,z,b;link(GC,A):c,x;endsetsmin=@sum(link(i,j):c(i,j)*x(i,j))+0.1*@sum(A(j):0.5*((1+y(j))*y(j)+(1+z(j))*z(j)));@for(GC(i):@sum(A(j):x(i,j))>=500*t(i);@sum(A(j):x(i,j))<=s(i)*t(i));@for(A(j):@sum(GC(i):x(i,j))=y(j)+z(j));@for(A(j)|j#LE#14:z(j)+y(j+1)=b(j));y(1)=0.0;z(15)=0.0;@for(GC:@BIN(t));data:s=;b=;c=;enddataend求解情况求解情况Lingo数据传输

程序与数据分离文本文件使用外部数据文件Cut(orCopy)–Paste方法@FILE

输入数据、@TEXT输出数据(文本文件)@OLE函数与电子表格软件(如EXCEL)连接@ODBC函数与数据库连接LINGO命令脚本文件LG4(LONGO模型文件)LNG(LONGO模型文件)LTF(LONGO脚本文件)LDT(LONGO数据文件)LRP(LONGO报告文件)常用文件后缀@FILE和@TEXT:文本文件输入输出MODEL:SETS:MYSET/@FILE(‘myfile.txt’)/:@FILE(‘myfile.txt’);ENDSETSMIN=@SUM(MYSET(I):SHIP(I)*COST(I));@FOR(MYSET(I):[CON1]SHIP(I)>NEED(I);[CON2]SHIP(I)<SUPPLY(I));DATA:COST=@FILE(‘myfile.txt’);NEED=@FILE(‘myfile.txt’);SUPPLY=@FILE(‘myfile.txt’);@TEXT(‘result.txt’)=SHIP,@DUAL(SHIP),@DUAL(CON1);ENDDATAENDmyfile.txt文件的内容、格式:Seattle,Detroit,Chicago,Denver~COST,NEED,SUPPLY,SHIP~12,28,15,20~1600,1800,1200,1000~1700,1900,1300,1100@OLE:与EXCEL连接MODEL:SETS:MYSET:COST,SHIP,NEED,SUPPLY;ENDSETSMIN=@SUM(MYSET(I):SHIP(I)*COST(I));@FOR(MYSET(I):[CON1]SHIP(I)>NEED(I);[CON2]SHIP(I)<SUPPLY(I));DATA:MYSET=@OLE('D:\JXIE\BJ2004MCM\mydata.xls','CITIES');COST,

温馨提示

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

评论

0/150

提交评论