Рубрики
Без рубрики

Как генерировать случайные графики с Python?

Два одноклассных решения в этой статье!

Автор оригинала: Chris.

Существуют разные способы создания случайных графов в Python. Но Первые вещи первыми:

Что такое график?

По словам Мерриам-Вебстер График – это «Коллекция вершин и краев, которые присоединяются к пары вершин в соответствии с Merriam-Webster , график” Отказ

Например, это график:

Каждый край соединяет ровно две вершины.

Что такое случайный график?

Теперь, учитывая, что у вас есть конечное количество вершин N , также есть конечное число графов, которые могут быть созданы из этих вершин (хотя количество графов с n вершины вырастают экспоненциально).

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

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

Что такое модель поколения Erdős-Rényi Random Graph?

В большинстве случаев, когда ссылаясь на «случайные графики», люди предполагают основные “Erdős-Rényi Model” Как генератор графика (он назван в честь математиков Paul Erdős и Alfréd Rényi). Важным свойством случайных графов, генерируемых по этой модели, является то, что, учитывая набор вершин и ряд ребер, все возможные графики генерируются с той же вероятностью. Таким образом, нет уклона к определенному типу графа.

[Алгоритм] Вот как работает основной генератор графика ERDőS-Rényi:

  • Начните с N Нескрытые вершины.
  • Перейти на каждый возможный край е Отказ

    • Включить край е с (независимой) вероятностью P в график.

Какое время выполнения алгоритма? Правильно, как есть N * N Возможные края, время выполнения – O (n ^ 2) Отказ Все графики имеют равную вероятность.

Существует два параметра к алгоритму: количество вершин N и количество ребер е Отказ

В Python вы можете просто использовать Пакет NetworkX генерировать такой случайный график:

from networkx.generators.random_graphs import erdos_renyi_graph


n = 6
p = 0.5
g = erdos_renyi_graph(n, p)

print(g.nodes)
# [0, 1, 2, 3, 4, 5]

print(g.edges)
# [(0, 1), (0, 2), (0, 4), (1, 2), (1, 5), (3, 4), (4, 5)]

Если мы визуализируем этот график, это выглядит следующее:

Ничего особенного – просто случайный граф … 😉

Вы можете попробовать сами в нашей интерактивной Python Shell:

Numpy альтернатива для генерации случайного графика

Хотя вышеуказанный способ – это стандартный Python способ создания случайного графика, вы не вынуждены использовать библиотеку NetworkX (которую вам, возможно, придется установить с PIP, прежде чем использовать его). Как указано на Коннер Дэвис , есть простая альтернатива, используя Numpy Library :

import numpy as np


adjacency_matrix = np.random.randint(0,2,(n,n))

print(adjacency_matrix)
'''
[[0 1 0 1 0 1]
 [0 1 0 1 0 0]
 [0 1 1 0 0 1]
 [1 1 0 0 1 1]
 [0 1 1 1 0 1]
 [1 0 0 1 0 0]]
'''

Обратите внимание, что это поведение не детерминировано: если вы выполняете тот же код на вашем компьютере, вы не увидите тот же результат (по всей вероятности).

Результат выглядит иначе: график – это матрица смежности. Рэннт Метод занимает три аргумента: Начать и Стоп Чтобы ограничить случайное целочисленное значение к фиксированному интервалу (он может принимать только значения 0 и 1) и Форма из результата матрицы. Для получения дополнительной информации об этих условиях, пожалуйста, проверьте Numpy Tutorial в этом блоге Отказ Это показывает вам все, что вам нужно знать, чтобы начать.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.