exponenta event banner

упростить

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

Описание

пример

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 для использования этой переменной с 'min' или 'max' методы выбора.

пример

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

  • H.Edges(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)

Figure contains an axes. The axes contains an object of type graphplot.

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

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

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

Figure contains an axes. The axes contains an object of type graphplot.

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

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

Figure contains an axes. The axes contains an object of type graphplot.

Упрощение графика при сохранении автономных циклов с помощью '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

Figure contains an axes. The axes contains an object of type graphplot.

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

Figure contains an axes. The axes contains an object of type graphplot.

Использовать второй и третий выходы 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 в старом графе.

Демонстрационный ролик об упрощении мультиграфа с помощью 'PickVariable' и 'AggregationVariables' пары имя-значение.

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

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

Figure contains an axes. The axes contains an object of type graphplot.

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

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

Figure contains an axes. The axes contains an object of type graphplot.

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

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

Figure contains an axes. The axes contains an object of type graphplot.

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

свернуть все

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

Пример: G = graph(1,2)

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

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

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

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

Пример: simplify(G,'last')

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

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

Пример: simplify(G,'sum')

Переключение для сохранения самокольцов, указанных как:

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

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

Пример: simplify(G,'sum','keepselfloops')

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: H = simplify(G,'sum','AggregationVariables',{'Var1' 'Var2'})

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

Пример: simplify(G,'min','PickVariable',3)

Пример: simplify(G,'min','PickVariable','var3')

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

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

  • Символьный вектор, указывающий имя переменной одной таблицы

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

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

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

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

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

Пример: simplify(G,'sum','AggregationVariables',[4 5 6])

Пример: simplify(G,'mean','AggregationVariables',{'var5 var7'})

Пример: simplify(G,'mean','AggregationVariables',@isnumeric)

Типы данных: single | double | logical | function_handle | char | string | cell

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

свернуть все

Упрощенный график, возвращенный как 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