GraPHP — это библиотека математических графов/сетей, написанная на PHP.
Версия для разработки: эта ветка содержит код для предстоящего выпуска 1.0. Код текущей стабильной версии 0.9 можно найти в ветке
0.9.x
Предстоящий выпуск 1.0 станет шагом вперед для этого пакета. Однако мы по-прежнему будем активно поддерживать версию 0.9.x для тех, кто еще не установил последнюю версию. Дополнительную информацию см. также в инструкциях по установке.
Оглавление
После установки давайте инициализируем пример графика:
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
$ graph = new Graphp Graph Graph ();
// create some cities
$ rome = $ graph -> createVertex ( array ( ' name ' => ' Rome ' ));
$ madrid = $ graph -> createVertex ( array ( ' name ' => ' Madrid ' ));
$ cologne = $ graph -> createVertex ( array ( ' name ' => ' Cologne ' ));
// build some roads
$ graph -> createEdgeDirected ( $ cologne , $ madrid );
$ graph -> createEdgeDirected ( $ madrid , $ rome );
// create loop
$ graph -> createEdgeDirected ( $ rome , $ rome );
Давайте посмотрим, какой город (Вершина) имеет дорогу (т.е. край, указывающий) на Рим:
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Эта библиотека построена на основе концепции математической теории графов (т.е. это не библиотека диаграмм для рисования графика функции). По сути, граф — это набор узлов с любым количеством связей между ними. В теории графов вершины (множественное число от слова «вершина») являются абстрактным представлением этих узлов , а соединения представлены как ребра . Ребра могут быть как ненаправленными («двусторонними»), так и направленными («односторонними», иначе говоря, двусторонними ребрами, дугами).
В зависимости от того, как построены ребра, весь граф может быть либо неориентированным, либо ориентированным графом (он же орграф), либо смешанным графом. Ребрам также разрешено образовывать петли (т.е. ребро из вершины A снова указывает на вершину A). Кроме того, также поддерживаются несколько ребер из вершины A в вершину B (так называемые параллельные ребра), что эффективно образует мультиграф (так называемый псевдограф). И, конечно же, поддерживается любая их комбинация. Хотя многие авторы пытаются провести различие между этими основными понятиями, эта библиотека изо всех сил старается не накладывать на ваши графики никаких искусственных ограничений или допущений.
Эта библиотека предоставляет основные структуры данных для работы с графами, их вершинами, ребрами и атрибутами.
На основе этих структур создано несколько официальных компонентов, обеспечивающих часто необходимые функции. Такая архитектура позволяет использовать эти компоненты независимо и только по требованию.
Ниже приведен список некоторых выделенных компонентов. Список всех официальных компонентов можно найти в проекте Grapp.
Эта библиотека создана для поддержки визуализации графических изображений, включения их в веб-страницы, открытия изображений из приложений CLI и экспорта их в форматы файлов PNG, JPEG или SVG (среди многих других). Поскольку рисование графиков само по себе является сложной областью, фактическое размещение графика оставлено на усмотрение превосходного «Программного обеспечения для визуализации графиков» GraphViz, и мы просто предоставляем несколько удобных API для взаимодействия с GraphViz.
Для получения более подробной информации см.graphp/graphviz.
Помимо рисования графов, одной из наиболее распространенных задач, связанных с графами, является запуск алгоритмов для решения типичных задач, связанных с графами. Поэтому эта библиотека используется в качестве основы для реализации ряда часто используемых графовых алгоритмов:
Дополнительную информацию см. в графе/алгоритмы.
Рекомендуемый способ установки этой библиотеки — через Composer. Впервые в Composer?
После выпуска этот проект будет следовать за SemVer. На данный момент будет установлена последняя разрабатываемая версия:
composer require graphp/graph:^1@dev
См. также CHANGELOG для получения подробной информации об обновлениях версий.
Этот проект предназначен для работы на любой платформе и, следовательно, не требует каких-либо расширений PHP и поддерживает работу от устаревших версий PHP 5.3 до текущих версий PHP 8+. Для этого проекта настоятельно рекомендуется использовать последнюю поддерживаемую версию PHP .
Вы также можете установить некоторые дополнительные компоненты. Список всех официальных компонентов можно найти в проекте Grapp.
Эта библиотека использует PHPUnit для своего обширного набора тестов. Чтобы запустить набор тестов, вам сначала необходимо клонировать этот репозиторий, а затем установить все зависимости через Composer:
composer install
Чтобы запустить набор тестов, перейдите в корень проекта и запустите:
vendor/bin/phpunit
Эта библиотека поставляется с обширным набором тестов, регулярно тестируется и используется в реальном мире . Несмотря на это, эта библиотека по-прежнему считается бета-версией, и ее API может быть изменен. В журнале изменений указана вся необходимая информация об обновлениях между выпусками.
Если у вас возникнут какие-либо проблемы, пожалуйста, не стесняйтесь напишите нам, отправьте отчет об ошибке или, что еще лучше, предоставьте нам запрос на исправление/вытягивание и/или модульное тестирование, чтобы воспроизвести вашу проблему.
Помимо непосредственной работы с кодом, также приветствуется любая дополнительная документация, дополнения к нашему readme или даже исправление простых опечаток.
Любые отзывы и/или вклад приветствуются!
Посетите #graphp на irc.freenode.net.
Этот проект выпущен под разрешительной лицензией MIT.
Знаете ли вы, что я предлагаю услуги по индивидуальной разработке и выставляю счета за спонсорство релизов и за пожертвования? Свяжитесь со мной (@clue) для получения подробной информации.