多旅行商(物流配送)分析,配送中心为点坐标串。

命名空间:  SuperMap.Analyst.NetworkAnalyst
程序集:  SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll

语法

C#
public TransportationAnalystResult FindMTSPPath(
	TransportationAnalystParameter parameter,
	Point2Ds centerPoints,
	bool hasLeastTotalCost
)

参数

parameter
Type: SuperMap.Analyst.NetworkAnalyst..::.TransportationAnalystParameter
交通网络分析参数对象。
centerPoints
Type: SuperMap.Data..::.Point2Ds
配送中心点坐标串。
hasLeastTotalCost
Type: System..::.Boolean
配送模式是否为总花费最小方案。若为 true,则按照总花费最小的模式进行配送,此时可能会出现某些配送中心点配送的花费较多而其他的配送中心点的花费较少的情况。若为 false,则为局部最优,此方案会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。

返回值

分析结果对象。

备注

多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小,是物流配送所解决的问题。

配送中心点的指定方式有两种,一是通过坐标点集合指定,二是以网络结点 ID 数组指定。本方法中配送中心点要求以坐标点集合的方式给出(centerPoints 参数),因此相应的坐标点就是配送中心点。在另一重载方法 {@link #findMTSPPath(TransportationAnalystParameter, int[], boolean) findMTSPPath} 中,配送中心点通过结点 ID 数组来指定,此时,相应的网络结点就被看成是配送中心。

配送目的地则是在 TransportationAnalystParameter 类型的参数 parameter 中指定。通过 TransportationAnalystParameter 对象有两种方式可以指定配送目的地:

  1. 使用该对象的 Nodes 属性,以网络数据集中结点 ID 数组的形式指定配送目的地,因此分析过程中使用到的配送目的地就是相应的网络结点;
  2. 使用该对象的 Points 属性,以坐标点串的形式指定配送目的地,因此分析过程中使用到的配送目的地就是相应的坐标点。
Note:

配送中心点和配送目的地必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求配送目的地与配送中心点均为坐标点,即需要通过 TransportationAnalystParameter 对象的 Points 属性来设置配送目的地。

此外,通过 TransportationAnalystParameter 对象还可以指定最佳路径分析需要的其他信息,如障碍点(边),分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter 类。

多旅行商分析的结果将给出每个配送中心所负责的配送目的地,以及这些配送目的地的经过顺序,和相应的行走路线,从而使该配送中心的配送花费最少,或者使得所有的配送中心的总花费最小。并且,配送中心点在完成其所负责的配送目的地的配送任务后,最终会回到配送中心点。

应用实例:现有 50 个报刊零售地(配送目的地),和 4 个报刊供应地(配送中心),现寻求这 4 个供应地向报刊零售地发送报纸的最优路线,属物流配送问题。

下图为报刊配送的分析结果,其中红色大一点的圆点代表 4 个报刊供应地(配送中心),而其他小一点的圆点代表报刊零售地(配送目的地),每个配送中心的配送方案采用不同的颜色标示,包括它所负责的配送目的地、配送次序以及配送线路。

下图为上图中矩形框圈出的第 2 号配送中心的配送方案。蓝色的标有数字的小圆点是2号配送中心所负责的配送目的地(共有 18 个),2 号配送中心将按照配送目的地上标有数字的顺序依次发送报纸,即先送 1 号报刊零售地,再送 2 号报刊零售地,依次类推,并且沿着分析得出的蓝色线路完成配送,最终回到配送中心。

需要注意,由于物流配送的目的是寻找使配送总花费最小或每个配送中心的花费最小的方案,因此,分析结果中有可能某些物流配送中心点不参与配送。

示例

以下代码示范了如何进行多旅行商分析。

下面函数中操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集。

CopyC#
public void FindMTSPPath(DatasetVector networkDataset)
{
    //创建交通网络分析对象和交通网络分析参数对象并相应设置属性
    TransportationAnalyst transportationAnalyst = new TransportationAnalyst();
    TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting();
    transportationAnalystSetting.NetworkDataset = networkDataset;
    transportationAnalyst.AnalystSetting = transportationAnalystSetting;

    //加载网络模型
    transportationAnalyst.Load();

    //构建并设置交通网络分析参数对象
    TransportationAnalystParameter parameter = new TransportationAnalystParameter();
    parameter.Nodes = new Int32[] { 3, 10, 40 };
    parameter.IsPathGuidesReturn = true;
    parameter.IsStopIndexesReturn = true;
    parameter.WeightName="Length";

    //设置配送中心点坐标串
    Point2D[] point2D = { new Point2D(10, 20), new Point2D(30, 40), new Point2D(50, 60) };
    Point2Ds point2Ds = new Point2Ds(point2D);

    //进行多旅行商分析,获取多旅行商分析结果
    TransportationAnalystResult Result = transportationAnalyst.FindMTSPPath(parameter, point2Ds, false);
}

请参见