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 );
どの都市 (Vertex) にローマへの道 (つまり、エッジが向いている) があるかを見てみましょう。
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 までの複数のエッジ (別名平行エッジ) もサポートされており、効果的にマルチグラフ (別名擬似グラフ) を形成します。もちろん、それらの任意の組み合わせもサポートされます。多くの作成者がこれらの中心概念を区別しようとしますが、このライブラリはグラフに人為的な制限や仮定を課さないように努めています。
このライブラリは、グラフ、その頂点、エッジ、および属性を操作するためのコア データ構造を提供します。
一般に必要な機能を提供するために、これらの構造の上に構築されたいくつかの公式コンポーネントがあります。このアーキテクチャにより、これらのコンポーネントを独立してオンデマンドでのみ使用できるようになります。
以下は、いくつかの強調表示されたコンポーネントのリストです。すべての公式コンポーネントのリストは、graphp プロジェクトにあります。
このライブラリは、グラフ イメージの視覚化をサポートするために構築されており、グラフ イメージを Web ページに組み込み、CLI アプリケーション内からイメージを開き、PNG、JPEG、または SVG ファイル形式 (特に) としてエクスポートできます。グラフの描画はそれ自体が複雑な領域であるため、グラフの実際のレイアウトは優れた GraphViz "グラフ視覚化ソフトウェア" に任せられ、私たちは GraphViz とのインターフェースに便利な API をいくつか提供するだけです。
詳細については、graphp/graphviz を参照してください。
グラフの描画以外に、グラフを使って行う最も一般的なことの 1 つは、一般的なグラフの問題を解決するためのアルゴリズムを実行することです。したがって、このライブラリは、一般的に使用される多くのグラフ アルゴリズムの実装の基礎として使用されています。
詳細については、グラフ/アルゴリズムを参照してください。
このライブラリをインストールする推奨方法は、Composer を使用することです。作曲家は初めてですか?
このプロジェクトがリリースされると、SemVer に続くことになります。現時点では、これにより最新の開発バージョンがインストールされます。
composer require graphp/graph:^1@dev
バージョンアップの詳細については、CHANGELOG も参照してください。
このプロジェクトは、あらゆるプラットフォームで実行することを目的としているため、PHP 拡張機能は必要なく、従来の PHP 5.3 から現在の PHP 8+ での実行をサポートします。このプロジェクトでは、サポートされている最新の PHP バージョンを使用することを強くお勧めします。
追加コンポーネントのいくつかをインストールすることもできます。すべての公式コンポーネントのリストは、graphp プロジェクトにあります。
このライブラリは、広範なテスト スイートに PHPUnit を使用します。テスト スイートを実行するには、まずこのリポジトリのクローンを作成し、次に Composer を通じてすべての依存関係をインストールする必要があります。
composer install
テスト スイートを実行するには、プロジェクト ルートに移動して次を実行します。
vendor/bin/phpunit
このライブラリには広範なテスト スイートが付属しており、現実の世界で定期的にテストおよび使用されています。それにもかかわらず、このライブラリはまだベータ ソフトウェアとみなされており、その API は変更される可能性があります。変更ログには、リリース間の更新に関するすべての関連情報がリストされます。
何か問題が発生した場合は、遠慮なくご連絡いただくか、バグレポートを提出してください。あるいは、問題を再現するためのパッチ/プルリクエストや単体テストを提供していただくこともできます。
コードを直接操作するだけでなく、追加のドキュメント、Readme への追加、または単純なタイプミスの修正も同様に歓迎されます。
フィードバックや貢献は大歓迎です。
irc.freenode.net の #graphp をチェックしてください。
このプロジェクトは寛容な MIT ライセンスの下でリリースされています。
私がカスタム開発サービスを提供し、リリースのスポンサーシップや貢献に対する請求書の発行を行っていることをご存知ですか?詳細については、私 (@clue) までお問い合わせください。