упрощение

Уменьшите мультиграф до простого графика

Синтаксис

H = simplify(G)
H = simplify(G,pickmethod)
H = simplify(G,aggregatemethod)
H = simplify(___,selfloopflag)
H = simplify(___,Name,Value)
[H,eind,ecount] = simplify(___)

Описание

пример

H = simplify(G) возвращает график без нескольких краев или самоциклов. Когда несколько краев происходят между теми же двумя узлами, только первый край (как задано в G.Edges) сохранен. Граничные свойства сохраняются.

пример

H = simplify(G,pickmethod) задает метод, чтобы выбрать между несколькими краями. Граничные свойства сохраняются. pickmethod может быть 'first' (значение по умолчанию), 'last', 'min' или 'max'.

пример

H = simplify(G,aggregatemethod) задает метод, чтобы объединить вес ребра нескольких краев в вес единственного нового края. Все другие граничные свойства в G пропущены. aggregatemethod может быть 'sum' или 'mean'.

пример

H = simplify(___,selfloopflag) задает, сохранить ли или удалить самоциклы из графика с помощью какой-либо из комбинаций входных аргументов в предыдущих синтаксисах. Например, 'keepselfloops' указывает, что узлы с одним или несколькими самоциклами будут иметь один самоцикл в упрощенном графике.

H = simplify(___,Name,Value) задает дополнительные опции с одним или несколькими аргументами в виде пар "имя-значение". Например, можно задать 'PickVariable' и переменную в G.Edges, чтобы использовать ту переменную с методами выбора 'max' или 'min'.

пример

[H,eind,ecount] = simplify(___) дополнительно возвращает граничные индексы, eind и край считают ecount:

  • H. Края (eind (i), :) является краем в H, который представляет край i в G.

  • ecount(j) является количеством краев в G, которые соответствуют краю j в H.

Примеры

свернуть все

Создайте взвешенный, неориентированный мультиграф с несколькими краями между узлом 1 и узлом 2.

G = graph([1 1 1 1 2 3],[2 2 2 3 3 4], 1:6);
G.Edges
ans=6×2 table
    EndNodes    Weight
    ________    ______

     1    2       1   
     1    2       2   
     1    2       3   
     1    3       4   
     2    3       5   
     3    4       6   

Упростите мультиграф в простой график, такой, что существует только один край между узлом 1 и узлом 2. simplify сохраняет первый край между теми двумя узлами, G.Edges(1,:), и пропускает другие.

G = simplify(G);
G.Edges
ans=4×2 table
    EndNodes    Weight
    ________    ______

     1    2       1   
     1    3       4   
     2    3       5   
     3    4       6   

Используйте второй входной параметр simplify, чтобы выбрать метод, который выбирает между несколькими краями или комбинирует несколько краев в один.

Создайте взвешенный мультиграф. В этом графике пять краев происходят между узлом 3 и узлом 4, но края имеют случайные веса. Просмотрите граничную таблицу и постройте график графика для ссылки.

G = graph([1 2 3 3 3 3 3 3 ],[2 3 1 4 4 4 4 4],randi(10,1,8));
G.Edges
ans=8×2 table
    EndNodes    Weight
    ________    ______

     1    2        9  
     1    3        2  
     2    3       10  
     3    4       10  
     3    4        7  
     3    4        1  
     3    4        3  
     3    4        6  

plot(G,'EdgeLabel',G.Edges.Weight)

Команда simplify(G) сохраняет первый из повторных краев. Однако можно задать различный метод выбора/объединения со вторым входным параметром.

Опции для выбора между несколькими краями: 'first' (значение по умолчанию), 'last', 'min' и 'max'. Сохраните повторный край с максимальным весом.

H_pick = simplify(G,'max');
plot(H_pick,'EdgeLabel',H_pick.Edges.Weight)

Опции для объединения нескольких краев в каждый: 'sum' и 'mean'. Суммируйте повторенные края вместе, чтобы произвести единственный край с большим весом.

H_comb = simplify(G,'sum');
plot(H_comb,'EdgeLabel',H_comb.Edges.Weight)

Упростите график при сохранении самоциклов с помощью опции 'keepselfloops'.

Создайте мультиграф с двумя узлами и несколькими самоциклами. Упростите график и сохраните самоциклы.

G = graph([1 1 1 1 1 1 1 2 2 2 2],[1 1 1 1 2 2 2 2 2 2 2 ]);
plot(G)
axis equal

G = simplify(G,'keepselfloops');
plot(G)
axis equal

Используйте второе и треть выходные параметры simplify, чтобы получить информацию о том, сколько (и который) объединены края.

Создайте неориентированный мультиграф с тремя узлами и четырьмя краями.

G = graph([1 1 1 2],[2 2 3 3]);
G.Edges
ans=4×1 table
    EndNodes
    ________

     1    2 
     1    2 
     1    3 
     2    3 

Упростите график и задайте три выходных параметров, чтобы получить дополнительную информацию об объединенных краях.

[G,ei,ec] = simplify(G)
G = 
  graph with properties:

    Edges: [3x1 table]
    Nodes: [3x0 table]

ei = 4×1

     1
     1
     2
     3

ec = 3×1

     2
     1
     1

ei(i) является краем в упрощенном графике, который представляет край i в старом графике. Поскольку первые два края повторяются, ei(1) = ei(2) = 1. Кроме того, ec(1) = 2, с тех пор существует два края в новом графике, соответствующем краю 1 в старом графике.

Покажите, как упростить мультиграф с помощью пар "имя-значение" 'AggregationVariables' и 'PickVariable'.

Создайте мультиграф, где узлы представляют местоположения, и края представляют виды транспорта. Края имеют свойства, которые отражают стоимость и время каждого режима транспортировки. Предварительно просмотрите граничную таблицу.

G = graph([1 1 1 1 1 1 2 2 2],[2 2 2 3 3 3 3 3 3],[],{'New York', 'Boston', 'Washington D.C.'});
G.Edges.Mode = categorical([1 2 3 1 2 3 1 2 3],[1 2 3],{'Air' 'Train' 'Bus'})';
G.Edges.Cost = [400 80 40 250 100 75 325 150 100]';
G.Edges.Time = [1 7 5 1.5 10 8 1.75 11 9]';
G.Edges
ans=9×4 table
               EndNodes                Mode     Cost    Time
    _______________________________    _____    ____    ____

    'New York'    'Boston'             Air      400        1
    'New York'    'Boston'             Train     80        7
    'New York'    'Boston'             Bus       40        5
    'New York'    'Washington D.C.'    Air      250      1.5
    'New York'    'Washington D.C.'    Train    100       10
    'New York'    'Washington D.C.'    Bus       75        8
    'Boston'      'Washington D.C.'    Air      325     1.75
    'Boston'      'Washington D.C.'    Train    150       11
    'Boston'      'Washington D.C.'    Bus      100        9

Постройте график графика для ссылки. Маркируйте режим транспортировки на каждом краю, сделайте граничные ширины строки пропорциональными времени и цвету каждого края пропорциональный стоимости.

plot(G,'EdgeLabel',cellstr(G.Edges.Mode),'LineWidth',G.Edges.Time./min(G.Edges.Time),'EdgeCData',G.Edges.Cost)
colorbar

Используйте метод выбора 'min' и задайте значение 'PickVariable' как переменная 'Time', чтобы найти самый быстрый вид транспорта между каждым набором узлов.

t = simplify(G,'min','PickVariable','Time');
plot(t,'EdgeLabel',cellstr(t.Edges.Mode))

Используйте метод агрегации 'sum' и задайте значение 'AggregationVariables' как 'Cost', чтобы вычислить, сколько денег сделано на каждой связи.

c = simplify(G,'sum','AggregationVariables','Cost');
plot(c,'EdgeLabel',c.Edges.Cost)

Входные параметры

свернуть все

Входной график, заданный как объект граф или диграф. Используйте граф для создания неориентированного графа или диграф для создания ориентированного графа.

Пример: G = график (1,2)

Пример: G = digraph([1 2],[2 3])

Граничный метод выбора, заданный как 'first', 'last', 'min' или 'max'. Граничный метод выбора обеспечивает способ выбрать, какой из нескольких краев, чтобы сохранить, когда больше чем один край существует между теми же двумя узлами.

  • Если методом является 'first' или 'last', то simplify сохраняет только первый или последний край, который происходит в граничной таблице G.Edges Края.

  • Если методом является 'min' или 'max', то simplify сохраняет только край с минимальным или максимальным весом. Переменная Weight должна существовать в G.Edges, если вы не используете пару "имя-значение" 'PickVariable', чтобы основывать выбор на различной переменной.

Пример: упростите (G, 'в последний раз')

Метод агрегации, заданный или как 'sum' или как 'mean'. Метод агрегации обеспечивает способ объединить несколько краев в единственный край, когда существует больше чем один край между теми же двумя узлами.

По умолчанию simplify только суммирует или составляет в среднем вес ребра в графике и пропускает все другие граничные свойства. Однако можно использовать пару "имя-значение" 'AggregationVariables', чтобы задать который числовые переменные в G.Edges сохранить и агрегироваться.

Пример: упростите (G, 'сумма')

Переключитесь, чтобы сохранить самоциклы, заданные как также:

  • 'omitselfloops' — Удалите все самоциклы из графика. Это значение по умолчанию.

  • 'keepselfloops' — Узлы с одним или несколькими самоциклами имеют единственный самоцикл в упрощенном графике.

Пример: упростите (G, 'сумма', 'keepselfloops')

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: H = упрощают (G, 'сумма', 'AggregationVariables', {'Var1' 'Var2'})

Переменная, чтобы основывать граничный выбор на, заданный как пара, разделенная запятой, состоящая из 'PickVariable' и имени переменной или числового индекса. Используйте эту пару "имя-значение", чтобы выбрать граничную переменную в G.Edges кроме 'Weight', чтобы использовать с 'min' или методами выбора 'max'. simplify сохраняет только край с минимальным или максимальным значением выбранной переменной, когда существует несколько краев между теми же двумя узлами.

Пример: упростите (G, 'min', 'PickVariable', 3)

Пример: упростите (G, 'min', 'PickVariable', 'var3')

Типы данных: единственный | удваиваются | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | строка

Переменные, чтобы агрегироваться, заданный как пара, разделенная запятой, состоящая из 'AggregationVariables' и имени переменной, массива ячеек имен переменных, массива строк, числового вектора, логического вектора или указателя на функцию. Используйте эту пару "имя-значение", чтобы выбрать одну или несколько граничных переменных в G.Edges, который может быть объединен с 'sum' или методами агрегации 'mean'. simplify комбинирует значения этих переменных в единственное значение для одного нового края, когда существует несколько краев между теми же двумя узлами. Значение 'AggregationVariables' может быть одним из следующего:

  • Вектор символа, задающий единственное имя табличной переменной

  • Массив ячеек из символьных векторов, где каждый элемент является именем табличной переменной

  • Массив строк, задающий одни или несколько имен переменных

  • Вектор индексов табличной переменной

  • Логический вектор, элементы которого соответствуют табличным переменным, где true включает соответствующую переменную и false, исключает его

  • Указатель на функцию, который берет таблицу G.Edges, как введено и возвращает логический скаляр, такой как @isnumeric

Пример: упростите (G, 'сумма', 'AggregationVariables', [4 5 6])

Пример: упростите (G, 'среднее значение', 'AggregationVariables', {'var5 var7'})

Пример: упростите (G, 'среднее значение', 'AggregationVariables',@isnumeric)

Типы данных: единственный | удваиваются | логический | function_handle | char | строка | ячейка

Выходные аргументы

свернуть все

Упрощенный график, возвращенный как объект graph или digraph. H не содержит повторных краев между теми же двумя узлами, такими, что ismultigraph(H) возвращает логический 0 (false). Самоциклы также удалены, если вы не задаете опцию 'keepselfloops'.

Граничные индексы, возвращенные как вектор. Край в H, который представляет край i в G, дан H.Edges(eind(i),:). Если край, i в G является самоциклом, который был удален, то eind(i) является 0.

Граничные количества, возвращенные как вектор. ecount(i) является количеством краев в G, которые соответствуют краю i в H.

Смотрите также

| |

Представленный в R2018a

Была ли эта тема полезной?