python中关键路径的变化

时间:2014-04-01 11:33:12

标签: algorithm sorting python-2.7 pygraph

我正在寻找一种方法来确定在地图上连接不同坐标的成本最低的路径。这些坐标代表管道网络和一个供应商的消费者

我首先在堆栈溢出的GIS部分上搜索,以进行成本最低的路径分析,但这不是我需要的(我没有找到一个允许不仅仅有一个起点和终点的算法)。我有一个算法确定我所有不同坐标之间的最低成本路径,但现在我想对这些数据进行一种关键路径分析。但是,必须在最终解决方案中解决所有坐标问题,并且除了需要成为第一个坐标的供应商之外,哪个坐标不重要。

有人可以帮我吗?

提前致谢

示例

好的,主要问题是:

我将有一个像这样的矩阵:

  A  B  C  D

A x  3  4  2

B 3  x  7  5

C 4  7  x  9

D 2  5  9  x

在此矩阵中,A,B,C和D表示地图上的位置(仅通过X和Y坐标),数字是在A和B之间建立连接的价格(例如:这些成本基于我会拥有的数据)。我的目标是以最便宜的方式将所有这些点连接起来。

要做到这一点,我正在考虑关键路径分析(您可能从业务类中了解到),但显然这不起作用,因为这些算法不会写入包含所有位置的路径。但我需要连接所有这些(4)节点,但只是以最便宜的方式。

例如:当我以A为起点时,我需要这样做:

建立连接A-D-B-C(这将花费2 + 5 + 7 = 14)

而不是

ABCD = 19

ACBD = 16

ADCB = 18

ABDC = 17

ACDB = 18

1 个答案:

答案 0 :(得分:1)

你所描述的问题是邮递员的问题,而不知道哪个是起点。根据您的问题,我认为您的图表不是定向的,因此从A到B的距离与从B到A的距离一致。在这种情况下,您可以通过迭代所有点的组合并计算总距离来解决您的问题(即路径中距离的总和)。最小值是问题的解决方案。

Here您可以阅读有关生成组合的更多信息。但是不要提前生成它们,这对内存管理不利,只需计算下一个组合,测量其总距离并将其与最小值进行比较。如果它低于最小值,则将最小距离修改为新的最小值,并将组合存储到一个数组中,该数组将包含最后的最佳路径。如果您的图是无向的并且所有节点对都有一个顶点,那么这就是答案的结尾。

如果我错了并且您的图表是定向的,那么它不足以生成所有组合,您将需要生成所有变体。

注意,如果由于某种原因,可能是节点对不一定有顶点的情况。在这种情况下,您需要生成所有有效变体,其中有效意味着彼此相邻的两个节点具有顶点。