导航:首页 > 源码编译 > 网络流理论算法与应用pdf

网络流理论算法与应用pdf

发布时间:2023-08-08 09:13:49

‘壹’ 帮我解释下网络流

必须知识:最短路径问题
1.Dijkstra
适用于满足所有权系数大于等于0(lij≥0)的网络最短路问题,能求出起点v1到所有其他点vj的最短距离;
朴素的Dijkstra算法复杂度为O(N^2),堆实现的Dijkstra复杂度为O(NlogN).

2.bellman-ford
适用于有负权系数,但无负回路的有向或无向网络的最短路问题,能求出起点v1到所有其它点 vj的最短距离。bellman-ford算法复杂度为O(V*E)。

3.Floyed
适用于有负权系数,可以求出图上任意两点之间的最短路径。DP思想的算法,时间复杂度为O(N^3);
for ( k= 1; k<= n; k++)
for ( i= 1; i<= n; i++)
if (graph[i][k]!=INF)
for ( j= 1; j<= n; j++)
if (graph[k][j]!=INF && graph[i][k]+graph[k][j]< graph[i][j])
graph[i][j]= graph[i][k]+ graph[k][j];

NO.1 s-t最大流
两大类算法
1.增广路算法
Ford-Fulkerson算法: 残留网络中寻找增加路径
STEP0:置初始可行流。
STEP1:构造原网络的残量网络,在残量网络中找s-t有向路。如果没有,算法得到最大流结束。否则继续下一步。
STEP2:依据残量网络中的s-t有向路写出对应到原网络中的s-t增广路。对于增广路中的前向弧,置s(e)=u(e)- f(e)。对于反向弧,置s(e)=f(e) STEP3:计算crement=min{s(e1),s(e2),…,s(ek)}
STEP4:对于增广路中的前向弧,令f(e)=f(e)+crement;对于其中的反向弧,令f(e)=f(e)-crement,转STEP1。
关键点:寻找可增广路。决定了算法复杂度。
实现:Edmonds-Karp 通过采用了广度优先的搜索策略得以使其复杂度达到O(V*E^2)。

优化—> Dinic算法(*)
Dinic算法的思想是为了减少增广次数,建立一个辅助网络L,L与原网络G具有相同的节点数,但边上的容量有所不同,在L上进行增广,将增广后的流值回写到原网络上,再建立当前网络的辅助网络,如此反复,达到最大流。分层的目的是降低寻找增广路的代价。
算法的时间复杂度为O(V^2*E)。其中m为弧的数目,是多项式算法。邻接表表示图,空间复杂度为O(V+E)。

2.预流推进算法
一般性的push-relabel算法: 时间复杂度达到O(V^2*E)。(*)
relabel-to-front算法->改进
最高标号预流推进:时间复杂度O(V^2*sqrt(E))

NO2. 最小费用最大流
求解最小费用流的步骤和求最大流的步骤几乎完全一致,只是在步骤1时选一条非饱和路时,应选代价和最小的路,即最短路。
步骤1. 选定一条总的单位费用最小的路,即要给定最小费用的初始可行流,而不是包含边数最小的路。
步骤2. 不断重复求最大流的步骤来进行,直到没有饱和路存在为止。然后计算每个路的总费用。
和Edmonds-Karp标号算法几乎一样,因为这两种算法都使用宽度优先搜索来来寻找增广路径,所以复杂度也相同,都是O(V*E^2)。

连续最短路算法 + 线性规划对偶性优化的原始对偶算法(*)
传说中,没见过,据说复杂度是O(V^3)

NO3. 有上下届的最大流和最小流(通过添加点来进行转化)(*)

NO4. 相关图论算法
二分图最大匹配: 加s和t构造最大流
专用算法:hungary算法 O(M*N)

二分图最佳匹配: 加s和t构造最小费用最大流
专用算法:KM算法
朴素的实现方法,时间复杂度为O(n^4)
加上松弛函数O(n^3)

最小路径覆盖:
顶点数-二分图的最大匹配

s-t最小边割集:
最大流最小割定理:最小割等于最大流

普通最小边割集:
Stoer-Wagner Minimum Cut O(n^3)

二分图的最大独立集:
N - 二分图的最大匹配(POJ monthly)girls and boys
反证法证明
普通图的最大独立集是np问题。(*)

‘贰’ 高分:网络流问题

一、引言

网络流算法是一种高效实用的算法,相对于其它图论算法来说,它的模型更加复杂,编程复杂度也更高。但是它综合了图论中的其它一些算法(如最短路径、宽度搜索算法),因而适用范围也更广,经常能够很好地解决一些搜索与动态规划无法解决的非np问题。
网络流在具体问题中的应用,最具挑战性的部分是模型的构造,它没用现成的模式可以套用,需要我们对各种网络流的性质了如指掌(比如点有容量、容量有上下限、多重边等等),根据具体的问题发挥我们的创造性。一道问题经常可以建立多种模型,不同的模型对问题的解决效率的影响也是不同的,本文通过实例探讨如何确定适当的模型,提高网络流算法的效率。

二、网络流算法时间效率

当我们确定问题可以使用最大流算法求解后,就根据常用的ford-fulkerson标号法求解;而最小(大)费用最大流问题也可用类似标号法的对偶算法解题。ford-fulkerson标号法的运行时间为o(ve2),对偶法求最小费用流的运行时间大约为o(v3e2)。

显然,影响网络流算法的时间效率的因素主要是网络中顶点的数目与边的数目。这二个因素之间不是相互独立的,而是相互联系,矛盾而统一的。在构造网络模型中,有时,实现了某个因素的优化,另外一个因素也随之得到了优化;有时,实现某个因素的优化却要以增大另一因素为代价。因此,我们在具体问题的解决中,要坚持"全局观",实现二者的平衡。

三、模型的优化与选择

(一)减少模型的顶点数与边数,优化模型

如果能根据问题的一些特殊性质,减少网络模型中的顶点的数目和边的数目,则可以大大提高算法的效率。

例1:最少皇后控制

在国际象棋中,皇后能向八个方向攻击(如图1(a)所示,图中黑点格子为皇后的位置,标有k的格子为皇后可攻击到的格子)。现在给定一个m*n(n、m均不大于于50)的棋盘,棋盘上某些格子有障碍。每个皇后被放置在无障碍的格子中,它就控制了这个格子,除此,它可以从它能攻击到的最多8个格子中选一个格子来控制,如图1(b)所示,标号为1的格子被一个皇后所控制。

请你编一程序,计算出至少有多少个皇后才能完全控制整个棋盘。

图1(a) 图1(b)

输入格式:
输入文件的第一行有两个整数m和n,表示棋盘的行数与列数。接下来m行n列为一个字符矩阵,用''.''号表示空白的格子,''x''表示有障碍的格子。

输出格式:
输出文件的第一行仅有一个数s,表示需要皇后的数目。
sample input
3 4
x...
x.x.
.x..
sample ouput
5

问题分析]

如果本问题用简单的搜索来做,由于题目给的棋盘很大,搜索算法很难在短时间内出解。由于一个皇后在棋盘最多只能控制两个格子,因此最少需要的皇后数目的下界为[n*m/2]。要使得皇后数目最少,必定是尽量多的皇后控制两个格子。如果我们在每两个能相互攻击到的格子之间加上一条有向弧,则问题很类似于二分图的最大匹配问题。

[模型一]

1. 将每个非障碍的格子按行优先编号(0~m*n-1)。
2. 将上述的每个格子i折成两个格子i''和i'''',作为网络模型中的顶点。
3. 若格子i可以攻击到格子j且i<j,则在模型中顶点i''到j''''之间加上一条有向弧,容量为1。
4. 增加一个源点s,从s点向所有顶点i''添上一条弧;增加一个汇点t,从所有顶点j''''到t添上一条弧,容量均为1。

图1(b)所示的棋盘,对应的模型为:

图2

显然,任一解对应于以上模型的一个最大匹配。且最大匹配中,匹配数必定是偶数。因此至少需要的马匹数为m*n-障碍数-最大匹配数/2。

[模型二]

如果我们将棋盘涂成黑白相间的格子,则某皇后控制的两个格子一定是一个是黑格,另一个是白格(如图3),不妨设这两个格子中皇后在白格子上。于是,我们将n*m个格子分成两部分白格与黑格。因此我们可以将模型一优化为:

图3

1.将棋盘中的所有格子分成两个部分,对所有的格子进行编号,每个白格与它能攻击到的黑格之间(障碍除外)添上一条从白格到黑格的弧,构成一个二分图。

2.增加一个源点s,从s点向所有非障碍的白格添上一条弧;增加一个汇点t,从所有非障碍的黑格到t添上一条弧。

3.设置所有的弧的流量为1。
图1(b)所示的棋盘,对应的模型为:

图4

[两种模型的比较]

显然,模型二的顶点数与边数大致是模型一的一半。下面是在bp环境下两种模型的时间效率比较(p166/32m):

模型一 模型二

可扩展性 不易打印出一种解 容易打印出一种解

模型二正是根据问题的特殊性(即马的走法),将网格中的格点分成白与黑两类,且规定马只能从白格跳到黑格,从而避免将每个格点折分成两个点,减少模型的顶点数,同时也大大减少了边的数目。达到了很好的优化效果。

(二)综合各种模型的优点,智能选择模型

有时,同一问题的各种模型各有特色,各有利弊。这种情况下,我们就要综合考虑各种模型的优缺点,根据测试数据智能地选择问题的模型。

例2火星探测器(ioi97)

有一个登陆舱(pod),里边装有许多障碍物探测车(mev),将在火星表面着陆。着陆后,探测车离开登陆舱向相距不远的先期到达的传送器(transmitter)移动,mev一边移动,一边采集岩石(rock)标品,岩石由第一个访问到它的mev所采集,每块岩石只能被采集一次。但是这之后,其他mev可以从该处通过。探测车mev不能通过有障碍的地面。
本题限定探测车mev只能沿着格子向南或向东从登陆处向传送器transmitter移动,允许多个探测车mev在同一时间占据同一位置。

任务:计算出所有探测车的移动途径,使其送到传送器的岩石标本的数量最多,且使得所有的探测车都必须到达传送器。

输入:

火星表面上的登陆舱pod和传送器之间的位置用网络p和q表示,登陆舱pod的位置为(1,1)点,传送器的位置在(p,q)点。

火星上的不同表面用三种不同的数字符号来表示:

0代表平坦无障碍
1代表障碍
2代表石块。
输入文件的组成如下:
numberofvehicles
p
q
(x1y1)(x2y1)(x3,y1)…(xp-1y1)(xpy1)
(x1y2)(x2y2)(x3,y2)…(xp-1y1)(xpy2)
(x1y3)(x2y3)(x3,y3)…(xp-1y3)(xpy3)

(x1yq-1)(x2yq-1)(x3,yq-1)…(xp-1yq-1)(xpyq-1)
(x1yq)(x2yq)(x3,yq)…(xp-1yq)(xpyq)
p和q是网络的大小;numberofvehicles是小于1000的整数,表示由登陆舱pod所开出的探测车的个数。共有q行数据,每行表示火星表面的一组数据,p和q都不超过128。

[模型一]

很自然我们以登陆舱的位置为源点,传送器的位置为汇点。同时某块岩石由第一个访问到它的mev所采集,每块岩石只能被采集一次。但是这之后,其他mev可以从该处通过,且允许多个探测车mev在同一时间占据同一位置。因此我们将地图中的每个点分成两个点,即(x,y)à(x,y,0)和(x,y,1)。具体的描述一个火星地图的网络模型构造如下:

1. 将网格中的每个非障碍点分成(x,y)两个点(x,y,0)和(x,y,1),其中源点s = v(1, 1, 0),汇点t = v(maxx, maxy, 1)。

2. 在以上顶点中添加以下三种类型的边e1,e2,e3,相应地容量和费用分别记为c1、c2、c3以及w1、w2、w3:

u e1 = v(x, y, 0) -> v(x, y, 1),c1 = maxint,w1 = 0。
u e2 = v(x, y, 0) -> v(x, y, 1),c2 = 1,w2 = -1(这里要求(x, y)必须是矿石)
u e3 = v(x, y, 1) -> v(x'', y'', 0),c3 = maxint,w3 = 0.

其中x''=x+1 y''=y 或x''=x y''=y+1,1 <= x'' <= maxx,1 <= y'' <= maxy,且(x'' y'')非障碍。

从以上模型中可以看出,在构造的过程中,将地图上的一个点"拆"成了网络的两个节点。添加e1型边使得每个点可以被多次访问,而添加e2型边使得某点上的矿石对于这个网络,从s到t的一条路径可以看作是一辆探测车的行动路线。路径费用就是探测车搜集到的矿石的数目。对于网络g求流量为numberofvehicles的固定最小费用流,可以得到问题的解。

[模型二]

事实上,如果我们只考虑这numberofvehicles辆车中每辆车分别依次装上哪些矿石。则每辆车经过的矿石就是一条流,因此我们以网格中的矿石为网络的顶点建立以下的网络流模型。

1. 将网格中的每个起点(网格左上角)能到达,且能从它能到达终点(右下角)的矿石 (x,y)点分成左点(x,y,0)和右点(x,y,1)两个点,并添加源点s和汇点t。
2. 在以上顶点中添加以下五种类型的边e1,e2,e3,相应地容量和费用分别记为c1、c2、c3以及w1、w2、w3:

u e1 = v(x, y, 0) -> v(x, y, 1),c1 = 1,w1 = -1。
u e2 = v(x, y, 1) -> v(x'', y'', 0),c2 = 1,w2 = 0(矿石点(x, y)可到达矿石点(x'',y''))。
u e3 = s -> v(x, y, 0),c3 = 1,w3 = 0。
u e4 = v(x, y, 1)->t,c4 = 1,w4 = 0。
u e5=s->t,c5=maxint,w5=0。

由于每个石块被折成两个点,且容量为1,就保证了每个石块只被取走一次,同时取走一块石块就得到-1的费用。因此对以上模型,我们求流量为numberofvehicles的最小费用流,就可得到解。

[两种模型的比较]

1.模型一以网格为顶点,模型二以矿石为顶点,因此在顶点个数上模型二明显优于模型一,对于一些矿石比较稀疏,而网格又比较大的数据,模型二的效率要比模型一来得高。且只要矿石的个数不超过一定数目,模型二可以处理p,q很大的数据,而模型一却不行。

2.模型一中边的数目最多为3*p*q,而模型二中边的数目最坏情况下大约为p*q*(p+1)*(q+1)/4-p*q。因此在这个问题中,若对于一些矿石比较密集且网格又比较大的数据,模型二的边数将大大超过模型一,从而使得时间效率大大低于模型一。

下面是网格中都是矿石的情况比较(piii700/128m ,bp7.0保护模式):
numberofvehicles=10 模型一 模型二

通过以上数据,可知对于p,q不超过60的情况,模型一都能在10秒内出解。而模型二则对于p、q=30的最坏情况下速度就很慢了,且p、q超过30后就出现内存溢出情况,而无法解决。

因此,对于本题,以上两种模型各有利弊,我们可根据测试数据中矿石稀疏程度来决定建立什么样的模型。若矿石比较稀疏,则可以考虑用建立如模型二的网络模型;若矿石比较密集则建立模型一所示网络模型。然后,再应用求最小费用最大流算法求解。对于p,q>60,且矿石比较多情况下,两种模型的网络流算法都无法求解。在实际的应用中问题经常都只要求近似解,此时还可用综合一些其它算法来求解。

四、结束语

综上所述,网络流算法中模型的优化是网络流算法提高效率的根本。我们要根据实际问题,从减少顶点及边的角度综合考虑如何对模型进行优化,选择适当的模型,以提高算法的效率。对于有些题目,解题的各种模型各有优劣时,还可通过程序自动分析测试数据,以决定何种情况下采用何种模型,充分发挥各种模型的优点,以达到优化程序效率的目的。

‘叁’ 网络流的最大流算法

1、augment path,直译为“增广路径”,其思想大致如下:
原有网络为G,设有一辅助图G',其定义为V(G') = V(G),E(G')初始值(也就是容量)与E(G)相同。每次操作时从Source点搜索出一条到Sink点的路径,然后将该路径上所有的容量减去该路径上容量的最小值,然后对路径上每一条边<u,v>添加或扩大反方向的容量,大小就是刚才减去的容量。一直到没有路为止。此时辅助图上的正向流就是最大流。
我们很容易觉得这个算法会陷入死循环,但事实上不是这样的。我们只需要注意到每次网络中由Source到Sink的流都增加了,若容量都是整数,则这个算法必然会结束。
寻找通路的时候可以用DFS,BFS最短路等算法。就这两者来说,BFS要比DFS快得多,但是编码量也会相应上一个数量级。
增广路方法可以解决最大流问题,然而它有一个不可避免的缺陷,就是在极端情况下每次只能将流扩大1(假设容量、流为整数),这样会造成性能上的很大问题,解决这个问题有一个复杂得多的算法,就是预推进算法。
2、push label,直译为“预推进”算法。
3、压入与重标记(Push-Relabel)算法
除了用各种方法在剩余网络中不断找增广路(augmenting)的Ford-Fulkerson系的算法外,还有一种求最大流的算法被称为压入与重标记(Push-Relabel)算法。它的基本操作有:压入,作用于一条边,将边的始点的预流尽可能多的压向终点;重标记,作用于一个点,将它的高度(也就是label)设为所有邻接点的高度的最小值加一。Push-Relabel系的算法普遍要比Ford-Fulkerson系的算法快,但是缺点是相对难以理解。
Relabel-to-Front使用一个链表保存溢出顶点,用Discharge操作不断使溢出顶点不再溢出。Discharge的操作过程是:若找不到可被压入的临边,则重标记,否则对临边压入,直至点不再溢出。算法的主过程是:首先将源点出发的所有边充满,然后将除源和汇外的所有顶点保存在一个链表里,从链表头开始进行Discharge,如果完成后顶点的高度有所增加,则将这个顶点置于链表的头部,对下一个顶点开始Discharge。
Relabel-to-Front算法的时间复杂度是O(V^3),还有一个叫Highest Label Preflow Push的算法复杂度据说是O(V^2*E^0.5)。我研究了一下HLPP,感觉它和Relabel-to-Front本质上没有区别,因为Relabel-to-Front每次前移的都是高度最高的顶点,所以也相当于每次选择最高的标号进行更新。还有一个感觉也会很好实现的算法是使用队列维护溢出顶点,每次对pop出来的顶点discharge,出现了新的溢出顶点时入队。
Push-Relabel类的算法有一个名为gap heuristic的优化,就是当存在一个整数0<k<V,没有任何顶点满足h[v]=k时,对所有h[v]>k的顶点v做更新,若它小于V+1就置为V+1。
cpp程序: #include<cstdio>#include<cstring>#include<algorithm>#include<queue>#;inttt,kase;intnn,m;intH[45],X[1004],P[1004],flow[1004],tot,cap[1005];intd[45];intS,T;voidadd(intx,inty,intz){P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;cap[tot]=flow[tot];}queue<int>q;boolbfs(){memset(d,0,sizeof(d));d[S]=1;intx;q.push(S);while(!q.empty()){x=q.front();q.pop();for(inti=H[x];i;i=X[i]){if(flow[i]>0&&!d[P[i]]){d[P[i]]=d[x]+1;q.push(P[i]);}}}returnd[T];}intdfs(intx,inta){if(x==T||a==0)returna;intf=a,tmp;for(inti=H[x];i;i=X[i]){if(flow[i]>0&&d[P[i]]==d[x]+1){tmp=dfs(P[i],min(flow[i],a));flow[i]-=tmp;a-=tmp;flow[i^1]+=tmp;if(!a)break;}}if(f==a)d[x]=-1;returnf-a;}intDinic(){intf=0;while(bfs())f+=dfs(S,inf);returnf;}intmain(){/**输入过程省略**/intmaxflow=Dinic();printf(%d ,maxflow);return0;}

‘肆’ 求计算方法、算法分析资料

流体网络算法综述
一 引 言
网络理论是拓扑数学分支之一—图论的重要内容。它是一门既古老而又年轻的科学,在图论基础上研究网络一般规律和网络流问题各种优化理论和方法的学科,是运筹网络理论学的一个分支。网络是用节点和边联结构成的图,表示研究诸对象及其相互关系,如铁路网、电力网和通信网等。网络中的节点代表任何一种流动的起点、运转点和终点(如车站、港口、城镇、计算机终端和工程项目的事件等)。在网络中每条边上赋予某个正数,称为该边的权,它可以表示路程、流量、时间和费用等。建立网络的目的都在于把某种规定的物质、能量或信息从某个供应点最优地输送到另一个需求点去。例如,在管道网络中要以最短的距离、最大的流量和最小的费用把水、石油或天然气从供应点送到用户那里。流体网络理论也在集中空调网络、供水、供气、供热网络矿井通风网络等等中有重要的理论应用,流体网络的算法研究也就有着不可缺少的重要作用。
二 算法综述
1 网络分流
1.1网络分流预处理
已知有向流体网络 ,设一虚拟的节点 ,我们把它定义为基点,连接基点和网络源汇点的虚拟分支为:

此时网络变成: , 。分支 对应的流量、流阻和阻力分别用 、 和 表示,并有:
式中, 、 、 分别为包括虚拟节点和虚拟分支在内的网络分支对应的流量、流阻和阻力集合。
有关虚拟分支的主要参数规定如下:
1)流量等于与之相连的网络入边或出边的流量;
2)阻力等于基点 的压能与分支的另一节点 的压能之差,基点的位置及其压能值均可任意设置;
3)流阻值的大小按照分支阻力定律计算,但是当虚拟分支阻力是0,而且流阻又位于分母时,流阻取无穷大。
2 流体网络的基本定律
2.1 质量守恒定律
(1)狭义的质量守恒定律(亦称节点质量守恒定律)
在单位时间内,任一节点流入和流出的流体质量的代数和为零。如果令流出为正、流入为负,则节点质量守恒定律可以写成:

式中, 和 分别为分支 和 的流体密度;
和 分别为分支 和 的流量;
和 分别是节点 的出边 和入边 。
当密度变化可以忽略不计时,上式可写为:

即流量平衡定律。该定律表明:对网路中的任一节点,流进的流量等于流出的流量。

(2)广义质量守恒定律
单位时间内,任一有向割集对应的分支流量的代数和等于0。割集流量平衡方程的矩阵表示是:

式中, 为有向割集矩阵及其元素值; 为割集数。

2.2 能量守恒定律
在任一闭合回路 上所发生的能量转换的代数和为零。即

式中, 为分支 的阻力,当分支与回路方向一致时, 取正号, 、当分支与回路方向相反时, 取负号,仍是 ;
为回路 上的流体机械动力,如风机、泵等等,当回路上的动力在回路内克服阻力做功时, 、反之,如果所属的动力在回路内起阻力作用,则有, ;
为回路 上的自然风压、火风压等等,同样,如果自然风压、火风压在回路中克服阻力做功, 、反之, 。我们把 和 统称为附加阻力,并记为 。
当回路上既无流体机械动力又无自然风压或火风压时,上式可写为: ,即阻力平衡定律。该定律表明:在任一回路上,不同方向的流体,它们的阻力必定相等。

2.3 阻力定律
流体在管路中流动时,其阻力(习惯上也叫压力损失、能量损失、压降等等)表达式为

式中, 为分支的阻力值;
为分支的流阻值;
为分支的流量值;
为流态因子,取决于流体的流动状态,层流时取1,完全紊流取2,过渡状态取1~2的中间值。
3 网络分流算法
3.1 网络分流算法综述
当流体网络中所有的流阻为已知,并已知网络的总流量、或已知回路的附加阻力,求所有分支流量的过程叫做网络分流,也称网络解算。
网络解算可分为:解析法、图解法、物理相似模拟法、数值方法。数值法属于近似法,是目前研究分流的主要手段。从计算数学的角度看,数值方法可分为三类:斜量法、迭代法和直接代入法。
3.2 Barczyk法
网络解算的基本方程组如下:

式中, 为分支流量;
为回路阻力平衡方程,简记成 ; 为基本关联矩阵元素;
为基本回路矩阵元素。
误差判别式是:

式中, 是流量误差限; 是阻力误差限。
如果误差满足要求,则解算结束;否则还要继续进行迭代。
归纳上述分析,Barczyk法的程序流程是:
① 已知: 、 、 、 , ;
② 拟定树支和余支,并把余支作为基准分支: 、 ;
③ 求回路矩阵: ;
④ 计算Jacobi矩阵及其逆阵: 、 ;
⑤ 计算阻力矩阵: ;
⑥ 求余支流量修正值矩阵: ;
⑦ 修正余支流量: ;
⑧ 修正树支流量: ;
⑨ 误差验算: ,满足精度程序结束;否则, ,转到(4)继续迭代;

3.2 Cross法
Cross算法亦称Scott-Hinsley法。在Barczyk法中,如果回路选择的合理,可以使Jacobi矩阵除主对角线外其余元素为0,即:

上式表明, 个回路阻力平衡方程中每一个回路仅含有一个基准分支,显然当回路 时,上式会成立,并有:

将 代入上式,有:

如果令 ,则有回路流量校正值公式为:
式中, 为第 个基本回路、第 次迭代时的回路流量修正值, ; 为迭代次数, ; 为基本回路矩阵第 行,第 列元素值; 为回路第 列对应的分支流阻; 为回路第 列对应的分支在第 次迭代时的初始流量值; 为第 个基本回路的附加阻力。
回路分支流量校正式为:

上式的第二行是为了加快收敛速度所采取的算法,也就是用用已经修正过的流量值计算后面回路的流量修正值。
Cross法程序流程是:
(1) 已知: 、 、 、 , ;
① 拟定树及余树: 、 ;
② 拟定基本回路矩阵: ;
③ 计算回路流量修正值: ;
④ 修正回路流量: ;
⑤ 误差验算,满足精度程序结束;否则, ,转到(4)继续迭代。

Cross法与Barczyk法的主要区别如表8-1所示。
表8-1 Barczyk法与Cros法的主要区别
方法与内容 Barczy法 Cross法
Jacobi矩阵非主对角线元素 不一定为0 一定为0
流量修正值 每一基准分支都有自己的流量修正值 同一回路内的分支具有相同的流量修正值
流量修正 基准分支流量修正值只对基准分支进行修正,非基准分支流量根据节点流量守恒定律确定 用同一流量修正值对回路内的所有分支进行修正

4分流算法中的一些具体问题
4.1 基准分支的拟定与迭代处理
以 为权对分支进行排序,将带有附加阻力的分支排在最后,然后找最小树,将余支作为基准分支,从数学上已经证明这将加快迭代的收敛速度。如果迭代20次仍然不收敛,则以迭代后的分支流量值进行重新排序,再迭代,将加快收敛速度。

4.2 流体机械特性曲线的处理
一般用下面的二次曲线拟合流体机械特性曲线,而且认为流体机械的工况点在合理的工况区间内,如图8-2的实线部分。

式中, 为流体机械所在分支的流量; 、 、 为方程常数。
上式中,如果流体机械作用的方向与流体流动方向相同, ,流体机械克服流体流动阻力做功;反之, ,流体机械成为流体流动的阻力。
如果分支流量的初始值与其真值之间的偏差较大,则有可能出现工况点落在特性曲线的另一侧,最终导致假收敛。从软件的可视化角度、从面向现场工程技术人员的角度出发,网络分流时的初始流量拟定不应由人工完成,而计算机自动进行初始流量拟定时,如果采用二次曲线拟合,发生假收敛的机率会更多。
为了避免假收敛,同时,更为重要的是为了能够模拟流体机械在不稳定工作区(特性曲线的驼峰段)的工况、模拟流体机械作为流体流动的阻力时的状况,作者采用5次方程拟合流体机械特性曲线〔11〕,如图8-3所示,方程如下:

图8-1 图8-2
4.3 网络简化
网络简化是把一个子网简化成1条分支,简化分支流量修正过程就是子网分流过程。在C 面向对象程序设计上,简化分支由普通分支和流体网络共同派生,并采用虚拟技术“virtual”,该过程将自动实现。
三 总 结
目前流体网络的理论和应用在不断发展,出现了具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。
流体网络理论在生产生活中具有不可缺少的重要地位,。

阅读全文

与网络流理论算法与应用pdf相关的资料

热点内容
winftplinux 浏览:335
推特app界面如何设置成中文 浏览:452
太空工程师转子编程属性 浏览:32
windowscmd关机命令 浏览:342
云桌面只要服务器装一套软件 浏览:247
电脑右键按到什么导致文件夹全屏 浏览:454
我的世界如何制造服务器主城 浏览:365
linuxssh连不上 浏览:297
永宏plc用什么编程电缆 浏览:371
win激活命令行 浏览:886
新手学电脑编程语言 浏览:893
云空间在哪个文件夹 浏览:926
编程游戏小猫抓小鱼 浏览:790
安卓dosbox怎么打开 浏览:774
服务器无影响是怎么回事 浏览:958
比德电子采购平台加密 浏览:203
加密货币400亿 浏览:524
植发2次加密 浏览:44
vc6查看编译的错误 浏览:596
心理大全pdf 浏览:1002