Максимальный расход на графике
возвращает максимальный поток между узлами mf = maxflow(G,s,t)s и t. Если график G невзвешенный (то есть G.Edges не содержит переменную Weight), то maxflow рассматривает все рёбра графа как имеющие вес, равный 1.
Создание и печать взвешенного графика. Взвешенные кромки представляют пропускную способность потока.
s = [1 1 2 2 3 4 4 4 5 5]; t = [2 3 3 4 5 3 5 6 4 6]; weights = [0.77 0.44 0.67 0.75 0.89 0.90 2 0.76 1 1]; G = digraph(s,t,weights); plot(G,'EdgeLabel',G.Edges.Weight,'Layout','layered');

Определите максимальный поток от узла 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];
weights = [10 6 15 5 10 3 8];
G = digraph(s,t,weights);
H = plot(G,'EdgeLabel',G.Edges.Weight);
Найдите максимальное значение потока между узлом 1 и узлом 5. Определить 'augmentpath' для использования алгоритма Форда-Фулькерсона и двух выходных сигналов для возврата графика ненулевых потоков.
[mf,GF] = maxflow(G,1,5,'augmentpath')mf = 11
GF =
digraph with properties:
Edges: [6x2 table]
Nodes: [5x0 table]
Выделите и пометьте график ненулевых потоков.
H.EdgeLabel = {};
highlight(H,GF,'EdgeColor','r','LineWidth',2);
st = GF.Edges.EndNodes;
labeledge(H,st(:,1),st(:,2),GF.Edges.Weight);
Создание и печать взвешенного графика. Граничные веса представляют пропускную способность потока.
s = [1 1 2 3 3 4 4 5 5]; t = [2 3 3 2 5 5 6 4 6]; weights = [0.77 0.44 0.67 0.69 0.73 2 0.78 1 1]; G = digraph(s,t,weights); plot(G,'EdgeLabel',G.Edges.Weight,'Layout','layered')

Найдите максимальный поток и минимальный разрез графика.
[mf,~,cs,ct] = maxflow(G,1,6)
mf = 0.7300
cs = 3×1
1
2
3
ct = 3×1
4
5
6
Постройте график минимального выреза, используя cs узлы в качестве источников и ct узлы как раковины. Выделите cs узлы в виде красного цвета и ct узлы зелеными. Обратите внимание, что вес кромки, соединяющей эти два набора узлов, равен максимальному потоку.
H = plot(G,'Layout','layered','Sources',cs,'Sinks',ct, ... 'EdgeLabel',G.Edges.Weight); highlight(H,cs,'NodeColor','red') highlight(H,ct,'NodeColor','green')

s,t - Пара узлов (как отдельные аргументы)Пара узлов, заданная как отдельные аргументы индексов узлов или имен узлов для указания исходного узла и целевого узла. В этой таблице представлены различные способы ссылки на узлы по их индексам или по именам узлов.
| Стоимость | Пример |
|---|---|
| Индекс скалярного узла | 1 |
| Имя узла вектора символов | 'A' |
| Имя скалярного узла строки | "A" |
Пример: mf = maxflow(G,'A','B')
Пример: mf = maxflow(G,1,10)
Типы данных: double | char | string
algorithm - Алгоритм максимального расхода'searchtrees' (по умолчанию) | 'augmentpath' | 'pushrelabel'Алгоритм максимального расхода, указанный как одна из записей в таблице.
Примечание
Можно указать только не по умолчанию algorithm опции с направленным графом.
| Выбор | Описание |
|---|---|
'searchtrees' (по умолчанию) |
Использует алгоритм Бойкова - Колмогорова. Вычисляет максимальный поток путем построения двух деревьев поиска, связанных с узлами |
'augmentpath' |
Использует алгоритм Форда - Фулкерсона. Вычисляет максимальный поток итеративно, найдя увеличивающий путь в остаточном направленном графе. Направленный граф не может иметь параллельные рёбра противоположного направления между теми же двумя узлами, если вес одного из этих рёбер не равен нулю. Так, если граф содержит ребро |
'pushrelabel' |
Вычисляет максимальный поток, перемещая избыточный поток узла к соседям, а затем повторно маркируя узел. Направленный граф не может иметь параллельные рёбра противоположного направления между теми же двумя узлами, если вес одного из этих рёбер не равен нулю. Так, если граф содержит ребро |
Пример: mf = maxflow(G,'A','D','augmentpath')
mf - Максимальный расходМаксимальный поток, возвращаемый как скаляр.
GF - Направленный график потоковdigraph объектНаправленный график потоков, возвращаемый как digraph объект. GF содержит те же узлы, что и G, но содержит только те края G с ненулевым потоком. Для мультиграфов с несколькими ребрами между одними и теми же двумя узлами, GF содержит одну кромку, отражающую поток через несколько кромок.
cs - Минимальные идентификаторы исходных узлов вырезанияМинимальные идентификаторы исходных узлов, возвращаемые в виде индексов узлов или имен узлов.
Если s и t укажите числовые индексы узлов, затем cs и ct также содержат индексы узлов.
Если s и t укажите имена узлов, затем cs и ct также содержат имена узлов.
ct - Минимальные идентификаторы целевых узловМинимальные идентификаторы конечных узлов, возвращаемые в виде индексов узлов или имен узлов.
Если s и t укажите числовые индексы узлов, затем cs и ct также содержат индексы узлов.
Если s и t укажите имена узлов, затем cs и ct также содержат имена узлов.
В контексте максимального потока считается, что рёбра на графике имеют емкость, представленную весом рёбер. Пропускная способность кромки - это величина потока, который может проходить через эту кромку. Поэтому максимальный поток между двумя узлами на графике максимизирует величину потока, проходящего от исходного узла, s, к целевому узлу, t, исходя из пропускной способности соединительных кромок.
Минимальное вырезание секционирует направленные узлы графа на два набора, cs и ct, таким образом, что сумма весов всех краев, соединяющих cs и ct (вес разреза) минимизирован. Вес минимального погона равен максимальному значению расхода, mf.
Записи в cs и ct указать узлы G связанные с узлами s и tсоответственно. cs и ct удовлетворить numel(cs) + numel(ct) = numnodes(G).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.