2016-06-07 16 views
0

MATSim API를 사용하여 교통 시뮬레이션을위한 링크의 가중치에 따라 경로를 계산하는 데 관심이 있습니다. 모든 링크에는 안전 색인 속성이 있으며 계산 된 경로는 가장 안전한 경로를 나타냅니다. Dijkstra 라우팅 알고리즘은 최단 경로를 계산합니다. 알고리즘이 길이 대신 안전 색인을 고려해야한다고 지정할 수만 있다면 사용하는 것이 좋습니다. MATSim에서 어떻게 할 수 있는지, 그리고 어떻게 할 수 있는지는 잘 모르겠습니다. 또는 MATSim에서 구현 된 다른 라우팅 알고리즘이 더 적합 할 수 있습니다.MATSim에서 가장 안전한 경로 계산

감사합니다!

+0

그럼 ... 궁금한 점은 무엇입니까? – Gendarme

답변

1

자신의 TravelDisutility-Class를 구현할 수 있어야합니다. 인터페이스 org.matsim.core.router.util.TravelDisutility을 살펴보십시오. 무료 속도만을 고려한 구현은 org.matsim.core.router.costcalculators.FreespeedTravelTimeAndDisutility에서 찾을 수 있습니다. 당신은 이것으로 시작하여 getLinkTravelDisutility()이 스피드에 기반하지 않고 savety 인덱스에 대한 값을 반환하도록 할 수 있습니다. 값은 0보다 커야하며 더 큰 값보다 작은 값 (즉, 0에 가까움)이 선호됩니다.

안전 색인을 계산하는 방법을 모르겠지만 어떻게 든 링크의 길이로 정규화해야합니다. 그렇지 않으면 하나의 긴 링크가 모두 동일한 안전 값을 가질 수 있지만 일련의 짧은 링크보다 선호 될 수 있습니다.

구현이 완료되면 Guice를 사용하여 바인딩 할 수 있습니다. 이에 대한 예제는 org.matsim.run.InitRoutes 클래스에서 찾을 수 있습니다. 그런 다음 MATSim의 라우팅에 사용해야합니다.

+0

도움 주셔서 감사합니다. 나는 freespeed 값을 network.xml 파일에서 직접 안전 인덱스로 변경했다. 먼저 XY2Links.run 메서드를 실행하여 시작 지점과 대상 지점에 대한 명시된 링크가있는 새로운 계획 파일을 만들었습니다. InitRoutes.run 메소드를 실행 한 후. – DanaKazi

+0

@DanaKazi : 안전 색인의 속도를 잘못 사용하면 매우 위험합니다! 그것은 단지 경로를 계산할 때만 작동합니다. 시뮬레이션을 위해 동일한 네트워크를 사용하자마자, 시뮬레이션은 안전 인덱스를 속도 제한으로 사용하게되며 시뮬레이션의 트래픽은 매우 잘못 될 것입니다! – cello