교통은 어려워~~~

Domain knowledge를 쌓아가는 것이 나의 숙명

SUMO 이야기

[SUMO 이야기] #3. SUMO 튜토리얼: 라우트(route) 파일 만들기

교통앵무 2023. 12. 15. 00:11

이어서 작성이다.

2. TAZ 지정하기

수요는 다양한 방법으로 만들 수 있지만, 네트워크와 마찬가지로 나는 별도의 군더더기 없이 직접 route file을 만드는 편이다. 또한 수요를 발생시키는 방법도 매우 다양하다. Origin-Destination pair를 직접 지정하고 flow 또는 vehicle을 발생시키는 방법과, 경로를 미리 만들어서 Traci를 통해 차량 단위로 생성을 하는 방법 등이 있다. 여기서는 일반적인 route file을 만드는 방법을 소개하겠다.

 

먼저 Origin, Destination으로 지정할 TAZ를 정의한다. 본 네트워크는 Zone이라고 불릴 정도로 그렇게 크지 않기 때문에, 그냥 edge 하나를 Zone으로 지정할 것이다. 아무튼 netedit을 다시 켜야한다.

 

네트워크를 불러온 후 상단의 TAZ mode를 활성화시킨다.

 

 

좌측의 Start drawing을 누르면 파란색 커서가 생기는데, 이 커서로 만들고 싶은 Zone을 정의할 수 있다. 시점과 종점을 일치시킨 후 Stop drwaing을 누르면 그린 도형이 Zone으로 확정된다.

 

이런식으로 원하는 Zone들을 만든다. 그리고 상단의 돋보기 버튼을 활성화하고 파란색 Zone의 경계를 누르면 아래와 같이 TAZ의 id를 확인할 수 있다. 이 id를 이용해서 수요를 발생시킬 것이기 때문에 반드시 메모해두자.

 

특정 TAZ를 Inspect mode에서 살펴보면 왼쪽 탭에서 id를 확인할 수 있다.

 

자 이제 TAZ 설정이 끝났으면 additional file(add.xml)을 저장한다. 이 additional file은 TAZ 뿐만아니라 traffic signal, detector 등 다양한 부속에 대한 정보를 담고 있다.

 

 

 

3. 수요(rou.xml) 파일 만들기

이제 수요를 발생시킬 route file을 작성해야 한다. 앞에서 언급했다시피 직접 만드는게 훨씬 직관적이고 traci로 다루기도 쉽다. 예를 들어, 다음과 같이 xml 파일을 만들어보자.

<?xml version="1.0" ?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
    <flow id="F1" begin="0" end="300" fromTaz="taz_0" toTaz="taz_1" number="10" departLane="random"/>
    <flow id="F2" begin="0" end="300" fromTaz="taz_2" toTaz="taz_3" number="10" departLane="random"/>
    <flow id="F3" begin="0" end="300" fromTaz="taz_4" toTaz="taz_5" number="10" departLane="random"/>
</routes>

 

여기서 flow에 대한 id를 지정해주고, begin과 end에 수요 발생 시작 및 종료 시각을 지정한다. 단위는 초(sec)이다. fromTaz는 Origin이 될 TAZ의 id를 적어주고, toTaz에는 Destination이 될 TAZ의 id를 적어준다. number는 발생시킬 차량의 대수이며, departLane은 random으로 설정한다.

 

사실, 교통존을 설정하는 이유는 "지정된 영역" 간의 교통 수요를 정의하기 위함인데, 이것이 아니라 노드별로 수요를 만들고 싶다면 교통존을 설정할 필요 없이 노드의 id만으로도 route 파일을 만드는 것이 가능하다.

<?xml version="1.0" ?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
  <flow id="F0" begin="0" end="300" fromJunction="N1" toJunction="N2" probability="0.01" type="commonType"/>
  <flow id="F1" begin="0" end="300" fromJunction="N1" toJunction="N3" probability="0.01" type="commonType"/>
  <flow id="F2" begin="0" end="300" fromJunction="N1" toJunction="N4" probability="0.01" type="commonType"/>
</routes>

 

위 코드의 경우 number가 아닌 probability를 사용했는데, 이는 매 timestep마다 1%의 확률로 포아송 분포에 따라 차량을 생성한다는 의미이다. 물론 number를 사용할 수도 있다. 또한, toTaz가 toJunction으로 바뀌었다는 점에 유의하자. 이것은 노드 간 통행을 구현하기 위한 코드이다.

 

 

아무튼, route 파일을 만들게 되면 이제 시뮬레이션을 실행하기 위한 파일들은 모두 준비가 된 것이다. 다음에는 이 파일들을 이용해서 실질적으로 SUMO 시뮬레이션을 실행해보는 방법을 소개할 예정이다.

 

다음 편에 계속...