{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os, sys, copy, argparse\n",
"import json\n",
"import sumolib, traci\n",
"from tqdm import tqdm\n",
"from datetime import datetime\n",
"path_root = os.path.dirname(os.path.dirname(os.path.abspath('.')))\n",
"path_scr = os.path.join(path_root, 'scripts')\n",
"sys.path.append(path_scr)\n",
"from preprocess_daily import DailyPreprocessor\n",
"from generate_signals import SignalGenerator"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"self = DailyPreprocessor(config_name='revised')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-5. 테이블을 표준화했습니다.\n",
"1-6. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n"
]
}
],
"source": [
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()\n",
"self.make_match6()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"self.make_matching()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phas_A phas_B move_A move_B\n",
"0 175 1 1 8 4\n",
"1 175 2 2 7 3\n",
"2 175 3 3 6 1\n",
"3 175 3 4 6 2\n",
"4 175 4 4 5 2"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 모든 inter_no(교차로번호)에 대한 A, B링 현시별 이동류정보\n",
"self.match1.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
"
\n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no\n",
"0 175 1 A 8\n",
"0 175 1 B 4\n",
"1 175 2 A 7\n",
"1 175 2 B 3\n",
"2 175 3 A 6"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match1을 계층화한 테이블\n",
"self.match2.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire\n",
"0 175 1 A 8 남 북\n",
"1 175 1 B 4 북 남\n",
"2 175 2 A 7 북 동\n",
"3 175 2 B 3 남 서\n",
"4 175 3 A 6 동 서"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match2의 각 이동류번호에 진입방향, 진출방향을 매칭시킨 테이블\n",
"self.match3.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_angle | \n",
" out_angle | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 271 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 092 | \n",
" 270 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire inc_angle out_angle\n",
"0 175 1 A 8 남 북 179 004\n",
"1 175 1 B 4 북 남 003 176\n",
"2 175 2 A 7 북 동 001 095\n",
"3 175 2 B 3 남 서 179 271\n",
"4 175 3 A 6 동 서 092 270"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match3의 각 이동류번호에 진입/진출 방위각을 매칭시킨 테이블\n",
"self.match4.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" node_id | \n",
" node_type | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
" i0 | \n",
" normal | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 271 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" normal | \n",
" left | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 092 | \n",
" 270 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
"0 175 1 A 8 남 북 179 \n",
"1 175 1 B 4 북 남 003 \n",
"2 175 2 A 7 북 동 001 \n",
"3 175 2 B 3 남 서 179 \n",
"4 175 3 A 6 동 서 092 \n",
"\n",
" out_angle inc_edge_id out_edge_id node_id node_type turn_type \n",
"0 004 -571542797_02 571500487_01 i0 normal straight \n",
"1 176 -571500487_01 571542797_02 i0 normal straight \n",
"2 095 -571500487_01 571545870_01 i0 normal left \n",
"3 271 -571542797_02 571510153_01 i0 normal left \n",
"4 270 571545870_02 571510153_01 i0 normal straight "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match4의 각 행에 진입엣지id, 진출엣지id 노드id 추가한 테이블\n",
"self.match5.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" node_id | \n",
" node_type | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
" i0 | \n",
" normal | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 271 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" normal | \n",
" left | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 092 | \n",
" 270 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" normal | \n",
" straight | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
"0 175 1 A 8 남 북 179 \n",
"1 175 1 B 4 북 남 003 \n",
"2 175 2 A 7 북 동 001 \n",
"3 175 2 B 3 남 서 179 \n",
"4 175 3 A 6 동 서 092 \n",
"\n",
" out_angle inc_edge_id out_edge_id node_id node_type turn_type \n",
"0 004 -571542797_02 571500487_01 i0 normal straight \n",
"1 176 -571500487_01 571542797_02 i0 normal straight \n",
"2 095 -571500487_01 571545870_01 i0 normal left \n",
"3 271 -571542797_02 571510153_01 i0 normal left \n",
"4 270 571545870_02 571510153_01 i0 normal straight "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match5에서 부교차로(유턴교차로, 연동교차로)에 대한 행들을 추가함\n",
"self.match6.head()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" i0 | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 571545870_02 | \n",
" 571542797_02 | \n",
" left | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" i0 | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 571510153_02 | \n",
" 571545870_01 | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" i0 | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" i0 | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" straight | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" i0 | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 571510153_02 | \n",
" 571500487_01 | \n",
" left | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
"0 175 i0 1 동 남 571545870_02 571542797_02 \n",
"1 175 i0 2 서 동 571510153_02 571545870_01 \n",
"2 175 i0 3 남 서 -571542797_02 571510153_01 \n",
"3 175 i0 4 북 남 -571500487_01 571542797_02 \n",
"4 175 i0 5 서 북 571510153_02 571500487_01 \n",
"\n",
" turn_type \n",
"0 left \n",
"1 straight \n",
"2 left \n",
"3 straight \n",
"4 left "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 각 교차로에 대하여, 가능한 모든 이동류 (1~16)에 대한 진입·진출엣지ID를 지정한 테이블\n",
"self.matching.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2-2. 초기화 신호가 지정되었습니다. (우회전 : g)\n",
"2-3. 유턴 인덱스 / 비보호좌회전 인덱스를 지정했습니다.\n",
"2-4. 직진 및 좌회전(G)을 배정했습니다.\n"
]
}
],
"source": [
"self.initialize_state()\n",
"self.assign_indices()\n",
"self.assign_signals()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" state | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" i0 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
" grrrgrrrgGGGGrgrr | \n",
" straight | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" i0 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" gGGrgrrrgrrrrrgrr | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" i0 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
" grrGgrrrgrrrrrgrr | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" i0 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" grrrgrrrgrrrrGgrr | \n",
" left | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" i0 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
" grrrgGGrgrrrrrgrr | \n",
" straight | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id phase_no ring_type move_no inc_edge_id out_edge_id \\\n",
"0 175 i0 1 A 8 -571542797_02 571500487_01 \n",
"1 175 i0 1 B 4 -571500487_01 571542797_02 \n",
"2 175 i0 2 A 7 -571500487_01 571545870_01 \n",
"3 175 i0 2 B 3 -571542797_02 571510153_01 \n",
"4 175 i0 3 A 6 571545870_02 571510153_01 \n",
"\n",
" state turn_type \n",
"0 grrrgrrrgGGGGrgrr straight \n",
"1 gGGrgrrrgrrrrrgrr straight \n",
"2 grrGgrrrgrrrrrgrr left \n",
"3 grrrgrrrgrrrrGgrr left \n",
"4 grrrgGGrgrrrrrgrr straight "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 신호배정\n",
"self.match6.head()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" state | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" i0 | \n",
" 1 | \n",
" 571545870_02 | \n",
" 571542797_02 | \n",
" grrrgrrGgrrrrrgrr | \n",
" left | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" i0 | \n",
" 2 | \n",
" 571510153_02 | \n",
" 571545870_01 | \n",
" grrrgrrrgrrrrrgGr | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" i0 | \n",
" 3 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" grrrgrrrgrrrrGgrr | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" i0 | \n",
" 4 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" gGGrgrrrgrrrrrgrr | \n",
" straight | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" i0 | \n",
" 5 | \n",
" 571510153_02 | \n",
" 571500487_01 | \n",
" grrrgrrrgrrrrrgrG | \n",
" left | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_edge_id out_edge_id state \\\n",
"0 175 i0 1 571545870_02 571542797_02 grrrgrrGgrrrrrgrr \n",
"1 175 i0 2 571510153_02 571545870_01 grrrgrrrgrrrrrgGr \n",
"2 175 i0 3 -571542797_02 571510153_01 grrrgrrrgrrrrGgrr \n",
"3 175 i0 4 -571500487_01 571542797_02 gGGrgrrrgrrrrrgrr \n",
"4 175 i0 5 571510153_02 571500487_01 grrrgrrrgrrrrrgrG \n",
"\n",
" turn_type \n",
"0 left \n",
"1 straight \n",
"2 left \n",
"3 straight \n",
"4 left "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 신호배정\n",
"self.matching.head()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "siggen",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}