ggggino/warehouse-path

找到获取所有本地对象的最近路径

1.1.0 2019-02-25 00:46 UTC

This package is auto-updated.

Last update: 2024-09-26 11:38:55 UTC


README

找到获取所有本地对象的最近路径

Build Status Scrutinizer Code Quality

开始使用

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初始化

查看这里这里 以获取用于构建仓库的正确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

这个库从以下三个地点开始

您可以添加您想要的任何类型的地点。

阅读有关地点的完整文档

面包屑生成器

面包屑生成器旨在从所有地点的数组中创建一个矩阵。这个矩阵将被传递给计算器,计算正确的顺序,即访问所有地点的最小成本路径。

广度优先搜索

使用此方法,我通过扩展区域并记住每一步的先前状态来映射仓库。这样,我可以实现一个仓库,每个地点都知道到达特定点的最短路径

阅读有关面包屑的完整文档

计算器

计算器是选择访问列表中每个位置的最佳顺序的方法。目前只有一种计算类型可用。

快速计算器

在由每个位置之间的距离构建的矩阵中,我为每个位置选择最近的地点。

阅读有关计算器的完整文档