我有兴趣编写一个算法来找到具有两个目标的最短路径(例如时间和安全性)。 例如,在下图中,黑色数字是旅行时间,红色数字是用户遇到事件的概率。目标是找到具有最佳总成本的最佳路径。
总费用=时间+(此路线中发生事故的概率)*(事件的时间成本)
答案 0 :(得分:0)
首先,如果您的边缘权重可以通过卷积,缩放或其他导致形成新的有序半环的其他单位通过兼容单位进行组合,那么Dijkstra&#39 ; s算法将按照预期在半环境中工作。
第二,如果您的边权重根本不同,您可以选择 Pareto-optimal 路径。也就是说,一条路径,你不能改善一个标准而不会恶化另一个标准。通常,这是你能做的最好的事情。可能感兴趣的两篇论文是:
Climacao和Martins的A bicriterion shortest path algorithm
董和周A bicriterion Pareto-optimal path algorithm
在你的情况下,如果你对你的事件"事件进行了一些强烈的假设。 - 即它们是互斥的 - 然后您可以用time + expected time due to an incident
替换边缘权重。
这是因为如果X_e
是事件发生在边缘e
上的事件,那么P(X_e1 or X_e2) = P(X_e1) + P(X_e2) - P(X_e1 and X_e2) = P(X_e1) + P(X_e2)
是因为它们的共同排他性。然后,任何路径e1 ... eN
的预期成本都是cost(e1) + ... + cost(eN) + incident cost * P(X_e1 or ... or. X_eN) = cost(e1) + ... + cost(eN) + incident cost * (P(X_e1) + ... + P(X_eN)) = (cost(e1) + incident cost * P(X_e1)) + ... + (cost(eN) + incident cost * P(X_eN)) = E(cost of e1) + ... + E(cost of eN)
,这只是每条边的预期成本之和,彼此独立。