旅行商分析。

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

语法

C#
public TransportationAnalystResult FindTSPPath(
	TransportationAnalystParameter parameter,
	bool isEndNodeAssigned
)

参数

parameter
Type: SuperMap.Analyst.NetworkAnalyst..::.TransportationAnalystParameter
交通网络分析参数对象。
isEndNodeAssigned
Type: System..::.Boolean
是否指定终点。指定为 true 表示指定终点,此时给定的经过点集合中最后一个点即为终点;否则不指定终点。

返回值

分析结果对象。

备注

旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。

旅行商分析的经过点是在 TransportationAnalystParameter 类型的参数 parameter 中指定的。通过 TransportationAnalystParameter 对象有两种方式可以指定经过点:

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

需要强调的是,此方法默认将给定的经过点集合中的第一个点(结点或坐标点)作为旅行商的起点。此外,用户还可以指定终点(对应方法中的 isEndNodeAssigned 参数)。如果选择指定终点,则给定的经过点集合的最后一个点为终点,此时旅行商从第一个给定点出发,到指定的终点结束,而其他经过点的访问次序由旅行商自己决定。

另外,如果选择指定终点,终点可以与起点相同,即经过点集合中的最后一个点与第一个点相同。此时,旅行商分析的结果是一条闭合路径,即从起点出发,最终回到该点。

注意:使用该方法时,如果选择指定终点(对应方法中的 hasLeastEdgeCount 参数),指定的经过点集合的第一个点与最后一点可以相同,也可以不同;其他点不允许有相同的点,否则会分析失败;当不指定终点时,不允许有相同的点,如果有相同点,分析会失败。

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

需要注意,网络分析中的最佳路径分析(FindPath 方法)与旅行商分析类似,都是在网络中寻找遍历所有经过点的花费最少的路径。但二者具有明显的区别,即在遍历所有经过点时,二者对访问经过点的顺序处理有所不同:

  • 最佳路径分析:必须按照给定的经过点的次序访问所有点;
  • 旅行商分析:需要确定最优次序来访问所有点,而并不一定按照指定的经过点的次序。

示例

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

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

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

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

    //构建并设置一个交通网络分析参数对象
    TransportationAnalystParameter Parameter = new TransportationAnalystParameter();
    Parameter.Nodes = new Int32[] { 2772, 3114, 2878 };
    Parameter.IsNodesReturn = true;

    //进行旅行商分析
    TransportationAnalystResult Result = transportationAnalyst.FindTSPPath(Parameter, false);

    //循环输出途径结点的 ID
    for (Int32 i = 0; i < Result.Nodes.Length; i++)
    {
        for (Int32 j = i; j < Result.Nodes[i].Length; j++)
        {
            Console.WriteLine(Result.Nodes[i][j].ToString());
        }
    }
}

版本信息

SuperMap iObjects .NET


请参见