Traffic Simulation/SUMO

[Routing] SUMO + TraCI + Qlearning Routing

rrojin 2022. 2. 14. 13:54

Paper

https://ieeexplore.ieee.org/document/8622980

 

Reinforcement Learning for Vehicle Route Optimization in SUMO

Urban traffic control becomes a major topic for urban development lately as the growing number of vehicles in the transportation network. Recent advances in reinforcement learning methodologies have shown highly potential results in solving complex traffic

ieeexplore.ieee.org

 

Environment

netedit

 

Scenario

E6, E2, E13이 혼잡 도로라고 가정하고, 이 도로를 피해서 노드 Z부터 노드 O까지 이동시키는 task이다. 

edge당 2개의 도로가 있고 구분해서 표시하기 위해 좌측, 위로 이동할 때는 -를 붙여 표기한다. (ex -E0) 

따라서 그림에서 표시한 예시 Good Route는 E19 -> E0 -> E10 -> E11 -> E12 -> -E18 -> E3 ->E4 이다. 

 

Q-learning

Qlearning을 적용하여 q-table에 기반하여 action을 정하고 다음 edge를 계산한다.(decaying epsiolon greedy)

만약에 새롭게 계산된 nextedge가 막힌 곳(갈 수 없는 곳)이라면, 그 action에대해서 negative reard를 추가로 부여한다.

 

이동 가능한 next edge를 구하면 환경에서는 current edge를 before edge로 저장해두고, next edge에 대한 reward계산을 한다. 시나리오에서 언급하였듯이 E6,E2,E13이 혼잡 도로이기 때문에, 혼잡 도로로 이동하는 action에 대해 negative reward를 부여한다. 또한, 그림상에서 -E19로 이동해도 시뮬레이션이 끝나게 되는데 이는 잘못된 루트이기 때문에 동일하게 negative reward를 부여했다. (negative reward = -100 for E5->E6, E1->E2, E15->E2, E16->E2, E18->E13, E12->E13, -E0->-E19)

반면, 도착지인 E20으로 이동할 때는 positive reward를 부여한다. (positive reward = 500)

 

그리고 next edge를 해당 자동차의 다음 path로 설정한다. sumo simulation에서 step을 수행하면서 이동중인 자동차의 현재 edge를 구하고, 현재 edge와 미리 저장해둔 before edge가 달라지게되면, 또 다시 다음 path를 정해야한다.

 

이때, agent는 미리 가지고 있던 정보 curedge, action와 환경에서 반환된 reward와 done여부를 사용하여 q-table을 update한다.

 

 

 

Result

연속적인 성공 횟수를 시각화 한 것이다.

여기서 성공이란, 혼잡 도로 E6,E2,E13를 지나지 않고, 목적지(노드O)까지 이동한 루트를 의미한다.

episode횟수를 20,30,40,50으로 늘려가면서 실험하였다.

평균적으로 episode를 10번 이상 진행한 뒤부터 좋은 성능을 보였다. 

 

Code

 

https://github.com/Rrojin11/SUMO/tree/master/QLearning

 

GitHub - Rrojin11/SUMO: sumo + RL

sumo + RL. Contribute to Rrojin11/SUMO development by creating an account on GitHub.

github.com

>>  python .\QLearning\qlnrun.py --nogui -N 20  

-N : episodenum

--nogui : without sumo-gui