基于两个指标(距离,成本)的图表中的最佳(折衷)路径

时间:2016-06-08 23:02:25

标签: algorithm graph routing

从我的统计数据可以看出,我在这个论坛上很新,虽然我已经使用stackoverflow.com多年作为我的编程问题的答案来源。我祈祷你忽略了我可能犯下的任何小错误,并将你的想法分享给我下面的小问题。

我想知道是否有路由/路径查找算法能够找到随时间推移的最佳路径和可能路由的成本。理想情况下,我可以以最佳成本指定时间,成本或最佳时间的偏好。

我一直在使用Dijksta算法在定向和加权矩形网络上路由最短路径。所有节点通过方向边连接到它们的左,右,上和下以及它们的45°邻居。这意味着所有节点都有8条边,减去外边框的不存在的边。所有节点都可以访问,但可以增加度量(距离)以反映更高的成本。我可以在相同的节点上运行具有不同边缘列表的路径查找器,表示遍历它们时的成本(或距离)方面,从而找到最低成本或禁食路线。它给了我最短路线的距离度量(1或SQRT(2)为角边缘。)

现在我一直在想通过简单地将它们相乘并因此生成混合度量来混合距离和成本方面的方法。您如何看待这种方法,或者是一种使路由算法选择不同的“最佳”邻居以便在时间,成本或折衷方面找到最佳路径的方法。

感谢。

1 个答案:

答案 0 :(得分:1)

你可以在新的代数中使用任何已知的算法(Dijkstra,Floyd-Warshall) 将您的距离视为具有两个字段的结构:

struct Distance {
    int cost, distance;
}

现在您需要定义运算符<和运营商+。 如果您想以最佳成本获得最佳时间,则应使用:

bool operator<(Distance d1, Distance d2) {   
   if (d1.cost == d2.cost) 
       return d1.time1 < d2.time
   else 
       return d1.cost < d2.cost; 
}

或一些加权:

bool operator<(Distance d1, Distance d2) {   
   return wCost*d1.cost + wDistance*d1.distance < wCost*d2.cost + wDistance*d2.distance
}