Я собираюсь начать академический проект, и мне нужно создать синтетические сети , то есть графы со специальными свойствами.
Типы графов (сетевых топологий ), которые мне нужно сгенерировать, следующие:
Я могу взять 2 графа, сгенерированных с использованием вышеуказанных моделей, и связать их вместе, например, соединив граф Эрдоса-Реньи со случайным регулярным графом.
Мне нужен инструмент или библиотека, способная генерировать и экспортировать графики. Приемлемые форматы экспорта: файлы CSV, JSON, XML и gml. Чем проще формат экспорта, тем лучше.
Дуги в графе могут быть направленными или ненаправленными, взвешенными или невзвешенными, а узлы должны содержать основную информацию (например, параметр «потребление»). Последнее может быть сделано через наследование и не имеет решающего значения.
Мне не нужно визуализировать сгенерированные графики прямо сейчас, я мог бы использовать для этого другой инструмент. Было бы неплохо, но больше всего меня волнует качество генерируемой сети.
Я предпочитаю инструменты с хорошей документацией и качественными руководствами .
Я знаю Java и C++ , предпочитая первый. Я также мог бы использовать Python (если это лучший вариант), но я не совсем знаком с ним.
Некоторые из библиотек, которые я рассматриваю:
JGraphT — известная библиотека Java, имеет всеобъемлющий JavaDoc , но его учебные пособия довольно плохи, и, похоже, он не способен генерировать все сетевые топологии, которые мне нужны.
Библиотека Boost Graph — известная библиотека C++, имеет исчерпывающую документацию , но я не могу найти для нее учебники и не уверен, что в ней есть все необходимые мне генераторы.
Neo4j представляет собой набор алгоритмов Java , имеет всеобъемлющий документ JavaDoc , но не имеет руководств и, похоже, отсутствует генератор случайных чисел .
NetworkX — это библиотека Python, которая, кажется, имеет лучшую документацию и учебные пособия, кажется, в ней есть все генераторы, которые мне нужны, но для этого потребуется, чтобы я использовал Python. Это действительно так хорошо?
Ваш совет приветствуется.
Я бы серьезно посоветовал потратить пару дней, чтобы начать изучение Python — он и его библиотеки потрясающие как по простоте использования, так и по мощности. Одним из больших преимуществ работы с Python является то, что он работает практически везде, и вы даже можете иметь установку с USB-накопителя, которая будет работать без установки на большинстве компьютеров с Windows — сохраните резервную копию своей работы и инструментов, и вы можете продемонстрировать / сделать меняется где угодно.
NetworkX очень хорош, но я бы также посоветовал взглянуть на plotly/matplotlib/scipy для некоторых дополнительных инструментов.
Чтобы ответить на последний вопрос, Python действительно так хорош — есть всего пара действительно важных вещей, которые нужно помнить, <space>*n
не равны <tab>
, и если ваш код не очень хорошо продуман, он не будет работать, как вы ожидаете, или не будет работать вообще.
Агостино