具有多个路线的节点之间的优化以价格和距离作为约束

时间:2013-04-23 05:30:40

标签: algorithm graph-algorithm mathematical-optimization

我正在设计一个Android应用程序,我正试图在这样的情况下找到最佳解决方案:

假设我们在源和目的地之间有几条不同的路线,并且每条路线都有不同的价格和距离。我们如何找到具有最佳距离和价格的最佳路线?

也就是说,如果我们在S和D之间有5条路线R1,R2,R3,R4,R5

distances    R2 30 miles ,        
             R3 40 miles ,                   
             R1 50 miles ,                   
             R5 60 miles ,                   
             R4 70 miles ,                   
             R6 80 miles                  

Price for  R1  $5 , 
           R6  $8 , 
           R3  $9 ,
           R5  $11 ,
           R2  $13 ,
           R4  $15   

S和D之间的最佳路线是什么?

我见过像Dijkstra这样的算法以及其他一些像旅行商问题的算法,但我无法将它们与此相关联。

这类问题是否有一些算法,公式或模型?

3 个答案:

答案 0 :(得分:2)

这可以通过A * / Dijkstra算法解决,该算法用于在给定节点,边缘及其成本列表的情况下,在图表上找到从A到B的最佳(最低总成本)路线。

A *使用贪婪的方法来找到最佳路径,而Dijkstra的算法找到从图中的一个点到其他任何位置的最佳路径。它们基本上是相同的算法,只是采用了不同的方式。

既然您对最低价格和最低距离感兴趣,那么您的“成本”应该是两个方面的数学公式(例如,使用燃料价格将价格转换为价格,然后将其与价格相结合),或者您应为每个参数运行两次算法。

http://en.wikipedia.org/wiki/A*_search_algorithm

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

答案 1 :(得分:1)

简短回答:可能没有一个最佳解决方案。

答案很长:如果有两个相互冲突的目标,例如价格和距离,而较短的路线是较贵的路线,那么实际上所有路线都是最佳的。它们被称为Pareto optimal。如果您无法确定这些冲突目标之间的先验可行权重,则必须推迟选择解决方案的选择。但是你可以使用帕累托优势原理来获得最小的帕累托最优解。

帕累托支配将客观空间中两点之间的可能状态分离为主导或非主导。当一种解决方案支配另一种解决方案时,在至少一个目标中更好,在其他目标中相同。当两个解决方案不是主导时,第一个在至少一个目标中更好,但第二个在另一个目标中更好。因此,如果您平等对待所有目标,则没有先验最优候选者,两者都是最优的。

例如,您经常会在询问路线时看到谷歌地图显示替代路线。这些路线距离较短,但开车时间较长。通常它首先选择最快的路线,因此它们的先验选择只是时间。

答案 2 :(得分:0)

您希望找到“最佳距离和最佳价格合并”,但最佳距离和最佳价格可以有两种不同的方式,例如(A,B,C,D),我们想找到从A到D的最佳方式

  1. A - > B,距离10,价格10
  2. B - > D,距离10,价格10
  3. A - > C,距离20,价格5
  4. C - > D,距离20,价格5
  5. 因此,您可以通过使用两个差异测量来获得两种不同的方法。

    但是通过使用一些数学,可以简化这个问题:

    cost = distance * p1 + price * p2;
    // p1 and p2 are some rate that can be learned,guessed .EG, p1 = 0.3, p2 = 0.7
    

    因此,使用dij或其他一些图算法来解决这个问题是合适的。