算法-第05与网络_第1页
算法-第05与网络_第2页
算法-第05与网络_第3页
算法-第05与网络_第4页
算法-第05与网络_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第五章§1图论于18世纪。第一篇图论是数学家欧拉于1736年的“哥尼1哥尼斯堡七桥问图与网络是运筹学(OperationsResearch)中的一个经典和重要的分支,所研究的我们首先通过一些例子来了解网络优化问题。1最短路问题(SPP-shortestpathproblem)2例 例 梅谷教授1960年首先,所以国际上称之为中国邮递员问题。例 例 种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(opn)问为网络(network。与图和网络相关的最优化问题就是网络最优化或称网络优化(netwokoptimization)问题。所以上面例子中介绍的问题都是网络优化问题。由于多络流(networkflows)或网络流规划等。§2一个无向图(undirectedgraph)G是由一个非空有限集合V(G和V(G中某些元素的无序对集合E(G)构成的二元组,记为GV(GE(G))。其中V(G){v1v2L,vn}称为图G的顶点集(vertexset)或节点集(nodeset,V(G中vi(i1,2,Ln称为该图的一个顶点(vertex)或节点(node);E(Ge1e2Lem称为图G的边集(edgesetE(G中的每一个元素ek(即V(G)vivj的无序对ekvivjekvivjv被称为该图的一条从vi到vj的边(edge

(k1,2,L,m)当边ekvivj时,称vivj为边ek的端点,并称vj与vi相邻(adjacent;边ek称(incident图G中相邻。network一个图称为有限图,如果它的顶点集和边集都有限。图G的顶点数用符号|V|(G表示,边数用|E|或(G当的图只有一个时,总是用G来表示这个图。从而在图论符号中我们常略去字母G,例如,分别用VE,和代替V(GE(G),(G)和(G。端点重合为一点的边称为环(loop)一个图称为简单图 graph),如果它既没有环也没有两条边连接同一对顶点定义一个有向图(directedgraphdigraph)G是由一个非空有限集合V和V中A构成的二元组,记为GVA。其中Vv1v2Lvn称为图G的顶点集或节点集,Vvi(i1,2,L,n)称为该图的一个顶点set,某两个元素vivj的有序对)记为akvivj或akvivj(k1,2,Ln,被称为该图的一条从vi到vj的弧(arc当弧akvivj时,称vi为ak的尾(tailvj为ak的头(head,并称弧ak为vi的出弧(outgoingarc,为vj的入弧(ingarc。样的有向图称为G的一个定向图。的完全图记为Kn。若V(GXUYXIY,|X||Y|0(这里|X|表示X中的元素个数XY中亦然,则称G为二分图(bipartitegraph)H叫做图G的子图(subgraph),记作HGV(HV(G)E(HE(GH是G的子图,则GH的母图G的支撑子图(spanningsubgraph,又成生成子图)是指满足V(HV(G的子图H。设vV(G,G中与v关联的边数(每个环算作两条边)称为v的度(degree),记作d(v)。若d(v)是奇数,称v是奇顶点(oddpoint)d(v)是偶数,称v是偶顶点(evend(v)表示法、邻接表表示法和星形表示法。在下面数据结构的中,我们首先假设G(V,A是一个简单有向图,|V|n,|A|m,并假设V中的顶点用自然数1,2,Ln表示或,A中的弧用自然数1,2,L,m表示或。对于有多重边或无向网络的情况,GVAC是一个nn的01C(cij)nn{0,1}nncij

(i,j)(i,j)2例 00

00同样,对于网络中的权,也可以用类似邻接矩阵的nn矩阵表示。只是此时一条B(bik)nm{1,0,1}nm

jV,k(i,j)jV,k(j,i)1;如果一个节点是一条弧的终点,则关联矩阵中对应的元素为1;如果一个节点与一条弧不关联,则关联矩阵中对应的元素为0。对于简单图,关联矩阵每列只含有两个非零元(一个1,一个1。可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有nm个元素中,只有2m个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的空间。但由于87所示的图,如果关联矩阵中每列对应弧的顺序为(3,2),(4,3),(4,5),(5,3)和(5,4),则关联矩00

0010010000001000010001100000101弧表表示法将图以弧表(arclist)的形式在计算机中。所谓图的弧表,也就是图的弧集合中的所有有序对。弧表表示法直接列出所有弧的起点和终点,共需2m个存应地用额外的单元表示。例如,例7所示的图,假设弧(1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4)8,9,6,4,0,3,6711123445523423534权89640367邻接表表示法将图以邻接表(adjacencylists)的形式在计算机中。所谓图的组表示。例如,例7所示的图,邻接表表示为1个数据域表示弧的另一个端点(弧的头(1,3)9对于有向图G(V,A,一般用A(i)表示节点i的邻接表,即节点i的所有出弧构也就是说,在该数组中首先存放从节点1出发的所有弧,然后接着存放从节点2出发的所有孤,依此类推,最后存放从节点n出发的所有孤。对每条弧,要依次存放其起点、(forwardstar)(1,2(l,3(2,4(3,2(4,3(4,5,(5,3)和(5,4)8,9,6,4,0,3,67。此时该网络图可以用前向星形表示法表示为表2和表3。表2节点对应的出弧的起始地址数节点号123456 弧56781123445523423534权89640367[point(i),point(i1)point(i)point(i1),则节点i后有序存放,并增加一个数组(point)记录每个节点出发的弧的起始。有入弧。为了能够快速检索每个节点的所有入孤,可以采用反向星形(reversestar)表后存放进入节点n的所有孤。对每条弧,仍然依次存放其起点、终点、权的数值等有关个节点的入孤的起始地址(即弧的。例如,例7所示的图,可以用反向星形表示法表示为表4和表5。表4节点对应的入弧的起始地址数节点号1234561 弧6782233344531权763当于一种紧凑的双向星形表示法,如表6所示。6两种表示法中的弧的对应关 12345678 trace(41257836①星形表示法和邻接表表示法在实际算法实现中都是经常采用的。星形表示法的优点是占用的空间较少,并且对那些不提供指针类型的语言(如FORTRAN语言量较大(需要花费O(m的计算时间。有关“计算时间”的观念是网络优化中需要(即多重弧)时,显然此时邻接矩阵表示0和1,而不含有1,因为此时不区分边的起点和终点。又如,在邻接表和星形表示Wv0e1v1e2Lekvk,其中eiE(G,1ik,vjV(G,0jk,eivi1vi关联,称W是图G的一条道路(walk),k为路长,顶点v0和vk分别称为W的起点和终点,而v1,v2,L,vk1称为它的顶点。若道路W的边互不相同,则W称为迹(trail)。若道路W的顶点互不相同,则W称若图G的两个顶点uv间存在道路,则称u和v连通(connected)。uv间的最短轨的长叫做uv间的距离。记作d(uv。若图G的任二顶点均连通,则称G2;图C是一个圈的充要条件是C2G的子图的权是指子图的各边的权和。问题就是求赋权图G中指定的两个顶点u0v0间的具最小权的轨。这条轨叫做u0v0间的最短路,它的权叫做u0v0间的距离,亦记作d(u0,v0)。求最短路已有成算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距u0从近到远为顺序,依次求得u0到G的各顶点的最短路和距离,直至v0(或直至G令l(u00,对vu0,令l(v)S0u0i0对每个vSi(SiVSimin{l(v),l(u)代替l(v)。计算min{l(v)},把达到这个最小值的一个顶点记为ui1,令Si1SiU{ui1}(iii).若i|V|1,停止;若i|V|1,用i1代替i,转(ii)算法结束时,从u0v的距v的最后一次的标号l(v)给出。在vSi之前的标号l(v)TvSi时的标号l(v)P标号。算法就是不断修改各顶TPP标号所由来的边在图上标明,则算法结束时,u0至各项点的最短路也在图上标示出来了。9某公司在六个城市c1c2L,c6中有,从ci到cj的直接航程票价记在

0用矩阵ann(n为顶点个数存放各边权的邻接矩阵,行向量pbindex1index2dP标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分0pb(i)0

;index2i)存放始点到第i点最短通路中第id(i)存放由始点到第iwhilesum(pb)<length(a)tb=find(pb==0);d,index1,ww(vivj vivj 其决策变量为xij,当xij1,说明弧vivj位于顶点1至顶点n的;否则xij0。其n

n

is.t.xijxji i E

i1,viv

v xij0或10在图3中,用点表示城市,现A,B1B2C1C2C3D7个城市。点与到城市D铺设一条天然气管道,请设计出最小价格管道铺设方案。37个城市间的连线roads(cities,cities)/AB1,AB2,B1C1,B1C2,B1C3,B2C1,B2C2,B2C3,C1D,C2D,C3D/:w,x;w=2433123113@for(cities(i)|i#ne#1#and#i#ne#n:11(无向图的最短路问题)求图4中v1到v11的最分析例10处理的问题属于有向图的最短路问题,本例是处理无向图的最短路问写LINGO程序。4无向图的最短@for(roads(i,j):w(i,j)=@if(w(i,j)#eq#0,1000,w(i,j)));n=@size(cities);!城市的个数;@for(cities(i)|i#ne#1#andi#ne#!从顶点1离开后,再不能回到该顶点。复执行n1次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法的时间复杂度为O(n3)。第二种解决这一问题的方法是由FloydRW算法,称之为Floyd算法。 a1n aA0

2n M an

annaii0aijaij

i1,2,L,n,wij是i,ji,j1,2,LnFloyd算法的基本思想是:递推产生一个矩阵序列A0A1L,Ak,L,An,其中Ak(i,j)vivjk的最短路径长ki,jk1,2,Ln。最后,当knAn即是各顶点之间的最短通路值。例12用Floyd算法求解例9。矩阵path用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd程序如n=6;a=zeros(n);a(4,5)=10;a(4,6)=25;a(5,6)=55;a=a+a'M=max(max(a))*n^2M为充分大的正实数fork=1:nfori=1:nifa,我们使用LINGO9.0编写的FLOYD th;!path标志最短路径上走过的顶点;@format(w(i,j),'10.0f')),@newline(1)); 连通的无圈图叫做树,记之为T。若图G满足V(G)V(TE(T)E(G则称T是G的生成树。图G连通的充分必要条件为G有生成树。通图的生成树的个数很多,用(G)表示G的生成树的个数,则有公式公式(Caylay)

)nn2公式(G(Ge(Ge其中Ge表示从G上删除边eGe表示把e的长度收缩为零得到的图。定理 (i)G是树当且仅当G中任二顶点之间有且仅有一条轨道G是树当且仅当G无圈,且1G是树当且仅当G连通,且1G是树当且仅当G连通,且eE(GGeG是树当且仅当GeE(GGen个城市的铁路,已知ij城之间的铁路造价为Cij,设计一个线prim算法构造最小生成树P和Q,P用于存放G的最小生成树中的顶点,集合Q存放的最小生成树令集P的初值P{v1}(假设构造最小生成树v1出发,集合Q的初值为Q。primpPvVP的边中,选取具有最pv,将v加入P中,将pv加入集合Q中,如PV时,最小生成树构造完毕,这时集合Q中包含了最小生成树(i)P{v1},Q(ii)whileP~pvpPvVPPQQ5最小生成树问a=zeros(7);a(1,2)=50;a(2,4)=65; Kruskal算法构造最小生成树科茹斯克尔(Kruskal)算法是一个好算法。Kruskal算法如下:(i)选e1E(G)w(e1min。若e1e2Lei已选好,则从E(G){e1e2Lei中选取ei1,使①G[{e1e2Leiei1中无②w(ei1min直到e1号中较大序号u改记为此边的另一序号v,同时把后面边中所有序号为u的改记为v。此方法的几何意义是:将序号u的这个顶点收缩到v顶点,u顶点不复存在。后面继续程序如下:a(3,4)=52;a(3,7)=45;a(4,5)=50;a(4,6)=30;a(4,7)=42;a(5,6)=70;whilelength(result)<loopifindex(1,flag)~=index(2,flag) 定义ME(G,eiejMei与ej无公共端点(ij)MG中的一个对集;MM中相配;M中的端点称为M许配;GM许配时,M称为完美对集;G中已无使|M'||M称此轨为M的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。MM内的边从对集中删除,则被许配的顶点数增加2,对集中的“对儿”增加一个。定理 M是图G中的最大对集当且仅当G中无M可增广轨定理 G为二分图,X与Y是顶点集的划分,G中存在把X中顶点皆许配SX,则|N(S||S|N(SS中顶点的邻集。1:若G是k次(k0)2分图,则G所谓k次正则图,即每顶点皆k度的图。定理 每个姑娘都结识k(k1)位小伙子,每个小伙子都结识k位姑娘,则每分派问题:x1x2L,xn去做ny1,y2L,yn,每人适合做其这个问题的数学模型是:G是二分图,顶点集划分为V(GXUYX{x1Lxn},Y{y1L,yn},当且仅当xi适合做工作yj时xiyjE(G解决这个问题可以利用1965年埃德门兹(Edmonds)匈牙利算法。从GM许配的一顶点uSu}TN(STyN(STyM许配的yzMSSU{zTTU{y},转(iii;P(u,yM(ME(PU(E(P)M,转(ii。这个问题的数学模型是:在分派问题的模型中,图G的每边加了 定义若l:V(G)R,满足xX,yYlxlywxy,则称l是二分图G的可行顶点标Elxy|xyE(Glxlywxy)},El为边集的G的生成子图为相等子图,记作Gl。l(x)maxw(l(y)

xXyY定理 Gl的完美对集即为G的权最大的完美对集Kuhn-Munkres算法选定初始可行顶点标号l,确定Gl,在GlMM许配的顶点uSu},T。 若 (iv; (S)T lmin{l(x)l(y)w(xS,l(v)l(v)l,vT 其llGlGlG (S)T中一顶点y若y已被M许配且yzM则SSU{z}GliiiM(ME(P))U(E(P)M)(iilNG(S是GlSl 定义经过G的每条边的迹叫做GEulerEulerEuler直观地讲,Euler图就是从一顶点出发每边恰通过一次能回到出发点的那种图,即定理 (i)G是Euler图的充分必要条件是G连通且每顶点皆偶次d(ii)G是Euler图的充分必要条件是G连通且Gi

Ci是圈,E(CiIE(Cj(ijGEuler迹的充要条件是G定义包含GHamilton(哈密顿)Hamilton直观地讲,Hamilton图就是从一顶点出发每顶点恰通过一次能回到出发点的那种Fleury1o.v0V(G,令W0v02o.假设迹WvevLevE{e,Le 01 i 边ei1ei1和vi相关联(ii)除非没有别的边可选择,否则ei1不是GiG{e1Lei}的割边(cutedge)。 设G是连通赋权图。(i)求V0v|vV(Gd(v1(mod2)}对每对顶点uvV0,求d(uv)(d(uv是u与vFloyd算法构造完全赋权图K|V0|,以V0为顶点集,以d(uv)为边uv的权00M中边的端点之间的在G在(vi)中得的图GEuler回路即为中国邮递员问题的解。kPP的数学模型如下:G(VEv0V(G,求G的回路C1L,Ck(i)v0V(Ci),i1,2,L,kmaxw(e)mini1ikeE(CikUE(Ci)i旅行商(TSP)问Hamilton圈C,然后适当修改C以得到具有较小权的另一个Hamilton圈。修改的方法叫做改良圈算法。设初始圈Cv1v2Lvnv1。对于1i1jnHamilton圈Cijv1v2Lvivjvj1vj2Lvi1vj1vj2Lvnv1它是由C中删去边vivi1vjvj1,添加边vivjvi1vj1而得到的。若w(vivj)w(vi1vj1w(vivi1w(vjvj1,则以Cij代替C,Cij叫做C的改iKruskal算法加以说明。假设C是G中的最优圈。则对于vCv是在GvHamilton轨,因而也是Gv的生成树。由此推知:若TGv中的最优树,同时e和f是和v关联的两条边,并使得w(ew(fw(Tw(ew(fw(C的一个上界。间的航线距离如表7。7六城市间的距LMNTLMNTfunctionmainglobalaa(3,4)=36;a(3,5)=68;a(3,6)=68;a(5,6)=13;a=a+a';L=size(a,1);c1=[51:46];c2=[561:4];%改变初始圈,该算法的最后一个顶点不动iflong2<long%修改圈function[circle,long]=modifycircle(c1,L);globalawhileifc1(m+1:n)=c1(n:-fori=1:L-1设城市的个数为ndij是两个城市ijxij01(1表示走过城市i到城市j的路,0表示没有选择走这条路。则有mindijin xij1i1,2,Ln每个点只有一条边出去nxij1j1,2,Ln(每个点只有一条边进去xij|s|1,2|s|n1,s{1,2,L,i,xij{0,1}i,j1,2,Lnij。其中|s|表示集合s中元素个数。例16已知SV地区各城镇之间距离见表8,某公司计划在SV地区做宣传,从城市1出发,经过各个城镇,再回到城市1。为节约开支,公司希望走过这10个城镇的总距离最少。8城镇之间的距 58678689解编写LINGOCITY/1..10/:U;!U(I)=sequenceno.ofcity;LINK(CITY,CITY):DIST,!ThedistanceX;!X(I,J)=1ifweuselinkI, !Distancematrix,itneednotbesymmetric;DIST=0 !Themodel:Ref.Desrochers&Laporte,ORLetters,Feb.91;N=@SIZE(MIN=@SUM(LINK:DIST*X);@FOR(CITY(K):!Itmustbe@SUM(CITY(I)|I#NE#K:X(I,K))=!Itmustbe@SUM(CITY(J)|J#NE#K:X(K,J))=!Weakformofthesubtourbreaking!Thesearenotverypowerfulforlargeproblems;@FOR(CITY(J)|J#GT#1#AND#J#NE#K:U(J)>=U(K)+X(K,J)(N-2)*(1-X(K,J))(N-3)*X(J,!MaketheX's0/1;@FOR(LINK:@BIN(X));!Fortheandlaststopwe@FOR(CITY(K)|K#GT#U(K)<=N-1-(N-2)*X(1,U(K)>=1+(N-2)*X(K,1)); 定义在以VA为弧集的有向图GVA(i)LAR为孤上的权函数,弧(i,jAL(i,jlij(i,j的容量下界(lowerbound;(ii)U:AR为弧上的权函数,弧(i,jA对应的权U(i,j记为uij(i,j)的容量上界,或直接称为容量(capacity;(iii)DVR为顶点上的权函数,节点iVD(idi,称为顶点i的供需量(supply/demand;NVAL,UD由于我们只V,A为有限集合的情况,所以对于弧上的权函数L,U和顶点上的权函数D,可以直接用所有孤上对应的权和顶点上的权组成的有限维向量表示,因此在流网络中,弧(i,j)的容量下界lij和容量上界uij表示的物理意义分别是:通过点发送到网络外部的“物质”数量(di0时。下面我们给出严格定义。定义NVAL,UD,其上的一个流(flow)fNAR的一个函数,即对每条弧(i,j)fij(称为弧(i,j的流量果流ffijj:(i,j

fjidij:(j,i

lijfijuij (i,j)A flownetwork可见,当di0时,表示有di个单位的流量从网络外部流入该顶点,因此顶点i称(source时,表示有|di|个单位的流量从该顶点流失到网络外部(或说被该顶点吸收点i称为需求点(demandnode)或汇(sink,有时也形象地称为终止点或收点等;当di0时,顶点i称为转运点(transshipmentnode)或平衡点、中间点等。此外,根据di

L0(即所有孤(i,jlij0),并将L0时的流网络简记为N(V,A,UD。此时,相应的容量约束(2)为0fijuij (i,jA定义NVA,UDffij (i,j)Af为零流,否则为非零流。如果某条弧(i,j)上的流量等于其容量(fijuij称该弧为饱和弧(saturatedarc);如果某条弧(ij上的流量小于其容量(fijuij,arc。而其它节点为转运点。如果网络中存在可行流f,此时称流f的流量(或流值,flowvalue)为ds(根据(3),它自然也等于dt,通常记为v或v(f),即vvfdsdt般记为Nst,VA,U)。最大流问题(umflowproblem)就是在N(s,t,V,A,U)中找到流值最大的可行流(即最大流。会看到,最大流问题maxs.t.fijf

ii j:(i,j j:(j,i is,0fijuij (i,j)A 定义A的任何子方阵的行列式的值都等于0,1或1A是全幺模的(totallyunimodularTU,又译为全单位模的),或称A是全幺模矩阵。实际问题往往是多源多汇网络,为了计算的规格化,可将多源多汇网络G化成单源单汇网络G'。设X是GY是G的汇,具体转化方法如下:在原图Gxy,令为新图G中之单源和单汇,则G中所有顶点V成为G'之中间顶点集。 的弧把x连接到X中的每个顶点 的弧把Y中的每个顶点连接到yG和Gf是Gff'(a)ff

若a(x,v)若av所定义的函数fGvfvf的流,这里f(vv的流量,f(v表示流入v的流量(在G中G中的流在G的弧集上的限制就是G中Nst,VA,USVsStVS,则称(SSSVS(SSSSC(S,S)为割(SS

(i,j)AiS,

定理 f是最大流,(S,S)是容量最小的割的充要条件vf)C(SSN(st,VA,U中,对于轨(sv2Lvn1t(此轨为无向的vivi1A,则称它为前向弧;若vi1viA,则称它为后向弧Ns到tP上,若对所有的前向弧(ijfijuij,对所有的后向弧(i,j)恒有fij0Ps到t的关于f的可增广轨。令uijfij 当(i,j fij

当(i,j)且保持为正,也不影响其它弧的流量。总之,网络中f可增广轨的存在是有意义的,因为这意味着f不是最大流。标号法是由Ford和Fulkerson在1957年。用标号法寻求网络中最大流的基给发点标号为(s,)①若(xyAfxyuxy时,令ymin{uxyfxy,xy标号为(xyxfyuxyy②yxAf

0,令

min{fyx,xy标号为(xy不断地重复步骤(ii)直到收点t被标号,或不再有顶点可以标号为止。当t(Bs到t的可增广轨,算法结束,令ut若u的标号为(vtfvufvut;若u的标号为(vtfuvfuvt若us,把全部标号去掉,并回到标号过程(A。否则,令uv,并回到增流过程(ii。(pred(j),可以增广的最大流量maxf(j)。 1 若maxft0 jV的标号,即令maxfj)0))STEP3LIST且maxft0,继续下一步;否则:(3a)如果t已经有标号(即maxf(t)0,则找到了一条增广路,沿该增广路对x进行增广(增广的流量为maxf(t),增广路可以根据pred回溯方便地得到STEP1。(3b)如果t没有标号(LIST=且maxft0对非饱和前向弧(i,j),若节点j没有标号(即pred(j)0,对j进行标号,即令maxfjmin{maxf(i),uijxij}pred(j)i,并将j加入LIST中。)maxf(j)min{maxf(i),xij},pred(j)i例17 用Ford-Fulkerson算法计算如图6网络中的最大流每条弧上的两个数字分6最大流问解编写程序如下:whilemaxf(n)>0while(~isempty(list))&(maxf(n)==0)ifwhilev2~=1if例18s的石油通过管道运送到城市t,中间有4个中转站v1v2和v4,城市与中转站的连接以及管道的容量如图7所示,求从城市s到城市t的最图7最大流问arcs(nodes,nodes)/s1,s3,12,13,23,2t,34,42,4t/:c,f;c=87952596n=@size(nodes)顶点的个数;@for(nodes(i)|i#ne#1#and#i#ne#n:@sum(arcs(i,j)|i#eq#1:f(i,j))=flow;@sum(arcs(i,j)|j#eq#n:f(i,j))=flow;n=@size(nodes)顶点的个数;@for(nodes(i)|i#ne#1#and#i#ne#n:的费用问题,在许多实际问题中,费用的因素很重要。例如,在问题中,人们总是希望在完成任务的同时,寻求一个使总的费用最小的方案。这就是下面要在网络N(s,t,V,A,U)中,设cij是定义在A上的非负函数,它表示通过弧(i,j)单位流的费用。所谓最小费用流问题就是从发点到收点怎样以最小费用输送一已知量为v(f)的总流量。mincij(i,j fijj:(i,j

fjidij:(j0fijuij (i,j)Av(f i其中divf),i is,显然,如果vf最大流vfmaxvfvfmax(8最小费用最大流问arcs(nodes,nodes)/s1,s3,12,13,23,2t,34,42,4t/:c,u,f;d=14000014;!最大流为c=28251634u=87952596d=140000-14;c=0;u=0;在1961年。其主要步骤如下求出从发点到收点的最小费用通路(s,t)对该通路(s,t)f min(i,j)(s,t并让通的所有边的容量相应减少f。这时,对于通的饱和边,其单位流费用相应改为。(s,t上所有边(i,j的反向边(j,iujif,cji部流量等于v(f)为止(或者再也找不到从s到t的最小费用道路。求最短路的函数floydpath。globalMnumglobalMnumfork=1:numfori=1:numforif

ifw(1,num)==M

while~isempty(m)if

%最小费用最大流函数function%第一个参数:容量矩阵;第二个参数:费%前两个参数必须在不通%第三个参数:指定容量值(可以不写,表示求最小费用最大流%返回值flow为可行流矩阵,val为最小费用值globalMifnargin<3whileallflow<flowvaluepath=floydpath(w);%调用floydpath函数ifisempty(path) ,(criticalpathmethodCPM)是网络分析的重要组成部分,它广泛地用于系统分析和项杜邦公司为了协调企业不同业务部门的系统规划,提出了关键路。1958年,PERTCPM既有着相同的目标应用,又有很多相同的术语,这两种方法已合并为法,在国外称为PERT/CPM,在国内称为统筹方法(schedulingmethod。例20 某项目工程由11项作业组成(分别用代号A,B,L,J,K表示其计划完成时间及作业间相互关系如表9所示,求完成该项目的最短时间。9作业流程数A5—B,B,B,EF,GB—C—D4BE4AFC,示事件,A,B表示作业。由这种方法画出的网络图称为计划网络图。9计划网络图的基本画事件j的最早时间用tE(j)表示,它表明以它为始点的各工作最早可能开始的时设事件为1,2,L,n,tE(1)t(j)max{t(i)t(i, t 其中tE(ijt(ij是作业(i,j所需的工时。tE(n)总最早完工 事件i的最迟时间用tL(i)表示,它表明在不影响任务总工期条件下,以它为始点tL(n)总工期(或tEt(i)min{t(j)t(i, 其中tLj是与事件i一个工作(i,j的最早可能开工时间用tES(i,j有紧前工作全部完工后才能开始。工作(ij的最早可能完工时间用tEF(ij表示。它

(1,j)tES(i,j)max{tES(k,i)t(k, tEF(i,j)tES(i,j)t(i,这组公式也是递推公式。即所有从总开工事件出发的工作(1,j,其最早可能开工时间为零;任一工作(ij的最早开工时间要由它的所有紧前工作(ki的最早开工时间决定;工作(i,j)的最早完工时间显然等于其最早开工时间与工时之和。一个工作(i,j的最迟开工时间用tLS(i,j表示。它表示工作(i,j在不影响整个任工作(ij的最迟必须完工时间用tLF(i,j表示。它表示工作(ij

(in)总完工期(或tEF(itLS(i,j)min{tLS(j,k)t(i, tLF(i,j)tLS(i,j)t(i,总完工事件n的工作(in,其最迟完工时间必须等于预定总工期或等于这个工作的最早可能完工时间。任一工作(i,j的最迟必须开工时间由它的所有紧后工作(jk)的最迟开工时间确定。而工作(i,j的最迟完工时间显然等于本工作的最迟开工时间与工时,最早可能开工时间tES(i,j)就等于事件i的最早时间tE(i。工作(i,j)的最迟必须完工时间等于事件j的最迟时间。在不影响任务总工期的条件下,某工作(ij可以延迟其开工时间的最大幅度,叫做该工作的总时差,用R(i,j)表示。其计算公式为:R(i,j)tLF(i,j)tEF(i, 即工作(ijR(ij也等于开工时间的最大幅度,用r(i,j)表示。其计算公式为:r(i,j)tES(j,k)tEF(i,

1020的计划xnx1。设tij是作业(i,j的计划时间,因此,对于事件i与事件j有不等式xjximinxn xjxitij,(i,j)A,i,jVxi0,iV用LINGO求解例20。解编写LINGOoperate(events,events)/12,13,14,25,34,35,46,557,58,67,68,7t=5101144 10天;等等。每个作业只要按规定的时间开工,整个项目的最短工期为51天。sijsijxjxitij,(i,jA,这样就可以得到作业的最迟yi表示事件i的最迟开工时间。当最早开工时间与最迟开工时间相同时,operate(events,events)/12,13,14,25,34,35,46,557,58,67,68,7t=5101144 m=5 34 c=07004004500006003005000500400;sijsij0时,说明还有剩余时间,对sijs781,作业(7,8)(J)的开工时间可以推迟1,6((1,4((4,6(所以,作业(1,4(C)5天。1210作业数作业(i,作业(i,5HI4J4KF11带有关键路线的计划网络n

tij(i,jn

i xijxji i(i,j

(j

xij01(i,j例 operate(events,events)/12,13,14,25,34,35,46,557,58,67,68,7t=5101144 d=1000000-23(关键路线与计划网络的优化)20中所列的工程要求在49天内完成。20中可缩短工期的所有作业和缩短一天工期额外增加的费用。现在的问题11工程作业数作 计划完(i,j)时间(天最短完作 (i,j)最短完8H8I43JKxi是事件itij是作业(ijmij是完成作业(ij的最yij是作业(ijcij是作业(i,j缩短一天增加的费用,因此xjxitijyij且0yijtij总目标是使额外增加的费用最小,即目标函数为mincij(i,j xjxiyijtij,(i,j)A,i,jVxnx1d0yijtijmij,(i,j)A,i,j

(i,joperate(events,events)/12,13,14,25,34,35,46,557,58,67,68,7t=5101144 m=58834 c=07004004500006003005000500400;作业(1,3)(B)压缩1天的工期,作业(6,8)(K)1天工期,这样可以在49例24(续例23)用LINGO求解例23,并求出相应的关键路径、各作业的xizi表示事件写出相应的LINGO程序如下:operate(events,events)/12,13,14,25,34,35,46,557,58,67,68,7t=5101144 m=58834 c=07004004500006003005000500400;12作业数作业(i,作业(i,59HI4J4KF12优化后的关键路线估计值:最乐观值的估计值(a,最悲观的估计值(b)和最可能的估计值(m设tij是完成作业(i,j)的实际时间(是一随量通常用下面的方法计算相应

)aij4mij6(bijaij)

var(tij)

设TT (i,j)TE(T) E(tij (i,j)S2var(T) (ij)关键路

var(tij dTP{Td} 1@psn(x)是LINGO提供的标准正态分布函数,1

x@psn(x)(x)x

et2/2 25205213作业数(i,(i,ambamb35789H8I246J345KF8operate(events,events)/12,13,14,25,34,35,46,557,58,67,68,78/:a,m,b,et,dt,x;a=388208;m=59d=100404000-3252025 后可以生产这种主管道的钢厂有S1,S2,LS7。图中粗线表示铁路,单细线表示公表示火车站,每段铁路、公路和管道旁的数字表示里程(单位km)。一个钢厂如果承担制造这种,至少需要生产500个单位。钢厂Si在指定期限1单位的铁路运价见表15。i1234567 里程里程请制定一个主管道的订购和计划,使总费用最小(给出总费用)络,请就这种更一般的情形给出一种解决办法,并对图15按(1)的要求给出模型和结果。

记第i个钢厂的最大供应量为si,从第i个钢厂到铺设节点j的订购和费用为cij;用lj表示管道第j段需要铺设的量。xij是从钢厂i运到节点j的量,yj是从节点j向左铺设的量,zj是从节点j向右铺设的量。SiAj的最小购运费cij中),费用(Si经铁路、公路至各点Aji1,2,L,7,j1,2,L,15AjAj1j1,2,L,14)的运费。用cij的计算构造铁路距离赋权图G1(VE1W1,其

(j1,2,L,15)V{S,L,S,A,L,A,B,L,B},各顶点的见图14;W(w1 ij,11

i,j

(d1表示i,j两点之间的铁路路的最小费用c1。其中,路径值无穷大时的费用也为无穷大。②计算公路任意两点间的最小构造公路距离赋权图G2VE2,W2,其中V同上,W2(w2

3939d2ijw2 (d2表示i,j两点之间的公i,j计算,计算出公路任意两点间的最小费用 费

ij。路径值为无穷大时的费 构造铁路公路的混合赋权完全图G(V,E,W),W(c~ ,其~minc1c2 16最小运费计算结

ij(j1,2,L,152任意两点间的最 费用加上出厂售价,得到单位从任一个(i1,2,L,7)到Aj(j1,2,L,15) 和运送最小费用cij运量约束:xij对izjyj;yj1zjAjAj1段的长度lj由Aj向AjAj1段铺设管道的总路程为1Ly由Aj向AjAj1段铺设管道的总路程为1Lz

yj(yj1)/2zj(zj1)27min7

0.1152

j(z

1)

yj(y

s.t.xij0U[500,si

i 7xijzjyj7yj1zjlxij0,zj0,yjy10,z15Lingo

jji1,2,L7,j

使用计算机求解上述数学规划时需要对约束条(20)进行处理我们引进

500fi xijsifi,i!nodes表示节点集合

!c1(i,j)表示节点i到j铁路的最小运价(万元),c2(i,j)表示节点i到j公路的费用邻接矩阵,c(i,j)表示节点ij的最小运价,path标志最短路径上走过的顶点;link(nodes,nodes):w,c1,c2,c,path1,path;need/A1..A15/:b,y,zy表示每一点往左铺的量,z表示往右铺的量;linkf(supply,need):cf,X;S=8008001000200020002000P=160155 path1=0;path=0;w=0; 以下是格式化输出计算的中间结果和最终结果@text(MiddleCost.txt)=@writefor(supply(i):@writefor(need(j):@format(cf(i,j),'6.1f')),@newline(1));@for(link(i,j):w(i,j)= w(i,j)+w(j,i));!输入铁路距离邻接矩阵的下三角元素;@for(link(i,j)|i#ne#j:w(i,j)=@if(w(i,j)#eq#0,20000,w(i,j))); !无铁路连接,元素为充分!以下就是最短路计算公式(Floyd-Warshall算法);@for(link|w#eq#0:C1=0);@for(link|w#gt#0#and#w#le#300:C1=20);@for(link|w#gt#300#and#w#le#350:C1=23);@for(link|w#gt#350#and#w#le#400:C1=26);@for(link|w#gt#400#and#w#le#450:C1=29);@for(link|w#gt#450#and#w#le#500:C1=32);@for(link|w#gt#500#and#w#le#600:C1=37);@for(link|w#gt#600#and#w#le#700:C1=44);@for(link|w#gt#700#and#w#le#800:C1=50);@for(link|w#gt#800#and#w#le#900:C1=55);@for(link|w#gt#900#and#w#le#1000:C1=60); !输入公路距离邻接矩阵的下三角元素));!@for(link(i,j)|i#ne#j:c2(i,j)=@if(c2(i,j)#eq#0,10000,c2(i,j))); @for(link:C=@if(C1#le#C2,C1,C2)); C1C2矩阵对应元素取最小;@for(link(i,j)|ile7and#j#ge#8and#j#le22:cf(i,j-7)=c(i,j提取下面二次规划模型需要的7×15矩阵;!约束@for(supply(i):[con2]@sum(need(j):x(i,j))>=@for(need(j):[con3]@sum(supply(i):x(i,j))=y(j)+z(j));@for(need(j)|j#NE#15:[con4]z(j)+y(j+1)=b(j));y(1)=0;z(15)=0;@for(need:@gin(y));7 mincijxij

(y2y

i1 j1

温馨提示

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

评论

0/150

提交评论