我正在设计一个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这样的算法以及其他一些像旅行商问题的算法,但我无法将它们与此相关联。
这类问题是否有一些算法,公式或模型?
答案 0 :(得分:2)
这可以通过A * / Dijkstra算法解决,该算法用于在给定节点,边缘及其成本列表的情况下,在图表上找到从A到B的最佳(最低总成本)路线。
A *使用贪婪的方法来找到最佳路径,而Dijkstra的算法找到从图中的一个点到其他任何位置的最佳路径。它们基本上是相同的算法,只是采用了不同的方式。
既然您对最低价格和最低距离感兴趣,那么您的“成本”应该是两个方面的数学公式(例如,使用燃料价格将价格转换为价格,然后将其与价格相结合),或者您应为每个参数运行两次算法。
答案 1 :(得分:1)
简短回答:可能没有一个最佳解决方案。
答案很长:如果有两个相互冲突的目标,例如价格和距离,而较短的路线是较贵的路线,那么实际上所有路线都是最佳的。它们被称为Pareto optimal。如果您无法确定这些冲突目标之间的先验可行权重,则必须推迟选择解决方案的选择。但是你可以使用帕累托优势原理来获得最小的帕累托最优解。
帕累托支配将客观空间中两点之间的可能状态分离为主导或非主导。当一种解决方案支配另一种解决方案时,在至少一个目标中更好,在其他目标中相同。当两个解决方案不是主导时,第一个在至少一个目标中更好,但第二个在另一个目标中更好。因此,如果您平等对待所有目标,则没有先验最优候选者,两者都是最优的。
例如,您经常会在询问路线时看到谷歌地图显示替代路线。这些路线距离较短,但开车时间较长。通常它首先选择最快的路线,因此它们的先验选择只是时间。
答案 2 :(得分:0)
您希望找到“最佳距离和最佳价格合并”,但最佳距离和最佳价格可以有两种不同的方式,例如(A,B,C,D),我们想找到从A到D的最佳方式
因此,您可以通过使用两个差异测量来获得两种不同的方法。
但是通过使用一些数学,可以简化这个问题:
cost = distance * p1 + price * p2;
// p1 and p2 are some rate that can be learned,guessed .EG, p1 = 0.3, p2 = 0.7
因此,使用dij或其他一些图算法来解决这个问题是合适的。