ggggino / warehouse-path
找到获取所有本地对象的最近路径
1.1.0
2019-02-25 00:46 UTC
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^6.0
- symfony/console: ^3.0|^4.0
This package is auto-updated.
Last update: 2024-09-26 11:38:55 UTC
README
找到获取所有本地对象的最近路径
开始使用
composer require ggggino/warehouse-path
从给定矩阵初始化
use GGGGino\WarehousePath\Warehouse; public static function getSampleData() { return array( array(array('weight' => 2), array('weight' => 1), array('weight' => 100), array('weight' => 1), array('weight' => 2), array('weight' => 1)), array(array('weight' => 2), array('weight' => 1), array('weight' => 100), array('weight' => 1), array('weight' => 2), array('weight' => 1)), array(array('weight' => 2), array('weight' => 1), array('weight' => 100), array('weight' => 1), array('weight' => 2), array('weight' => 1)), array(array('weight' => 2), array('weight' => 2), array('weight' => 2), array('weight' => 2), array('weight' => 2), array('weight' => 1)) ); } /** @var Warehouse $warehouse */ $warehouse = Warehouse::createFromMatrix(self::getSampleData());
从给定树初始化
use GGGGino\WarehousePath\Warehouse; $loc1 = new Location('L1'); $loc2 = new Location('L2'); $loc3 = new Location('L3'); $corridor1 = new Location('C1'); $loc1->setBottomRef($loc2); $loc1->setRightRef($loc3); $loc3->setBottomRef($loc3); $arrayPlaces = array($loc1, $loc2, $loc3, $corridor1); /** @var Warehouse $warehouse */ $warehouse = Warehouse::createFromTree($arrayPlaces);
从JSON初始化
use GGGGino\WarehousePath\Warehouse; /** @var Warehouse $warehouse */ $warehouse = Warehouse::createFromJson(getcwd() . "/resources/simpleWarehouse.json")
初始化详情
// Instantiate a place collector that contain the type of available places $placesCollector = new PlacesCollector(); // optionally add the baseplace types (Location, Corridor, Wall) $placesCollector->addBasePlaceTypes(); // Istantiate the Parser to prepare the places in an array $wm = new MatrixParser($param, $placesCollector); // Istantiate a customizable Breadcrumb buider $breadcrumbBuilder = new BreadthFirstBreadcrumb($placesCollector); $instance = new Warehouse($placesCollector, $wm, $breadcrumbBuilder); $instance->setPlaces($wm->parse());
从起点获取到每个其他位置的距离
/** @var Place $nodeStart */ $nodeStart = $calculatedArray[4]; $warehouse->getPath($nodeStart);
获取邻近度矩阵
对数组中传递的每个位置调用Warehouse::getPath
/** @var Place[] $arrayNodes array of the places to touch */ $arrayNodes = [...] $matrix = $warehouse->getMultiplePath($arrayNodes);
最佳路径
根据邻近度矩阵计算访问每个位置的最佳路径
/** @var Place[] $arrayNodes array of the places to touch */ $arrayNodes = [...] $arrayNodeSorted = $warehouse->calculate($arrayNodes, $matrix);
使用此函数,您可以获取访问仓库/矩阵中每个位置的最佳路径。
地点
地点是计算从A点到B点的最佳路径的主要因素。
仓库可以看作是一个地点矩阵,每个项目都有自己的重量。据此,程序可以创建最佳路径
Lx = 位置 - 重量1
Wx = 墙 - 重量100
Cx = 走廊 - 重量2
假设您从位置"L1"开始,到达"L7"的最佳路径将是
L1 -> L2 -> L3 -> C1 -> L6 -> L7
因此,距离,将路径中的所有重量相加
1 + 1 + 1 + 2 + 1 = 6
这个库从以下三个地点开始
您可以添加您想要的任何类型的地点。
面包屑生成器
面包屑生成器旨在从所有地点的数组中创建一个矩阵。这个矩阵将被传递给计算器,计算正确的顺序,即访问所有地点的最小成本路径。
广度优先搜索
使用此方法,我通过扩展区域并记住每一步的先前状态来映射仓库。这样,我可以实现一个仓库,每个地点都知道到达特定点的最短路径
计算器
计算器是选择访问列表中每个位置的最佳顺序的方法。目前只有一种计算类型可用。
快速计算器
在由每个位置之间的距离构建的矩阵中,我为每个位置选择最近的地点。