主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

maxflow

グラフの最大フロー

説明

曼氏金融= maxflow (Gs tは,ノード年代tの間の最大フローを返します。グラフGが重みなしの場合(つまりG.Edgesが変数重量を含まない),maxflowはすべてのグラフエッジが重み1をもつものとして扱います。

曼氏金融= maxflow (Gs t算法は,使用する最大フローアルゴリズムを指定します。この構文は,Gが有向グラフの場合にのみ使用できます。

曼氏金融女朋友) = maxflow (___は,前述の構文に示した任意の入力引数を使用して,有向グラフオブジェクト女朋友も返します。女朋友は,非ゼロのフロー値をもつGのエッジのみを使用して構成されます。

曼氏金融女朋友csct) = maxflow (___はさらに,ソースとターゲットのノードIDcsおよびctを返します。これらは最大フローに対応する最小カットを表します。

すべて折りたたむ

重み付きグラフを作成し,プロットします。重み付きエッジはフロー容量を表します。

S = [1 1 2 2 3 4 4 4 5 5];T = [2 3 3 4 5 3 5 6 4 6];权重= [0.77 0.44 0.67 0.75 0.89 0.90 2 0.76 1 1];G =有向图(s t重量);情节(G,“EdgeLabel”G.Edges.Weight,“布局”“分层”);

ノード1からノード6までの最大フローを求めます。

mf = maxflow (G, 1, 6)
mf = 1.2100

グラフを作成してプロットします。重み付きエッジはフロー容量を表します。

S = [1 1 2 2 3 3 4];T = [2 3 3 4 4 5 5];权重= [10 6 15 5 10 3 8];G =有向图(s t重量);H =情节(G,“EdgeLabel”, G.Edges.Weight);

ノード1とノード5の間の最大フロー値を求めます。“augmentpath”を指定してフォード・ファルカーソンアルゴリズムを使用し,2つの出力を使用して非ゼロフローのグラフを返します。

(mf, GF) = maxflow (G, 1, 5,“augmentpath”
mf = 11
GF =具有属性的有向图:Edges: [6x2 table] Nodes: [5x0 table]

非ゼロフローのグラフを強調表示し,ラベルを付けます。

H.EdgeLabel = {};突出(H,女朋友,“EdgeColor”“r”“线宽”2);圣= GF.Edges.EndNodes;labeledge (H,圣(:1),圣(:,2)GF.Edges.Weight);

重み付きグラフを作成し,プロットします。エッジの重みはフロー容量を表します。

S = [1 1 2 3 3 4 4 5 5];T = [2 3 3 2 5 5 6 4 6];权重= [0.77 0.44 0.67 0.69 0.73 2 0.78 1 1];G =有向图(s t重量);情节(G,“EdgeLabel”G.Edges.Weight,“布局”“分层”

グラフの最大フローおよび最小カットを求めます。

(mf ~, cs, ct) = maxflow (G, 1, 6)
mf = 0.7300
c =3×11 2 3
ct =3×14 5 6

csノードをソース,ctノードをシンクとして使用して,最小カットをプロットします。csノードを赤,ctノードを緑で強調表示します。これら2セットのノードを連結するエッジの重みが最大フローに等しくなります。

H =情节(G,“布局”“分层”“源”计算机科学,“汇”ct,...“EdgeLabel”, G.Edges.Weight);突出(H, c,“NodeColor”“红色”)突出(H, ct,“NodeColor”“绿色”

入力引数

すべて折りたたむ

入力グラフ。オブジェクトまたは有向图オブジェクトとして指定します。無向グラフの作成にはを,有向グラフの作成には有向图を使用します。

例:图G =(1、2)

例:G =有向图([1,2],[2 3])

ノードペア。ソースノードとターゲットノードを表すノードインデックスまたはノード名の個別の引数として指定します。次の表は,ノードをノードインデックスまたはノード名で参照するさまざまな方法を示しています。

スカラーノードインデックス 1
文字ベクトルのノード名 “一个”
字符串スカラーのノード名 “一个”

例:mf = maxflow (G, A, B)

例:mf = maxflow (G, 1, 10)

データ型:|字符|字符串

最大フローアルゴリズム。次の表のいずれかの項目として指定します。

メモ

既定以外の算法オプションは,有向グラフにのみ指定できます。

オプション 説明
“searchtrees”(既定)

ボイコフ・コルモゴロフアルゴリズムを使用します。ノード年代およびtに関連する探索木を2本作成することにより,最大フローを計算します。

“augmentpath”

フォード・ファルカーソンアルゴリズムを使用します。残余有向グラフで増加経路を検出することにより,最大フローを繰り返し計算します。

有向グラフでは,エッジのいずれかの重みが0でない限り,同じ2つのノード間に逆方向の平行エッジを含むことができません。したがって,グラフがエッジ我[j]を含む場合,我[j]の重みが0か/まつたは我[j]の重みが0の場合にのみ逆向きエッジ我[j]を含むことができます。

“pushrelabel”

ノードの過剰フローを隣接ノードに押し付け,ノードにラベルを付け直すことにより,最大フローを計算します。

有向グラフでは,エッジのいずれかの重みが0でない限り,同じ2つのノード間に逆方向の平行エッジを含むことができません。したがって,グラフがエッジ我[j]を含む場合,我[j]の重みが0か/まつたは我[j]の重みが0の場合にのみ逆向きエッジ我[j]を含むことができます。

例:mf = maxflow (G, A, D ', ' augmentpath ')

出力引数

すべて折りたたむ

最大フロー。スカラーとして返されます。

フローの有向グラフ。有向图オブジェクトとして返されます。女朋友Gと同じノードを含みますが,非ゼロフローをもつGのエッジのみを含みます。同じ2つのノード間に複数のエッジがある多重グラフでは,女朋友に複数のエッジを通過するフローを表す単一のエッジが含まれます。

最小カットのソースノードID。ノードインデックスまたはノード名として返されます。

  • 年代tが数値ノードインデックスを指定する場合,csctもノードインデックスを含みます。

  • 年代tがノード名を指定する場合,csctもノード名を含みます。

最小カットのターゲットノードID。ノードインデックスまたはノード名として返されます。

  • 年代tが数値ノードインデックスを指定する場合,csctもノードインデックスを含みます。

  • 年代tがノード名を指定する場合,csctもノード名を含みます。

詳細

すべて折りたたむ

最大フロー

最大フローのコンテキストでは,グラフ内のエッジは,エッジの重みで表される”容量”をもつと見なされます。エッジの容量は,そのエッジを通過できるフローの量です。したがって,グラフ内の2つのノード間の最大フローは,連結エッジの容量に基づいて,ソースノード年代からターゲットノードtまで通過するフローの量を最大にします。

最小カット

最小カットは,csctを連結するすべてのエッジの重みの合計(カットの重み)が最小になるように,有向グラフのノードを2つのセットcsおよびctに分割します。最小カットの重みは最大フロー値曼氏金融と等しくなります。

csおよびctの要素はそれぞれ,ノード年代およびtに対応するGのノードを示します。csctnummel (cs) + nummel (ct) = numnodes(G)を満たします。

参考

|

R2015bで導入