![](/img/trans.png)
[英]Apoc Dijkstra traversing in both directions while computing shortest path
[英]traversing based on path weights and node properties dijkstra
是否可以通過檢查節點上的某些屬性來找到節點A和B之間的成本最低的路徑?
例如,我想找到從A到B的最短巴士路線,而鏈接的權重就是距離。 因此,該路徑不僅應具有最低成本,而且路徑上的節點還應具有公交車站/車站。
因此,返回的路徑是所有節點都為公共汽車站的成本最低的路徑(例如,屬性bus_stop = yes)。
TraversalDescription提供評估程序,可以在其中檢查節點屬性。 Dijkstra有可能類似嗎?
使用Neo4j的graphalgo
軟件包時,您需要為Dijkstra算法提供自定義CostEvaluator
。 而不是僅使用旅行時間(又稱“關系”屬性),您應該返回旅行時間的總和(“關系”屬性)加上在公交車站的等待時間(“節點”屬性):
class BusCostEvaluator implements CostEvaluator<Float> {
public Float getCost(Relationship r, Direction d) {
return (Float)r.getStartNode().getProperty("waitTime", 0f) +
(Float)r.getProperty("travelTime", 0f)
}
}
請嘗試以下查詢。 假定所有鏈接都具有屬性權重,並對路徑權重和長度組合求和以對結果進行排序。 首先,它僅過濾所有節點都具有bus_stop的路徑,是
MATCH p=a-[r*]->b
WHERE all(x1 in nodes(p) where x1.bus_stop = 'yes')
WITH extract(link IN r| link.weight) AS wts, length(p) AS len
RETURN wts, reduce(sum=0, x IN wts| sum+x) AS totalwt, len
order by totalwt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.