Lingo软件在求解数学优化问题的使用技巧_第1页
Lingo软件在求解数学优化问题的使用技巧_第2页
Lingo软件在求解数学优化问题的使用技巧_第3页
Lingo软件在求解数学优化问题的使用技巧_第4页
Lingo软件在求解数学优化问题的使用技巧_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

#乙x=5iTOC\o"1-5"\h\z=1x+x=112s.t.1x+x+x>1678x+x+x<2146x+x<18x,x,…,x=0或1128用LINGO编程如下:MODEL:SETS:team/1..8/:a,x;ENDSETSDATA:a=1.92,1.90,1.88,1.86,1.85,1.83,1.80,1.78;!给出身高数据;ENDDATAmax=@sum(team(i):a(i)*x(i))/5.0;@SUM(team(i):x(i))=5;!所选队员为5人;x(1)+x(2)=1;!只能有一名中锋上场;x(6)+x(7)+x(8)>=1;!至少有一名后卫上场;x(1)+x(4)+x(6)<=2;!如果1号和4号上场,则6号不上场;x(2)+x(8)<=1;!2号和8号至少有一个不出场.即出场人数至多为1个;@FOR(team(i):@bin(x(i)));!所有变量为0-1变量;END所得到的解为:x(1)=0,x(2)=1,x(3)=1,x(4)=1,x(5)=1,x(6)=1,x(7)=0,x(8)=0即第2,3,4,5,6名队员被选上。最大平均身高为Z=1.864米5.有五项设计任务可供选择。各项设计任务的预期完成时间分别为3,8,5,4,10(周)设计报酬分别为7,17,11,9,21(万元)。设计任务只能一项一项地进行,总的期限为20周选择任务时必须满足下面要求:至少完成3项设计任务。若选择任务1,必须同时选择任务2。任务3和任务4不能同时选择。应当选择哪些任务,才能使总的设计报酬最大?分析与求解:这是一个0-1整数规划问题。设0-1变量x如下:i~0第i项设计任务未选上x=1i[1第i项设计任务被选上设各项设计任务的完成时间为t(i=1,2,…,5)表示,设计报酬为m(i=1,2,…,5)表示。则

容易得到目标函数:maxZ=Xmxiii二1根据题目要求分别列出约束条件如下:总期限为避免20周,则约束条件为Xtx<20iii二1至少完成3项设计任务,则Xx>3ii二1若选择任务1,必须同时选择任务2,则x>x。21任务3和任务4不能同时选择,则x+x<1,该约束表达式表明任务3和任务4至多只34能选择1个。因此对该问题建立的数学模型如下:maxZ=Xmxiii=1Xtx<20iiXx>3Xx>3iS.t・vi=1x>x21x+x<134x,x,x,x=0或11234LINGO程序如下:MODEL:SETS:mat/1..5/:m,t,x;ENDSETSDATA:m=7,17,11,9,21;!定义报酬数组;t=3,8,5,4,10;!定义完成时间;ENDDATAmax=@SUM(mat(i):m(i)*x(i));!定义目标函数;@SUM(mat(i):t(i)*x(i))<=20;!期限约束;@SUM(mat(i):x(i))>=3;!至少完成3项任务;x(2)>=x(1);!若选择任务1,必须同时选择任务2x(3)+x(4)<=1;!任务3和任务4不能同时选择。;@FOR(mat(i):@BIN(x(i)));!使各变量为0-1变量;END得到的解为x(1)=1,x(2)=1,x(3)=1,x(4)=0,x(5)=0。最大报酬为35万元。即在满足各种约束条件下,选择设计任务1,2,3,可使总报酬达到最大为35万元。固定费用有四种资源被用于生产三种产品,资源量、产品单件可变费用、单件售价、资源单耗量及组织三种商品生产的固定费用见下表。现要求制定一个生产计划,使总收益最大。^源^量品IIIIII资源量A248500B234300C123100D357700单件可变费用4612固定费用100150200单件售价71020分析与求解:总收益等于销售收入减去生产产品的固定费用与可变费用之和。问题的困难之处在于事先不知道某种产品是否生产,因而不能确定是否有相应的固定费用。可引入用0-1变量来解决是否需要固定费用问题。设Xj是第j种产品的产量,j=1,2,3;再设1若生产第j种产品(x>0)y=2jj=123j0若不生产第j种产品(X=0)J,'j第I种产品销售一件可收入7-4=3元,第II种产品销售一件可收入10-6=4元,第III种产品销售一件可收入20-12=8元。则问题的整数规划模型为:maxZ=3x+4x+8x-100y-150y-200y123123x+4x+8x<500123x+3x+4x<300123x+2x+3x<100123x+5x+7x<700123s.t.s.t.111x<My222x<My33x>0且为整数,j=1,2,3y=0或1,j=1,2,3j其中M为x的某个上界。如根据第2个约束条件,可取m=150,M=100,jj12M=75。也可统一取其最大值M=150。3如果生产第j种产品,则起产量x>0。由约束条件x<My知y=1,此时相应jjjjj的生产第j种产品的固定费用在目标函数被考虑。如果不生产第j种产品,则起产量x=0。j由约束条件x<My知y可为0也可为1。但显然只有y=0有利于目标函数最大,从而jjjjj相应的生产第j种产品的固定费用在目标函数将不被考虑。因此引入y是合理的。j下面是LINGO程序。MODEL:DATA:M=150;ENDDATAmax=3*x1+4*x2+8*x3-100*y1-150*y2-200*y3;!目标函数;2*x1+4*x2+8*x3<=500;2*x1+3*x2+4*x3<=300;x1+2*x2+3*x3<=100;3*x1+5*x2+7*x3<=700;x1<=M*y1;x2<=M*y2;x3<=M*y3;@GIN(x1);@GIN(x2);@GIN(x3);!指定产品件数为整数;@BIN(y1);@BIN(y2);@BIN(y3);!指定0-1变量;end得到的解为xl=100,x2=0,x3=0,yl=l,y2=0,y3=0。最大值为Z=200元。某公司生产A,B和C3种产品,售价分别是12元、7元和6元。生产每件A产品需要1小时技术服务、10小时直接劳动、3千克材料;生产每件B产品需要2小时技术服务、4小时直接劳动、2千克材料;生产每件C产品需要1小时技术服务、5小时直接劳动、1千克材料。现在最多能提供100小时技术服务、700小时直接劳动、400千克材料。生产成本是非线性函数,如下表。要求建立一个总利润最大的数学模型。产品A成本产品B成本产品C成本(产量件)(元/件)(产量件)(元/件)(产量件)(元/件)0〜40100〜5060〜100541〜100951〜1004100以上4101〜1508100以上3150以上7分析与求解:

设生产产品Ax件,生产产品Bx件,生产产品Cx件。问题的难点是产品的成本是一个分123段函数,难以用线性函数表达,因此可采用动态库编写一个专门的函数来计算成本。设产品A每件的成本为a元,产品B每件的成本为b元,产品C每件的成本为c元,a、b、c随x、x、x而改变。123目标函数为:maxZ=目标函数为:maxZ=12x+7x12+6x-(ax+bx+cx)3123x+2x+x<10012310x+4x+5x<700s.t.{123x+2x+x<400123x,x,x>0且为整数12310其中a0<x10其中a0<x<40141<x<1001101<x<1502150以上0<x<50251<x<100,2100以上5c=140<x3<100100以上由于目标函数是非线性的,且难以用一个式子表达,因此采用自己编写用户函数的方式来实现。这里先介绍@USER函数该函数允许用户自己编写函数,该函数应当用C或FORTRAN语言编写,返回值为用户计算的结果。从编程角度来看,@USER函数包含两个参数:第一个用于指定参数的个数,第二个用于指定参数向量(类似于C语言中的main(argc,argv)的编写格式)。在LINGO中调用@USER时则直接指定对应的参数(类似C语言中的main(argc,argv)的执行格式)。该函数采用动态库编写。这里的例子采用VC编写动态库。注意动态库中该函数名固定为MYUSER,在LINGO中调用时则固定外部函数名为USER。下面是VC中该动态库的编写过程:启动VC6.0,选择File->New。启动New属性单,选择Projects页面。再选择WIN32Dynamic-LinkLibrary。在右边Projectname标签下的编辑框中任意输入一个工程名。如CALC。点击OK命令按钮后就建立了一个新的空的工程。选择Project->AddtoProject->New。在New属性单中选择File页面。在下面空白框中选择C++SourceFile。在右边File标签下的编辑框中输入一个文件名。^口CB。编辑C++程序CB.CPP如下:#include<windows.h>#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>#defineN3#defineDllExportextern"C"__declspec(dllexport)//该函数计算成本DllExportvoidMYUSER(int*NumArgs,double*x,double*dResult){doublesum;if(*NumArgs<N){MessageBox(NULL,输入变量不足”,”输入错误”,MB_OK);*dResult=-1;exit(0);}sum=0;〃产品A的成本计算if(x[0]>=0&&x[0]<=40)sum+=10*x[0];elseif(x[0]>=41&&x[1]<=100)sum+=9*x[0];elseif(x[0]>=101&&x[1]<=150)sum+=8*x[0];elsesum+=7*x[0];〃产品B的成本计算if(x[1]>=0&&x[1]<=50)sum+=6*x[1];elseif(x[1]>=51&&x[1]<=100)sum+=4*x[1];elsesum+=3*x[1];〃产品C的成本计算if(x[2]>=0&&x[2]<=100)sum+=5*x[2];elsesum+=4*x[2];*dResult=sum;//返回成本总值}注意在程序中MYUSER函数的第一个整型变量NumArgs代表输入的变量个数。根据LINGO调用时输入的变量个数,可以在C++程序内部得到输入变量的总数。第二个输入为向量x,就是外部输入的变量。第三个变量dResult用于返回最后的计算结果。用LINGO调用时只需要输入各变量就行了,自然会返回C++程序计算的结果dResult。变好程序后,按F7运行后生成动态库CALC.DLL。将其拷贝到LINGO目录下,并将文件名改名为MYUSER.DLLo启动LINGO,就可以通过外部函数@USER调用动态库中自己编写的函数。LINGO程序:!采用动态库编写自己的函数;MODEL:max=12*x1+7*x2+6*x3-@USER(x1,x2,x3);!目标函数;x1+2*x2+x3<=100;!技术服务的约束;10*x1+4*x2+5*x3<=700;!直接劳动的约束;3*x1+2*x2+x3<=400;!材料的约束;@GIN(x1);@GIN(x2);@GIN(x3);end迭代6步得到局部最优解为xl=70,x2=0,x3=0o总利润最大为210元。容易验证,该局部最优解也是全局最优解。8.某企业和用户签定了设备交货合同,已知该企业各季度的生产能力、每台设备的生产成本和每季度末的交货量见下表,若生产出的设备当季度不交货,每台设备每季度需要支付保管费0.1万元,试问在遵守合同的条件下,企业应如何安排生产计划,才能使年消耗费用最低?季度工厂生产能力(台)交货量(台)每台设备生产成本(台)1251512.02352011.03302511.54202012.5分析与求解:方法1:设第i季度生产X台,库存y台,i=1,2,3,4。第i季度生产能力用p表示,交货量用diiii表示,每台设备生产成本用c表示。则建立目标函数为:iminZ=Y(cx+0.1y)iiii二1x<pi=1,2,3,4iiy=y+x—di=2,3,4TOC\o"1-5"\h\zS.tii-1iiy=x—d111x>0,y>0iiLINGO程序如下:MODEL:SETS:QUART/1..4/:x,y,p,d,c;ENDSETSDATA:!指定数据;p=25,35,30,20;d=15,20,25,20;c=12.0,11.0,11.5,12.5;ENDDATAmin=@sum(QUART(i):c(i)*x(i)+0.1*y(i));!目标函数;@FOR(QUART(i):x(i)<=p(i));!生产能力限制;@FOR(QUART(i)|i#GT#1:y(i)=y(i-1)+x(i)-d(i));y(1)=x(1)-d(1);end得到的结果如下:x1=15,x2=35,x3=30,x4=0;y1=0,y2=15,y3=20,y4=0。年消耗最小费用为913.5万元。方法1:设x.•第i季度生产第j季度交货的台数,第i季度生产能力用p表示,交货量用d表示,ijii每台设备生产成本用c表示。由于生产能力的限制,需要满足下面条件:i工x<pi=1,2,3,4ijij二i根据交货量的规定,应满足如下条件£x=dj=1,2,3,4ijji二i第i季度生产第j季度交货的每台设备所消耗的费用Cj,应等于生产成本加上保管维护费用之和,其值如下表:、产交、、季货、^i季j\1234112.012.112.212.3211.011.111.2311.511.6412.5则该模型表示如下:cxijxjmincxijxjx<pi=1,2,3,4TOC\o"1-5"\h\zijij=iS.t・<£jx=dj=1,2,3,4ijji=1x>0、ijLINGO程序如下:MODEL:SETS:QUART/1..4/:p,d;LINK(QUART,QUART)|&1#LE#&2:x,c;!只取上三角阵;ENDSETSDATA:!指定数据;p=25,35,30,20;d=15,20,25,20;c=12.012.112.212.311.011.111.211.511.612.5;

ENDDATAMIN=@SUM(LINK:c*x);!目标函数;@FOR(QUART(i):@SUM(QUART(j)|j#GE#i:x(i,j))<=p(i));!生产能力限制;@FOR(QUART(j):@SUM(QUART(i)|i#LE#j:x(i,j))=d(j));!交货合同限制;end得到的结果如下:X(1,1)=15,X(1,2)=0,X(1,3)=0,X(1,4)=0;X(2,2)=20,X(2,3)=0,X(2,4)=15。X(3,3)=25,X(3,4)=5;X(4,4)=0。年消耗最小费用为913.5万元。可以看出,第1季度生产量为15台,第2季度生产量为35台,第3季度生产量为30台,第4季度生产量为0台,与前面方法得到的结果一样。其最小费用也一样。9(TSP问题)设有一个售货员从10个城市中的某一个城市出发,去其它9个城市推销产品。10个城市相互距离如下表。要求每个城市到达一次仅一次后,回到原出发城市。问他应如何选择旅行路线,使总路程最短。城市1234567891010745861213111827031091451417173430591021827124510501491092316589914078720196614109701352513712521108130232118813148975230181291117272320252118016101817121619131812160问题分析与建模:设城市之间距离用矩阵d来表示,其中d为下三角矩阵,d..表示城市i与城市j之间的ij距离。设0--1矩阵s用来表示经过的各城市之间的路线。设‘0若不从城市i到城市js..=<[1若从城市i到城市j则该TSP问题转化为如下线性模型:sdijij工s=2j1sdijij工s=2j1£1sij工s=2jij>i-0或1s+iki-2,3,,nLINGO程序如下:!TSPquesion;MODEL:SETS:city/1..10/;link(city,city)|&1#GT#&2:d,s;ENDSETSDATA:d=73105899146141097125211081313148975231117272320252118181712161913181216;ENDDATAMIN=@SUM(link:d*s);@SUM(city(j)|j#GT#1:S(j,1))=2;!与第1个城市相连的有两个城市;!与第i个城市相连有两个城市;@FOR(city(i)|i#GT#1:@SUM(city(j)|j#GT#i:s(j,i))+@SUM(city(k)|k#LT#i:s(i,k))=2);@FOR(link:@BIN(s));得到的结果如下:S(3,2)=1,S(4,1)=1,S(4,3)=1,S(6,5)=1,S(7,2)=1,S(7,5)=1,S(8,6)=1,S(9,1)=1,S(10,8)=1,S(10,9)=1其它全为0。其最短路线为1—4—3—2—7—5—6—8—10—9—1,最短距离为77公里。10.某公司有资金4万元,可向A,B,C三个项目投资。已知各项目不同投资额的相应效益如下表。问如何分配资金可使总效益最大。项目投资额(万元)01234A041486066B042506066C064687876模型分析与建立:设项目有m个'每个项目有n种投资方式。第i个项目的第j种投资方式效益为Cj万元。则投资可有效益矩阵为C来表示。每个项目的投资方式的资金分配用向量A来表示。本mxn题A=(0,1,2,3,4)。设s..=!0jI第i个项目不采用第j种投资方式第.个项目采用第j种投资方式则可建立如下模型:mnmaxZ=乙乙SCijiji=1j=1mn乙乙SA=4ijji=1j=1n乙S<1ijj=1S=0或1ijLINGO程序如下:MODEL:SETS:item/1..3/;kind/1..5/:A;link(item,kind):S,C;ENDSETSDATA:A=0,1,2,3,4;!投资钱的情况;C=0,41,48,60,66,0,42,50,60,66,0,64,68,78,76;!投资矩阵;ENDDATAMAX=@SUM(link:S*C);@SUM(item(i):@SUM(kind(j):S(i,j)*A(j)))=4;!总共投资的钱为4万元;@FOR(item(i):@SUM(kind(j):S(i,j))<=1);!每个项目最多投资一次;@FOR(LINK:@BIN(S));!限制S(i,j)只能取0,1;END结果如下:S(1,2)=1,S(2,3)=1,S(3,2)=1。即项目A投资1万元,项目B投资2万元,项目C投资1万元。总收益最大为Z=41+50+64=155万元。

11.疏散问题甲市一家大公司由5个部门(A、B、C、D、E)组成。现要将它的几个部门迁出甲市,迁至乙市或丙市。除去因政府鼓励这样做以外,还有用房便宜,招工方便等好处。对这些好处已作出数量估价,所值每年万元数如下表:部门迁市ABCDE乙101510205丙1020151515然而,疏散之后各部门间的通讯费用将增加。部门间每年通讯量如下表:部门BCDEA0100015000B140012000C02000D700不同城市之间单位通讯量的费用如下表(单位:元)市甲乙丙甲10013090乙50140丙50试求各部门应该置于何市,使年费用最少?初、八「0第i个部门不迁往第j个城市解:设X..=\ij[1第i个部门迁往第j个城市其中各部门依次为A、B、C、D、E,各城市依次为甲、乙丙。TOC\o"1-5"\h\z令A..代表第i个部门迁往第j个城市的新增价值(元),T代表第i个部门与第j个部ijij门的通讯量,C代表第i个城市与第j个城市的单位通讯量的费用ij_0100000100000—_00100015000015000020000000140012000则A=0100000150000,T=000020000200000150000000070005000015000000000TOC\o"1-5"\h\z10013090C=130501409014050则可建立如下模型:iji=1jiji=1j=i+1乙厶XXC—iljmlml=1m=1丿i=1j=1AXijijs.tC=0或1lmLingo程序如下:MODEL:SETS:part/1..5/;city/1..3/;part_city(part,city):x,a;part_part(part,part):t;city_city(city,city):c;ENDSETSDATA:a=0,100000,100000,0,150000,200000,0,100000,150000,0,200000,150000,0,50000,150000;t=0,0,1000,1500,0,0,0,1400,1200,0,0,0,0,0,2000,0,0,0,0,700,0,0,0,0,0;c=100,130,90,130,50,140,90,140,50;ENDDATAMIN=@SUM(part_part(i,j)|i#LE#4#AND#j#GE#(i+1):t(i,j)*@SUM(city_city(l,m):x(i,l)*x(j,m)*c(l,m)))-@SUM(part_city:a*x);@FOR(part(i):@SUM(city(j):x(i,j))=1);!每个部门只能迁往一个城市@FOR(part_city(i,j):@BIN(x(i,j)));END所求解为:x(1,3)=1,x(2,3)=1,x(3,3)=x,x(4,3)=1,x(5,3)=1,其它为0,即各部门迁往丙市最少费用为-360000元。即这样迁市获利最多,为360000元。12.曲线拟合问题已知一个量y依赖于

温馨提示

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

评论

0/150

提交评论