GraPHP es la biblioteca matemática de gráficos/redes escrita en PHP.
Versión de desarrollo: esta rama contiene el código para la próxima versión 1.0. Para obtener el código de la versión estable actual 0.9, consulte la rama
0.9.x
La próxima versión 1.0 será el camino a seguir para este paquete. Sin embargo, seguiremos admitiendo activamente 0.9.x para aquellos que aún no tengan la última versión. Consulte también las instrucciones de instalación para obtener más detalles.
Tabla de contenido
Una vez instalado, inicialicemos un gráfico de muestra:
<?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 );
Veamos qué ciudad (Vertex) tiene un camino (es decir, un borde que apunta) a Roma:
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Esta biblioteca se basa en el concepto de teoría matemática de grafos (es decir, no es una biblioteca de gráficos para dibujar la gráfica de una función). En esencia, un gráfico es un conjunto de nodos con cualquier número de conexiones entre ellos. En teoría de grafos, los vértices (plural de vértice) son una representación abstracta de estos nodos , mientras que las conexiones se representan como aristas . Los bordes pueden ser no dirigidos ("bidireccionales") o dirigidos ("unidireccionales", también conocidos como di-bordes, arcos).
Dependiendo de cómo se construyan los bordes, todo el gráfico puede ser no dirigido, puede ser un gráfico dirigido (también conocido como dígrafo) o ser un gráfico mixto. También se permite que las aristas formen bucles (es decir, una arista desde el vértice A que apunta nuevamente al vértice A). Además, también se admiten múltiples aristas desde el vértice A al vértice B (también conocidos como bordes paralelos), formando efectivamente un multigrafo (también conocido como pseudografo). Y, por supuesto, también se admite cualquier combinación de los mismos. Si bien muchos autores intentan diferenciar entre estos conceptos básicos, esta biblioteca se esfuerza por no imponer limitaciones o suposiciones artificiales en sus gráficos.
Esta biblioteca proporciona las estructuras de datos centrales para trabajar con gráficos, sus vértices, aristas y atributos.
Hay varios componentes oficiales creados sobre estas estructuras para proporcionar la funcionalidad comúnmente necesaria. Esta arquitectura permite que estos componentes se utilicen de forma independiente y únicamente bajo demanda.
A continuación se muestra una lista de algunos componentes destacados. Puede encontrar una lista de todos los componentes oficiales en el proyecto Graphp.
Esta biblioteca está diseñada para admitir la visualización de imágenes gráficas, incluirlas en páginas web, abrir imágenes desde aplicaciones CLI y exportarlas como formatos de archivo PNG, JPEG o SVG (entre muchos otros). Debido a que el dibujo de gráficos es un área compleja en sí misma, el diseño real del gráfico se deja en manos del excelente "software de visualización de gráficos" GraphViz y simplemente proporcionamos algunas API convenientes para interactuar con GraphViz.
Consulte graphp/graphviz para obtener más detalles.
Además del dibujo de gráficos, una de las cosas más comunes que se pueden hacer con los gráficos es ejecutar algoritmos para resolver problemas gráficos comunes. Por lo tanto, esta biblioteca se utiliza como base para implementaciones de varios algoritmos gráficos de uso común:
Consulte gráfico/algoritmos para obtener más detalles.
La forma recomendada de instalar esta biblioteca es a través de Composer. ¿Nuevo en Compositor?
Una vez lanzado, este proyecto seguirá a SemVer. Por el momento, esto instalará la última versión de desarrollo:
composer require graphp/graph:^1@dev
Consulte también el CHANGELOG para obtener detalles sobre las actualizaciones de versiones.
Este proyecto pretende ejecutarse en cualquier plataforma y, por lo tanto, no requiere ninguna extensión de PHP y admite la ejecución desde PHP 5.3 heredado hasta PHP 8+ actual. Se recomienda encarecidamente utilizar la última versión de PHP compatible para este proyecto.
Es posible que también desee instalar algunos de los componentes adicionales. Puede encontrar una lista de todos los componentes oficiales en el proyecto Graphp.
Esta biblioteca utiliza PHPUnit para su extenso conjunto de pruebas. Para ejecutar el conjunto de pruebas, primero debe clonar este repositorio y luego instalar todas las dependencias a través de Composer:
composer install
Para ejecutar el conjunto de pruebas, vaya a la raíz del proyecto y ejecute:
vendor/bin/phpunit
Esta biblioteca viene con un amplio conjunto de pruebas y se prueba y utiliza periódicamente en el mundo real . A pesar de esto, esta biblioteca todavía se considera software beta y su API está sujeta a cambios. El registro de cambios enumera toda la información relevante para las actualizaciones entre versiones.
Si encuentra algún problema, no dude en escribirnos, presentar un informe de error o, mejor aún, proporcionarnos una solicitud de parche/extracción y/o una prueba unitaria para reproducir su problema.
Además de trabajar directamente con el código, también se agradece cualquier documentación adicional, adiciones a nuestro archivo Léame o incluso corregir errores tipográficos simples.
¡Cualquier comentario y/o contribución es bienvenido!
Consulte #graphp en irc.freenode.net.
Este proyecto se publica bajo la licencia permisiva del MIT.
¿Sabías que ofrezco servicios de desarrollo personalizado y emisión de facturas por patrocinio de lanzamientos y por contribuciones? Contáctame (@clue) para más detalles.