diff --git a/Analysis/0411_unp-left_p-right-uturn/0411_match6.ipynb b/Analysis/0411_unp-left_p-right-uturn/0411_match6.ipynb
new file mode 100644
index 000000000..4454dd432
--- /dev/null
+++ b/Analysis/0411_unp-left_p-right-uturn/0411_match6.ipynb
@@ -0,0 +1,391 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import sys\n",
+ "sys.path.append('../../Scripts')\n",
+ "from preprocess_daily import DailyPreprocessor\n",
+ "from generate_signals import SignalGenerator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "비보호좌회전, 신호우회전, 유턴\n",
+ "\n",
+ "줄임말 목록\n",
+ "- `i` : 교차로번호, `inter_no`\n",
+ "- `f` : 진입, from, `inc_edge_id`\n",
+ "- `t` : 진출, to, `out_edge_id`\n",
+ "- `vec` : 방향벡터, unit vector (`np.array([0.6, 0.8])`)\n",
+ "- `dire` : 방위, direction (동, 서, 남, 북, 북동, 북서, 남동, 남서)\n",
+ "- `rvec` : 정방향 방향벡터, unit vector to the right direction (`np.array([0,1])`)\n",
+ "\n",
+ "필요한 객체들 목록\n",
+ "\n",
+ "- `inter2dire2rvec` : `inter_no` $\\mapsto$ `dire2rvec`\n",
+ " - `dire2rvec` : `dire` $\\mapsto$ `rvec`\n",
+ "- `inter2incs` : `inter_no` $\\mapsto$ `inc_edge_ids`\n",
+ "- `inter2outs` : `inter_no` $\\mapsto$ `out_edge_ids`\n",
+ "- `inter2inc2dire` : `inter_no` $\\mapsto$ `int2dire`\n",
+ " - `inc2dire` : `out_edge_id` $\\mapsto$ `dire`\n",
+ "- `inter2out2dire` : `inter_no` $\\mapsto$ `out2dire`\n",
+ " - `out2dire` : `inc_edge_id` $\\mapsto$ `dire`\n",
+ "- `inter2inc2vec` : `inter_no` $\\mapsto$ `int2vec`\n",
+ " - `inc2vec` : `out_edge_id` $\\mapsto$ `vec`\n",
+ "- `inter2out2vec` : `inter_no` $\\mapsto$ `out2vec`\n",
+ " - `out2vec` : `inc_edge_id` $\\mapsto$ `vec`\n",
+ "\n",
+ "좌회전 판단\n",
+ "\n",
+ "Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n",
+ "Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n",
+ "`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n",
+ "Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n",
+ "Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1. 데이터를 로드합니다.\n",
+ "1-1. 네트워크가 로드되었습니다.\n",
+ "1-2. 테이블들이 로드되었습니다.\n",
+ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
+ "1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
+ "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " parent_id | \n",
+ " child_id | \n",
+ " adj_inc_edge_id | \n",
+ " adj_out_edge_id | \n",
+ " inc_edge_id | \n",
+ " out_edge_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " i0 | \n",
+ " u00 | \n",
+ " -571500487_01 | \n",
+ " 571500487_01 | \n",
+ " 571500487_02 | \n",
+ " 571500487_01.32 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " i2 | \n",
+ " u20 | \n",
+ " 571542811_02 | \n",
+ " 571542811_01 | \n",
+ " 571542810_01.51 | \n",
+ " 571542810_02 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " i3 | \n",
+ " u30 | \n",
+ " 571556450_02 | \n",
+ " 571556450_01 | \n",
+ " 571556452_01 | \n",
+ " 571556452_02 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " i3 | \n",
+ " u31 | \n",
+ " -571500475_01 | \n",
+ " 571500475_01 | \n",
+ " 571500475_02 | \n",
+ " 571500475_01.26 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " i3 | \n",
+ " u32 | \n",
+ " 571540303_02.21 | \n",
+ " 571540303_01 | \n",
+ " 571540303_02 | \n",
+ " -571540303_02 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " i6 | \n",
+ " u60 | \n",
+ " 571500535_02.18 | \n",
+ " 571500535_01 | \n",
+ " 571500535_02 | \n",
+ " -571500535_02 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " parent_id child_id adj_inc_edge_id adj_out_edge_id inc_edge_id \\\n",
+ "0 i0 u00 -571500487_01 571500487_01 571500487_02 \n",
+ "1 i2 u20 571542811_02 571542811_01 571542810_01.51 \n",
+ "2 i3 u30 571556450_02 571556450_01 571556452_01 \n",
+ "3 i3 u31 -571500475_01 571500475_01 571500475_02 \n",
+ "4 i3 u32 571540303_02.21 571540303_01 571540303_02 \n",
+ "5 i6 u60 571500535_02.18 571500535_01 571500535_02 \n",
+ "\n",
+ " out_edge_id \n",
+ "0 571500487_01.32 \n",
+ "1 571542810_02 \n",
+ "2 571556452_02 \n",
+ "3 571500475_01.26 \n",
+ "4 -571540303_02 \n",
+ "5 -571500535_02 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "self = DailyPreprocessor()\n",
+ "self.load_data()\n",
+ "self.make_match1()\n",
+ "self.make_match2()\n",
+ "self.make_match3()\n",
+ "self.make_match4()\n",
+ "self.make_match5()\n",
+ "display(self.u_turn)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "self.u_turn = pd.merge(self.u_turn, self.u_condition, on='child_id')\n",
+ "\n",
+ "# p2inc_edge2angle : node_id to inc_edge2angle\n",
+ "p2inc_edge2angle = dict()\n",
+ "# p2out_edge2angle : node_id to out_edge2angle\n",
+ "p2out_edge2angle = dict()\n",
+ "# p2inc_angle2edge : node_id to inc_angle2edge\n",
+ "p2inc_angle2edge = dict()\n",
+ "# p2out_angle2edge : node_id to out_angle2edge\n",
+ "p2out_angle2edge = dict()\n",
+ "for node_id in self.parent_ids:\n",
+ " m5 = self.match5[self.match5.node_id==node_id]\n",
+ " m5 = m5.dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
+ " # inc_edge2angle : inc_edge_id to inc_angle\n",
+ " inc_edge2angle = dict(zip(m5.inc_edge_id, m5.inc_angle.astype(int)))\n",
+ " p2inc_edge2angle[node_id] = inc_edge2angle\n",
+ " # out_edge2angle : out_edge_id to out_angle\n",
+ " out_edge2angle = dict(zip(m5.out_edge_id, m5.out_angle.astype(int)))\n",
+ " p2out_edge2angle[node_id] = out_edge2angle\n",
+ " # inc_angle2edge : inc_angle to inc_edge_id\n",
+ " inc_angle2edge = dict(zip(m5.inc_angle.astype(int), m5.inc_edge_id))\n",
+ " p2inc_angle2edge[node_id] = inc_angle2edge\n",
+ " # out_angle2edge : out_angle to out_edge_id\n",
+ " out_angle2edge = dict(zip(m5.out_angle.astype(int), m5.out_edge_id))\n",
+ " p2out_angle2edge[node_id] = out_angle2edge\n",
+ "\n",
+ "self.uid2uindex = dict() # u_turn node id to u_turn index\n",
+ "\n",
+ "# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
+ "cmatches = []\n",
+ "for row in self.u_turn.itertuples():\n",
+ " parent_id = row.parent_id\n",
+ " child_id = row.child_id\n",
+ " condition = row.condition\n",
+ " inc_edge_id = row.inc_edge_id\n",
+ " out_edge_id = row.out_edge_id\n",
+ " adj_inc_edge_id = row.adj_inc_edge_id\n",
+ " adj_out_edge_id = row.adj_out_edge_id\n",
+ " \n",
+ " # self.uid2uindex 지정\n",
+ " inc_edge = self.net.getEdge(inc_edge_id)\n",
+ " out_edge = self.net.getEdge(out_edge_id)\n",
+ " u_turn_conn = inc_edge.getConnections(out_edge)[0]\n",
+ " self.uid2uindex[child_id] = u_turn_conn.getTLLinkIndex()\n",
+ " \n",
+ " # match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n",
+ " cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
+ " cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
+ " cmatch['node_id'] = child_id\n",
+ "\n",
+ " # 진입엣지 각도\n",
+ " inc_angle = p2inc_edge2angle[parent_id][adj_inc_edge_id]\n",
+ "\n",
+ " # 이격각도\n",
+ " self.angle_separation = 10\n",
+ "\n",
+ " # 진입로 각도 목록\n",
+ " inc_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).inc_angle.astype(int).unique()\n",
+ " inc_angles = np.sort(inc_angles)\n",
+ " inc_angles = list(inc_angles - 360) + list(inc_angles) + list(inc_angles + 360)\n",
+ " inc_angles = np.array(inc_angles)\n",
+ "\n",
+ " # 보행신호시의 진입로 각도\n",
+ " inc_angles_left = inc_angles[inc_angles >= inc_angle + self.angle_separation]\n",
+ " inc_angle_pedes = np.sort(inc_angles_left)[0] % 360\n",
+ "\n",
+ " # 보행신호시의 진입로 엣지id\n",
+ " inc_angle2edge = p2inc_angle2edge[parent_id]\n",
+ " inc_edge_id_pedes = inc_angle2edge[inc_angle_pedes]\n",
+ "\n",
+ " # 진출로 각도 목록\n",
+ " out_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).out_angle.astype(int).unique()\n",
+ " out_angles = np.sort(out_angles)\n",
+ " out_angles = list(out_angles - 360) + list(out_angles) + list(out_angles + 360)\n",
+ " out_angles = np.array(out_angles)\n",
+ "\n",
+ " # 보행신호시의 진입로 각도\n",
+ " out_angles_right = out_angles[out_angles <= inc_angle - self.angle_separation]\n",
+ " out_angle_pedes = np.sort(out_angles_right)[-1] % 360\n",
+ "\n",
+ " # 보행신호시의 진입로 엣지id\n",
+ " out_angle2edge = p2out_angle2edge[parent_id]\n",
+ " out_edge_id_pedes = out_angle2edge[out_angle_pedes]\n",
+ "\n",
+ " # 진입엣지/진출엣지 포함 조건\n",
+ " inc_true = (cmatch.inc_edge_id==adj_inc_edge_id)\n",
+ " out_true = (cmatch.out_edge_id==adj_out_edge_id)\n",
+ "\n",
+ " # 보행신호시 조건\n",
+ " pedes_flag = (cmatch.inc_edge_id==inc_edge_id_pedes) & (cmatch.out_edge_id==out_edge_id_pedes)\n",
+ "\n",
+ " # 좌회전시 조건\n",
+ " right_flag = inc_true & (cmatch.turn_type=='left')\n",
+ "\n",
+ " # 보행신호이동류(17) 조건\n",
+ " crosswalk_on = (cmatch.move_no==17) & ~ out_true\n",
+ "\n",
+ " # 신호없음이동류(18) 조건\n",
+ " all_redsigns = (cmatch.move_no==18) & ~ out_true\n",
+ "\n",
+ " # 보행신호시/좌회전시 진입/진출 엣지id 배정\n",
+ " cmatch[['inc_edge_id', 'out_edge_id']] = np.nan\n",
+ " if condition == \"보행신호시\":\n",
+ " cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " elif condition == \"좌회전시\":\n",
+ " cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ "\n",
+ " uturn_not_assigned = cmatch[['inc_edge_id','out_edge_id']].isna().any(axis=1).all()\n",
+ "\n",
+ " if uturn_not_assigned:\n",
+ " # 좌회전시\n",
+ " if right_flag.any():\n",
+ " cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " # 보행신호시\n",
+ " elif pedes_flag.any():\n",
+ " cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " # 보행신호이동류(17) 발생시\n",
+ " elif crosswalk_on.any():\n",
+ " cmatch.loc[crosswalk_on, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " # 신호없음이동류(18) 발생시\n",
+ " elif all_redsigns.any():\n",
+ " cmatch.loc[all_redsigns, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " # 진출엣지 미포함시\n",
+ " elif out_true.any():\n",
+ " cmatch.loc[~ out_true, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
+ " cmatches.append(cmatch)\n",
+ "\n",
+ "# 각 연등교차로(coordination node)에 대하여 (inc_edge_id, out_edge_id) 부여\n",
+ "self.coord['inter_no'] = self.coord['parent_id'].map(self.node2inter)\n",
+ "self.coord = self.coord.rename(columns={'child_id':'node_id'})\n",
+ "self.coord[['inc_dire', 'out_dire', 'inc_angle','out_angle']] = np.nan\n",
+ "self.coord['move_no'] = 20\n",
+ "self.coord = self.coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dire', 'out_dire', 'inc_angle','out_angle', 'inc_edge_id', 'out_edge_id', 'node_id']]\n",
+ "\n",
+ "cmatches = pd.concat(cmatches)\n",
+ "self.match6 = pd.concat([self.match5, cmatches, self.coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])\n",
+ "self.match6 = self.match6.reset_index(drop=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "u00 4\n",
+ "\n",
+ "u20 2\n",
+ "\n",
+ "u30 4\n",
+ "\n",
+ "u31 4\n",
+ "\n",
+ "u32 7\n",
+ "\n",
+ "u60 8\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "for child_id in self.u_turn_ids:\n",
+ " print(child_id, self.uid2uindex[child_id])\n",
+ " print()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "sts",
+ "language": "python",
+ "name": "sts"
+ },
+ "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
+}
diff --git a/Analysis/0411_unp-left_p-right-uturn/0411_uturn.ipynb b/Analysis/0411_unp-left_p-right-uturn/0411_uturn.ipynb
deleted file mode 100644
index c6d50ad8f..000000000
--- a/Analysis/0411_unp-left_p-right-uturn/0411_uturn.ipynb
+++ /dev/null
@@ -1,3860 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "import pandas as pd\n",
- "import numpy as np\n",
- "import sys\n",
- "sys.path.append('../../Scripts')\n",
- "from preprocess_daily import DailyPreprocessor\n",
- "from generate_signals import SignalGenerator"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "비보호좌회전, 신호우회전, 유턴\n",
- "\n",
- "줄임말 목록\n",
- "- `i` : 교차로번호, `inter_no`\n",
- "- `f` : 진입, from, `inc_edge_id`\n",
- "- `t` : 진출, to, `out_edge_id`\n",
- "- `vec` : 방향벡터, unit vector (`np.array([0.6, 0.8])`)\n",
- "- `dire` : 방위, direction (동, 서, 남, 북, 북동, 북서, 남동, 남서)\n",
- "- `rvec` : 정방향 방향벡터, unit vector to the right direction (`np.array([0,1])`)\n",
- "\n",
- "필요한 객체들 목록\n",
- "\n",
- "- `inter2dire2rvec` : `inter_no` $\\mapsto$ `dire2rvec`\n",
- " - `dire2rvec` : `dire` $\\mapsto$ `rvec`\n",
- "- `inter2incs` : `inter_no` $\\mapsto$ `inc_edge_ids`\n",
- "- `inter2outs` : `inter_no` $\\mapsto$ `out_edge_ids`\n",
- "- `inter2inc2dire` : `inter_no` $\\mapsto$ `int2dire`\n",
- " - `inc2dire` : `out_edge_id` $\\mapsto$ `dire`\n",
- "- `inter2out2dire` : `inter_no` $\\mapsto$ `out2dire`\n",
- " - `out2dire` : `inc_edge_id` $\\mapsto$ `dire`\n",
- "- `inter2inc2vec` : `inter_no` $\\mapsto$ `int2vec`\n",
- " - `inc2vec` : `out_edge_id` $\\mapsto$ `vec`\n",
- "- `inter2out2vec` : `inter_no` $\\mapsto$ `out2vec`\n",
- " - `out2vec` : `inc_edge_id` $\\mapsto$ `vec`\n",
- "\n",
- "좌회전 판단\n",
- "\n",
- "Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n",
- "Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n",
- "`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n",
- "Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n",
- "Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1. 데이터를 로드합니다.\n",
- "1-1. 네트워크가 로드되었습니다.\n",
- "1-2. 테이블들이 로드되었습니다.\n",
- "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
- "1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
- "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " parent_id | \n",
- " child_id | \n",
- " adj_inc_edge_id | \n",
- " adj_out_edge_id | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " i0 | \n",
- " u00 | \n",
- " -571500487_01 | \n",
- " 571500487_01 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " i2 | \n",
- " u20 | \n",
- " 571542811_02 | \n",
- " 571542811_01 | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " i3 | \n",
- " u30 | \n",
- " 571556450_02 | \n",
- " 571556450_01 | \n",
- " 571556452_01 | \n",
- " 571556452_02 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " i3 | \n",
- " u31 | \n",
- " -571500475_01 | \n",
- " 571500475_01 | \n",
- " 571500475_02 | \n",
- " 571500475_01.26 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " i3 | \n",
- " u32 | \n",
- " 571540303_02.21 | \n",
- " 571540303_01 | \n",
- " 571540303_02 | \n",
- " -571540303_02 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " i6 | \n",
- " u60 | \n",
- " 571500535_02.18 | \n",
- " 571500535_01 | \n",
- " 571500535_02 | \n",
- " -571500535_02 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " parent_id child_id adj_inc_edge_id adj_out_edge_id inc_edge_id \\\n",
- "0 i0 u00 -571500487_01 571500487_01 571500487_02 \n",
- "1 i2 u20 571542811_02 571542811_01 571542810_01.51 \n",
- "2 i3 u30 571556450_02 571556450_01 571556452_01 \n",
- "3 i3 u31 -571500475_01 571500475_01 571500475_02 \n",
- "4 i3 u32 571540303_02.21 571540303_01 571540303_02 \n",
- "5 i6 u60 571500535_02.18 571500535_01 571500535_02 \n",
- "\n",
- " out_edge_id \n",
- "0 571500487_01.32 \n",
- "1 571542810_02 \n",
- "2 571556452_02 \n",
- "3 571500475_01.26 \n",
- "4 -571540303_02 \n",
- "5 -571500535_02 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "self = DailyPreprocessor()\n",
- "self.load_data()\n",
- "self.make_match1()\n",
- "self.make_match2()\n",
- "self.make_match3()\n",
- "self.make_match4()\n",
- "self.make_match5()\n",
- "display(self.u_turn)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "self.u_turn = pd.merge(self.u_turn, self.u_condition, on='child_id')\n",
- "\n",
- "# p2inc_edge2angle : node_id to inc_edge2angle\n",
- "p2inc_edge2angle = dict()\n",
- "# p2out_edge2angle : node_id to out_edge2angle\n",
- "p2out_edge2angle = dict()\n",
- "# p2inc_angle2edge : node_id to inc_angle2edge\n",
- "p2inc_angle2edge = dict()\n",
- "# p2out_angle2edge : node_id to out_angle2edge\n",
- "p2out_angle2edge = dict()\n",
- "for node_id in self.parent_ids:\n",
- " m5 = self.match5[self.match5.node_id==node_id]\n",
- " m5 = m5.dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
- " # inc_edge2angle : inc_edge_id to inc_angle\n",
- " inc_edge2angle = dict(zip(m5.inc_edge_id, m5.inc_angle.astype(int)))\n",
- " p2inc_edge2angle[node_id] = inc_edge2angle\n",
- " # out_edge2angle : out_edge_id to out_angle\n",
- " out_edge2angle = dict(zip(m5.out_edge_id, m5.out_angle.astype(int)))\n",
- " p2out_edge2angle[node_id] = out_edge2angle\n",
- " # inc_angle2edge : inc_angle to inc_edge_id\n",
- " inc_angle2edge = dict(zip(m5.inc_angle.astype(int), m5.inc_edge_id))\n",
- " p2inc_angle2edge[node_id] = inc_angle2edge\n",
- " # out_angle2edge : out_angle to out_edge_id\n",
- " out_angle2edge = dict(zip(m5.out_angle.astype(int), m5.out_edge_id))\n",
- " p2out_angle2edge[node_id] = out_angle2edge\n",
- "\n",
- "# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
- "cmatches = []\n",
- "for row in self.u_turn.itertuples():\n",
- " parent_id = row.parent_id\n",
- " child_id = row.child_id\n",
- " condition = row.condition\n",
- " inc_edge_id = row.inc_edge_id\n",
- " out_edge_id = row.out_edge_id\n",
- " adj_inc_edge_id = row.adj_inc_edge_id\n",
- " adj_out_edge_id = row.adj_out_edge_id\n",
- "\n",
- " # match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n",
- " cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
- " cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
- " cmatch['node_id'] = child_id\n",
- "\n",
- " # 진입엣지 각도\n",
- " inc_angle = p2inc_edge2angle[parent_id][adj_inc_edge_id]\n",
- "\n",
- " # 이격각도\n",
- " self.angle_separation = 10\n",
- "\n",
- " # 진입로 각도 목록\n",
- " inc_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).inc_angle.astype(int).unique()\n",
- " inc_angles = np.sort(inc_angles)\n",
- " inc_angles = list(inc_angles - 360) + list(inc_angles) + list(inc_angles + 360)\n",
- " inc_angles = np.array(inc_angles)\n",
- "\n",
- " # 보행신호시의 진입로 각도\n",
- " inc_angles_left = inc_angles[inc_angles >= inc_angle + self.angle_separation]\n",
- " inc_angle_pedes = np.sort(inc_angles_left)[0] % 360\n",
- "\n",
- " # 보행신호시의 진입로 엣지id\n",
- " inc_angle2edge = p2inc_angle2edge[parent_id]\n",
- " inc_edge_id_pedes = inc_angle2edge[inc_angle_pedes]\n",
- "\n",
- " # 진출로 각도 목록\n",
- " out_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).out_angle.astype(int).unique()\n",
- " out_angles = np.sort(out_angles)\n",
- " out_angles = list(out_angles - 360) + list(out_angles) + list(out_angles + 360)\n",
- " out_angles = np.array(out_angles)\n",
- "\n",
- " # 보행신호시의 진입로 각도\n",
- " out_angles_right = out_angles[out_angles <= inc_angle - self.angle_separation]\n",
- " out_angle_pedes = np.sort(out_angles_right)[-1] % 360\n",
- "\n",
- " # 보행신호시의 진입로 엣지id\n",
- " out_angle2edge = p2out_angle2edge[parent_id]\n",
- " out_edge_id_pedes = out_angle2edge[out_angle_pedes]\n",
- "\n",
- " # 진입엣지/진출엣지 포함 조건\n",
- " inc_true = (cmatch.inc_edge_id==adj_inc_edge_id)\n",
- " out_true = (cmatch.out_edge_id==adj_out_edge_id)\n",
- "\n",
- " # 보행신호시 조건\n",
- " pedes_flag = (cmatch.inc_edge_id==inc_edge_id_pedes) & (cmatch.out_edge_id==out_edge_id_pedes)\n",
- "\n",
- " # 좌회전시 조건\n",
- " right_flag = inc_true & (cmatch.turn_type=='left')\n",
- "\n",
- " # 보행신호이동류(17) 조건\n",
- " crosswalk_on = (cmatch.move_no==17) & ~ out_true\n",
- "\n",
- " # 신호없음이동류(18) 조건\n",
- " all_redsigns = (cmatch.move_no==18) & ~ out_true\n",
- "\n",
- " # 보행신호시/좌회전시 진입/진출 엣지id 배정\n",
- " cmatch[['inc_edge_id', 'out_edge_id']] = np.nan\n",
- " if condition == \"보행신호시\":\n",
- " cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- " elif condition == \"좌회전시\":\n",
- " cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- "\n",
- " uturn_not_assigned = cmatch[['inc_edge_id','out_edge_id']].isna().any(axis=1).all()\n",
- "\n",
- " if uturn_not_assigned:\n",
- " # 보행신호시\n",
- " if pedes_flag.any():\n",
- " cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- " # 좌회전시\n",
- " elif right_flag.any():\n",
- " cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- " # 보행신호이동류(17) 발생시\n",
- " elif crosswalk_on.any():\n",
- " cmatch.loc[crosswalk_on, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- " # 신호없음이동류(18) 발생시\n",
- " elif all_redsigns.any():\n",
- " cmatch.loc[all_redsigns, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
- " # 진출엣지 미포함시\n",
- " elif out_true.any():\n",
- " cmatch.loc[~ out_true, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {},
- "outputs": [],
- "source": [
- "self.match7 = self.match6.copy()\n",
- "self.match7 = self.match7[['inter_no', 'move_no', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id', 'node_id']]\n",
- "\n",
- "# (1) 가능한 (진입방향, 진출방향) 목록 \n",
- "flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
- "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
- "pdires = {}\n",
- "for node_id in self.parent_ids:\n",
- " dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten()\n",
- " dires = {dire for dire in dires if type(dire)==str}\n",
- " pdires[node_id] = dires\n",
- "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
- "inc2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for inc_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)]\n",
- " inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
- "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
- "out2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for out_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)]\n",
- " out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0]\n",
- "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
- "pflow = {}\n",
- "for node_id in self.parent_ids:\n",
- " pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n",
- "# display(pflow)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 175 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 175 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571510153_02 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " -571542797_02 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 175 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " -571500487_01 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 175 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 67 | \n",
- " 210 | \n",
- " 21 | \n",
- " 북 | \n",
- " 서 | \n",
- " 571511538_02.121 | \n",
- " 571500535_01 | \n",
- " i6 | \n",
- "
\n",
- " \n",
- " 68 | \n",
- " 210 | \n",
- " 21 | \n",
- " 서 | \n",
- " 남 | \n",
- " 571500535_02.18 | \n",
- " 571500585_01 | \n",
- " i6 | \n",
- "
\n",
- " \n",
- " 69 | \n",
- " 210 | \n",
- " 21 | \n",
- " 남 | \n",
- " 동 | \n",
- " 571500585_02 | \n",
- " 571542115_01 | \n",
- " i6 | \n",
- "
\n",
- " \n",
- " 70 | \n",
- " 210 | \n",
- " 21 | \n",
- " 동 | \n",
- " 북 | \n",
- " -571542115_01 | \n",
- " 571511538_01 | \n",
- " i6 | \n",
- "
\n",
- " \n",
- " 71 | \n",
- " 210 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571500535_02 | \n",
- " -571500535_02 | \n",
- " u60 | \n",
- "
\n",
- " \n",
- "
\n",
- "
72 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "0 175 1 동 남 571545870_02 571542797_02 \n",
- "1 175 2 서 동 571510153_02 571545870_01 \n",
- "2 175 3 남 서 -571542797_02 571510153_01 \n",
- "3 175 4 북 남 -571500487_01 571542797_02 \n",
- "4 175 5 서 북 571510153_02 571500487_01 \n",
- ".. ... ... ... ... ... ... \n",
- "67 210 21 북 서 571511538_02.121 571500535_01 \n",
- "68 210 21 서 남 571500535_02.18 571500585_01 \n",
- "69 210 21 남 동 571500585_02 571542115_01 \n",
- "70 210 21 동 북 -571542115_01 571511538_01 \n",
- "71 210 5 서 북 571500535_02 -571500535_02 \n",
- "\n",
- " node_id \n",
- "0 i0 \n",
- "1 i0 \n",
- "2 i0 \n",
- "3 i0 \n",
- "4 i0 \n",
- ".. ... \n",
- "67 i6 \n",
- "68 i6 \n",
- "69 i6 \n",
- "70 i6 \n",
- "71 u60 \n",
- "\n",
- "[72 rows x 7 columns]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.make_match6()\n",
- "self.make_matching()\n",
- "self.matching"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 54,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북'), ('북동', '남동'), ('남서', '북동'), ('남동', '남서'), ('북서', '남동'), ('남서', '북서'), ('북동', '남서'), ('북서', '북동'), ('남동', '북서')]\n",
- "{'i0': {'서', '북', '동', '남'}, 'i1': {'서', '북', '남'}, 'i2': {'북', '남'}, 'i3': {'서', '북', '동', '남'}, 'i6': {'북', '서', '동', '남'}, 'i7': {'북', '남'}, 'i8': {'서', '북', '동', '남'}, 'i9': {'서', '동'}}\n",
- "{('i0', '서'): '571510153_02', ('i0', '북'): '-571500487_01', ('i0', '동'): '571545870_02', ('i0', '남'): '-571542797_02', ('i1', '서'): '571543469_02', ('i1', '북'): '571542797_02.99', ('i1', '남'): '-571542810_01', ('i2', '북'): '571542811_02', ('i2', '남'): '-571542809_01', ('i3', '서'): '571540303_02.21', ('i3', '북'): '571556450_02', ('i3', '동'): '-571500475_01', ('i3', '남'): '571540304_02', ('i6', '북'): '571511538_02.121', ('i6', '서'): '571500535_02.18', ('i6', '동'): '-571542115_01', ('i6', '남'): '571500585_02', ('i7', '북'): '571542073_01', ('i7', '남'): '-571511538_02', ('i8', '서'): '571500618_02', ('i8', '북'): '571500583_01', ('i8', '동'): '571500617_02', ('i8', '남'): '-571500569_01', ('i9', '서'): '571510152_01', ('i9', '동'): '571510152_02'}\n",
- "{('i0', '서'): '571510153_01', ('i0', '북'): '571500487_01', ('i0', '동'): '571545870_01', ('i0', '남'): '571542797_02', ('i1', '서'): '571543469_01', ('i1', '북'): '-571542797_02.99', ('i1', '남'): '571542810_01', ('i2', '북'): '571542811_01', ('i2', '남'): '571542809_01', ('i3', '서'): '571540303_01', ('i3', '북'): '571556450_01', ('i3', '동'): '571500475_01', ('i3', '남'): '571540304_01', ('i6', '북'): '571511538_01', ('i6', '서'): '571500535_01', ('i6', '동'): '571542115_01', ('i6', '남'): '571500585_01', ('i7', '북'): '571542073_02', ('i7', '남'): '571511538_02', ('i8', '서'): '571500618_01', ('i8', '북'): '571500583_02', ('i8', '동'): '571500617_01', ('i8', '남'): '571500569_01', ('i9', '서'): '-571510152_01', ('i9', '동'): '571510152_01.65'}\n",
- "{'i0': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i1': [('남', '서'), ('북', '남'), ('서', '북'), ('남', '북')], 'i2': [('북', '남'), ('남', '북')], 'i3': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i6': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i7': [('북', '남'), ('남', '북')], 'i8': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i9': [('서', '동'), ('동', '서')]}\n"
- ]
- }
- ],
- "source": [
- "print(flows)\n",
- "print(pdires)\n",
- "print(inc2id)\n",
- "print(out2id)\n",
- "print(pflow)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
- "dires_right = ['북', '북서', '서', '남서', '남', '남동', '동', '북동'] # ex (북, 서), (서, 남) 등은 우회전 flow\n",
- "self.matching = []\n",
- "for node_id in self.parent_ids:\n",
- " inter_no = self.node2inter[node_id]\n",
- " print(node_id, inter_no)\n",
- " display(self.match6[self.match6.node_id==node_id])\n",
- " # 좌회전과 직진(1 ~ 16)\n",
- " for (inc_dire, out_dire) in pflow[node_id]:\n",
- " move_no = self.nema[(self.nema.inc_dire==inc_dire) & (self.nema.out_dire==out_dire)].move_no.iloc[0]\n",
- " inc_edge_id = inc2id[(node_id, inc_dire)]\n",
- " out_edge_id = out2id[(node_id, out_dire)]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
- " display(new_row)\n",
- " self.matching.append(new_row)\n",
- " # 보행신호(17), 전적색(18)\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18],\n",
- " 'inc_dire':[None]*2, 'out_dire':[None]*2,\n",
- " 'inc_edge_id':[None]*2, 'out_edge_id':[None]*2, 'node_id':[node_id]*2})\n",
- " display(new_row)\n",
- " self.matching.append(new_row)\n",
- " # 신호우회전(21)\n",
- " for d in range(len(dires_right)):\n",
- " inc_dire = dires_right[d]\n",
- " out_dire = dires_right[(d+2)%8]\n",
- " if {inc_dire, out_dire}.issubset(pdires[node_id]):\n",
- " inc_edge_id = inc2id[(node_id, inc_dire)]\n",
- " out_edge_id = out2id[(node_id, out_dire)]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
- " display(new_row)\n",
- " self.matching.append(new_row)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 79,
- "metadata": {},
- "outputs": [],
- "source": [
- "self.match7 = self.match6.copy()\n",
- "self.match7 = self.match7[['inter_no', 'move_no', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id', 'node_id']]\n",
- "\n",
- "# (1) 가능한 (진입방향, 진출방향) 목록 \n",
- "flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
- "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
- "pdires = {}\n",
- "for node_id in self.parent_ids:\n",
- " dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten()\n",
- " dires = {dire for dire in dires if type(dire)==str}\n",
- " pdires[node_id] = dires\n",
- "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
- "inc2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for inc_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)]\n",
- " inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
- "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
- "out2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for out_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)]\n",
- " out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0]\n",
- "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
- "pflow = {}\n",
- "for node_id in self.parent_ids:\n",
- " pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n",
- "# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
- "# node2inter = dict(zip(self.match7['node_id'], self.match7['inter_no']))\n",
- "dires_right = ['북', '서', '남', '동', '북'] # ex (북, 서), (서, 남) 등은 우회전 flow\n",
- "self.matching = []\n",
- "for node_id in self.parent_ids:\n",
- " inter_no = self.node2inter[node_id]\n",
- " # 좌회전과 직진(1 ~ 16)\n",
- " for (inc_dire, out_dire) in pflow[node_id]:\n",
- " move_no = self.nema[(self.nema.inc_dire==inc_dire) & (self.nema.out_dire==out_dire)].move_no.iloc[0]\n",
- " inc_edge_id = inc2id[(node_id, inc_dire)]\n",
- " out_edge_id = out2id[(node_id, out_dire)]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
- " self.matching.append(new_row)\n",
- " # 보행신호(17), 전적색(18)\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18],\n",
- " 'inc_dire':[None]*2, 'out_dire':[None]*2,\n",
- " 'inc_edge_id':[None]*2, 'out_edge_id':[None]*2, 'node_id':[node_id]*2})\n",
- " self.matching.append(new_row)\n",
- " # 신호우회전(21)\n",
- " for d in range(len(dires_right)-1):\n",
- " inc_dire = dires_right[d]\n",
- " out_dire = dires_right[d+1]\n",
- " if {inc_dire, out_dire}.issubset(pdires[node_id]):\n",
- " inc_edge_id = inc2id[(node_id, inc_dire)]\n",
- " out_edge_id = out2id[(node_id, out_dire)]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
- " self.matching.append(new_row)\n",
- "self.matching.append(self.match7[self.match7.node_id.isin(self.child_ids)])\n",
- "self.matching = pd.concat(self.matching)\n",
- "self.matching = self.matching.dropna().sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n",
- "self.matching['move_no'] = self.matching['move_no'].astype(int)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "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",
- " turn_type | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 175 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " 179 | \n",
- " 000 | \n",
- " -571542797_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 175 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " 001 | \n",
- " 180 | \n",
- " -571500487_01 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " 2 | \n",
- " A | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " 001 | \n",
- " 090 | \n",
- " -571500487_01 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- " left | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 175 | \n",
- " 2 | \n",
- " B | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " 179 | \n",
- " 270 | \n",
- " -571542797_02 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- " left | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 175 | \n",
- " 3 | \n",
- " A | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " 090 | \n",
- " 270 | \n",
- " 571545870_02 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 175 | \n",
- " 3 | \n",
- " B | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " 090 | \n",
- " 180 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- " left | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 175 | \n",
- " 4 | \n",
- " A | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 270 | \n",
- " 000 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- " left | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 175 | \n",
- " 4 | \n",
- " B | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " 270 | \n",
- " 090 | \n",
- " 571510153_02 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 175 | \n",
- " 2 | \n",
- " A | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " 001 | \n",
- " 090 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- " u00 | \n",
- " left | \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 북 남 001 \n",
- "2 175 2 A 7 북 동 001 \n",
- "3 175 2 B 3 남 서 179 \n",
- "4 175 3 A 6 동 서 090 \n",
- "5 175 3 B 1 동 남 090 \n",
- "6 175 4 A 5 서 북 270 \n",
- "7 175 4 B 2 서 동 270 \n",
- "8 175 2 A 7 북 동 001 \n",
- "\n",
- " out_angle inc_edge_id out_edge_id node_id turn_type \n",
- "0 000 -571542797_02 571500487_01 i0 straight \n",
- "1 180 -571500487_01 571542797_02 i0 straight \n",
- "2 090 -571500487_01 571545870_01 i0 left \n",
- "3 270 -571542797_02 571510153_01 i0 left \n",
- "4 270 571545870_02 571510153_01 i0 straight \n",
- "5 180 571545870_02 571542797_02 i0 left \n",
- "6 000 571510153_02 571500487_01 i0 left \n",
- "7 090 571510153_02 571545870_01 i0 straight \n",
- "8 090 571500487_02 571500487_01.32 u00 left "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 175 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 175 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571510153_02 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " -571542797_02 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 175 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " -571500487_01 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 175 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 175 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571545870_02 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 175 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " -571500487_01 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 175 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571542797_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 175 | \n",
- " 21 | \n",
- " 북 | \n",
- " 서 | \n",
- " -571500487_01 | \n",
- " 571510153_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 175 | \n",
- " 21 | \n",
- " 서 | \n",
- " 남 | \n",
- " 571510153_02 | \n",
- " 571542797_02 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 175 | \n",
- " 21 | \n",
- " 남 | \n",
- " 동 | \n",
- " -571542797_02 | \n",
- " 571545870_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 175 | \n",
- " 21 | \n",
- " 동 | \n",
- " 북 | \n",
- " 571545870_02 | \n",
- " 571500487_01 | \n",
- " i0 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 175 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- " u00 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "0 175 1 동 남 571545870_02 571542797_02 \n",
- "1 175 2 서 동 571510153_02 571545870_01 \n",
- "2 175 3 남 서 -571542797_02 571510153_01 \n",
- "3 175 4 북 남 -571500487_01 571542797_02 \n",
- "4 175 5 서 북 571510153_02 571500487_01 \n",
- "5 175 6 동 서 571545870_02 571510153_01 \n",
- "6 175 7 북 동 -571500487_01 571545870_01 \n",
- "7 175 8 남 북 -571542797_02 571500487_01 \n",
- "8 175 21 북 서 -571500487_01 571510153_01 \n",
- "9 175 21 서 남 571510153_02 571542797_02 \n",
- "10 175 21 남 동 -571542797_02 571545870_01 \n",
- "11 175 21 동 북 571545870_02 571500487_01 \n",
- "12 175 7 북 동 571500487_02 571500487_01.32 \n",
- "\n",
- " node_id \n",
- "0 i0 \n",
- "1 i0 \n",
- "2 i0 \n",
- "3 i0 \n",
- "4 i0 \n",
- "5 i0 \n",
- "6 i0 \n",
- "7 i0 \n",
- "8 i0 \n",
- "9 i0 \n",
- "10 i0 \n",
- "11 i0 \n",
- "12 u00 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "self.make_matching()\n",
- "match6 = self.match6.dropna().reset_index(drop=True)\n",
- "matching = self.matching\n",
- "display(match6[match6.inter_no==175])\n",
- "display(matching[matching.inter_no==175])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']"
- ]
- },
- "execution_count": 36,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.parent_ids"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 202 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571510152_01 | \n",
- " 571510152_01.65 | \n",
- " i9 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id node_id\n",
- "0 202 2 서 동 571510152_01 571510152_01.65 i9"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 202 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571510152_02 | \n",
- " -571510152_01 | \n",
- " i9 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id node_id\n",
- "0 202 6 동 서 571510152_02 -571510152_01 i9"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "node_id = self.parent_ids[7]\n",
- "inter_no = self.node2inter[node_id]\n",
- "for (inc_dire, out_dire) in pflow[node_id]:\n",
- " move_no = self.nema[(self.nema.inc_dire==inc_dire) & (self.nema.out_dire==out_dire)].move_no.iloc[0]\n",
- " inc_edge_id = inc2id[(node_id, inc_dire)]\n",
- " out_edge_id = out2id[(node_id, out_dire)]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
- " display(new_row)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 58,
- "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",
- " turn_type | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 26 | \n",
- " 177 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " 179 | \n",
- " 000 | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 177 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " 000 | \n",
- " 180 | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- " straight | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 177 | \n",
- " 2 | \n",
- " A | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " u20 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 177 | \n",
- " 2 | \n",
- " B | \n",
- " 18 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
- "26 177 1 A 8 남 북 179 \n",
- "27 177 1 B 4 북 남 000 \n",
- "28 177 2 A 17 NaN NaN NaN \n",
- "29 177 2 B 18 NaN NaN NaN \n",
- "\n",
- " out_angle inc_edge_id out_edge_id node_id turn_type \n",
- "26 000 NaN NaN u20 straight \n",
- "27 180 NaN NaN u20 straight \n",
- "28 NaN 571542810_01.51 571542810_02 u20 NaN \n",
- "29 NaN NaN NaN u20 NaN "
- ]
- },
- "execution_count": 58,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.match6[self.match6.node_id=='u20']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 8 | \n",
- " 175 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 175 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 175 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 175 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 175 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 175 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 175 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 175 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 177 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 177 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 177 | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " u20 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 177 | \n",
- " 18 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " u20 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 34 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 35 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 36 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 37 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 46 | \n",
- " 178 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 47 | \n",
- " 178 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 48 | \n",
- " 178 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 49 | \n",
- " 178 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 50 | \n",
- " 178 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 51 | \n",
- " 178 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 52 | \n",
- " 178 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571556452_01 | \n",
- " 571556452_02 | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 53 | \n",
- " 178 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 54 | \n",
- " 178 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " 571500475_02 | \n",
- " 571500475_01.26 | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 55 | \n",
- " 178 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 56 | \n",
- " 178 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 57 | \n",
- " 178 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 58 | \n",
- " 178 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 59 | \n",
- " 178 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 60 | \n",
- " 178 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 61 | \n",
- " 178 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 62 | \n",
- " 178 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 63 | \n",
- " 178 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571540303_02 | \n",
- " -571540303_02 | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 64 | \n",
- " 178 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 65 | \n",
- " 178 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 66 | \n",
- " 178 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 67 | \n",
- " 178 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 68 | \n",
- " 178 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 69 | \n",
- " 178 | \n",
- " 1 | \n",
- " 동 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 100 | \n",
- " 210 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 101 | \n",
- " 210 | \n",
- " 18 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 102 | \n",
- " 210 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571500535_02 | \n",
- " -571500535_02 | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 103 | \n",
- " 210 | \n",
- " 2 | \n",
- " 서 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 104 | \n",
- " 210 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 105 | \n",
- " 210 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 106 | \n",
- " 210 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- " 107 | \n",
- " 210 | \n",
- " 3 | \n",
- " 남 | \n",
- " 서 | \n",
- " NaN | \n",
- " NaN | \n",
- " u60 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "8 175 8 남 북 NaN NaN \n",
- "9 175 4 북 남 NaN NaN \n",
- "10 175 7 북 동 571500487_02 571500487_01.32 \n",
- "11 175 3 남 서 NaN NaN \n",
- "12 175 6 동 서 NaN NaN \n",
- "13 175 1 동 남 NaN NaN \n",
- "14 175 5 서 북 NaN NaN \n",
- "15 175 2 서 동 NaN NaN \n",
- "26 177 8 남 북 NaN NaN \n",
- "27 177 4 북 남 NaN NaN \n",
- "28 177 17 NaN NaN 571542810_01.51 571542810_02 \n",
- "29 177 18 NaN NaN NaN NaN \n",
- "30 178 20 NaN NaN NaN NaN \n",
- "31 178 20 NaN NaN NaN NaN \n",
- "32 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "33 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "34 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "35 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "36 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "37 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "46 178 8 남 북 NaN NaN \n",
- "47 178 4 북 남 NaN NaN \n",
- "48 178 7 북 동 NaN NaN \n",
- "49 178 3 남 서 NaN NaN \n",
- "50 178 5 서 북 NaN NaN \n",
- "51 178 2 서 동 NaN NaN \n",
- "52 178 6 동 서 571556452_01 571556452_02 \n",
- "53 178 1 동 남 NaN NaN \n",
- "54 178 8 남 북 571500475_02 571500475_01.26 \n",
- "55 178 4 북 남 NaN NaN \n",
- "56 178 7 북 동 NaN NaN \n",
- "57 178 3 남 서 NaN NaN \n",
- "58 178 5 서 북 NaN NaN \n",
- "59 178 2 서 동 NaN NaN \n",
- "60 178 6 동 서 NaN NaN \n",
- "61 178 1 동 남 NaN NaN \n",
- "62 178 8 남 북 NaN NaN \n",
- "63 178 4 북 남 571540303_02 -571540303_02 \n",
- "64 178 7 북 동 NaN NaN \n",
- "65 178 3 남 서 NaN NaN \n",
- "66 178 5 서 북 NaN NaN \n",
- "67 178 2 서 동 NaN NaN \n",
- "68 178 6 동 서 NaN NaN \n",
- "69 178 1 동 남 NaN NaN \n",
- "100 210 6 동 서 NaN NaN \n",
- "101 210 18 NaN NaN NaN NaN \n",
- "102 210 5 서 북 571500535_02 -571500535_02 \n",
- "103 210 2 서 동 NaN NaN \n",
- "104 210 7 북 동 NaN NaN \n",
- "105 210 4 북 남 NaN NaN \n",
- "106 210 8 남 북 NaN NaN \n",
- "107 210 3 남 서 NaN NaN \n",
- "\n",
- " node_id \n",
- "8 u00 \n",
- "9 u00 \n",
- "10 u00 \n",
- "11 u00 \n",
- "12 u00 \n",
- "13 u00 \n",
- "14 u00 \n",
- "15 u00 \n",
- "26 u20 \n",
- "27 u20 \n",
- "28 u20 \n",
- "29 u20 \n",
- "30 c30 \n",
- "31 c30 \n",
- "32 c30 \n",
- "33 c30 \n",
- "34 c30 \n",
- "35 c30 \n",
- "36 c30 \n",
- "37 c30 \n",
- "46 u30 \n",
- "47 u30 \n",
- "48 u30 \n",
- "49 u30 \n",
- "50 u30 \n",
- "51 u30 \n",
- "52 u30 \n",
- "53 u30 \n",
- "54 u31 \n",
- "55 u31 \n",
- "56 u31 \n",
- "57 u31 \n",
- "58 u31 \n",
- "59 u31 \n",
- "60 u31 \n",
- "61 u31 \n",
- "62 u32 \n",
- "63 u32 \n",
- "64 u32 \n",
- "65 u32 \n",
- "66 u32 \n",
- "67 u32 \n",
- "68 u32 \n",
- "69 u32 \n",
- "100 u60 \n",
- "101 u60 \n",
- "102 u60 \n",
- "103 u60 \n",
- "104 u60 \n",
- "105 u60 \n",
- "106 u60 \n",
- "107 u60 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 12 | \n",
- " 175 | \n",
- " 7 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- " u00 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 177 | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " u20 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_01 | \n",
- " -571542116_02.96 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 178 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542116_02.96 | \n",
- " 571542116_02.164 | \n",
- " c30 | \n",
- "
\n",
- " \n",
- " 40 | \n",
- " 178 | \n",
- " 6 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571556452_01 | \n",
- " 571556452_02 | \n",
- " u30 | \n",
- "
\n",
- " \n",
- " 41 | \n",
- " 178 | \n",
- " 8 | \n",
- " 남 | \n",
- " 북 | \n",
- " 571500475_02 | \n",
- " 571500475_01.26 | \n",
- " u31 | \n",
- "
\n",
- " \n",
- " 42 | \n",
- " 178 | \n",
- " 4 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571540303_02 | \n",
- " -571540303_02 | \n",
- " u32 | \n",
- "
\n",
- " \n",
- " 71 | \n",
- " 210 | \n",
- " 5 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571500535_02 | \n",
- " -571500535_02 | \n",
- " u60 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "12 175 7 북 동 571500487_02 571500487_01.32 \n",
- "21 177 17 NaN NaN 571542810_01.51 571542810_02 \n",
- "22 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "23 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "24 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "25 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "26 178 20 NaN NaN 571542116_01 -571542116_02.96 \n",
- "27 178 20 NaN NaN 571542116_02.96 571542116_02.164 \n",
- "40 178 6 동 서 571556452_01 571556452_02 \n",
- "41 178 8 남 북 571500475_02 571500475_01.26 \n",
- "42 178 4 북 남 571540303_02 -571540303_02 \n",
- "71 210 5 서 북 571500535_02 -571500535_02 \n",
- "\n",
- " node_id \n",
- "12 u00 \n",
- "21 u20 \n",
- "22 c30 \n",
- "23 c30 \n",
- "24 c30 \n",
- "25 c30 \n",
- "26 c30 \n",
- "27 c30 \n",
- "40 u30 \n",
- "41 u31 \n",
- "42 u32 \n",
- "71 u60 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "match7 = self.match6.copy()\n",
- "self.match7 = self.match7[['inter_no', 'move_no', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id', 'node_id']]\n",
- "display(self.match7[self.match7.node_id.isin(self.child_ids)])\n",
- "display(self.matching[self.matching.node_id.isin(self.child_ids)])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 21 | \n",
- " 177 | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " u20 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id node_id\n",
- "21 177 17 NaN NaN 571542810_01.51 571542810_02 u20"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.matching[self.matching.node_id=='u20']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 123,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "2. 중간산출물을 생성합니다.\n",
- "2-1. 매칭 테이블들을 생성했습니다.\n",
- "2-2. 비보호우회전(g)을 배정했습니다.\n",
- "2-3. 직진 및 좌회전(G)을 배정했습니다.\n",
- "2-2. node2num_cycles.json를 저장했습니다.\n"
- ]
- }
- ],
- "source": [
- "self.get_intermediates()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " move_no | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- " node_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 21 | \n",
- " 177 | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " u20 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id node_id\n",
- "21 177 17 NaN NaN 571542810_01.51 571542810_02 u20"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.matching[self.matching.node_id=='u20']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ggggggggg\n",
- "i0\n",
- "571545870_02\n",
- "571542797_02\n",
- "inter_no 175\n",
- "move_no 1\n",
- "inc_dire 동\n",
- "out_dire 남\n",
- "inc_edge_id 571545870_02\n",
- "out_edge_id 571542797_02\n",
- "node_id i0\n",
- "Name: 0, dtype: object\n",
- "i0\n",
- "571510153_02\n",
- "571545870_01\n",
- "inter_no 175\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571510153_02\n",
- "out_edge_id 571545870_01\n",
- "node_id i0\n",
- "Name: 1, dtype: object\n",
- "i0\n",
- "-571542797_02\n",
- "571510153_01\n",
- "inter_no 175\n",
- "move_no 3\n",
- "inc_dire 남\n",
- "out_dire 서\n",
- "inc_edge_id -571542797_02\n",
- "out_edge_id 571510153_01\n",
- "node_id i0\n",
- "Name: 2, dtype: object\n",
- "i0\n",
- "-571500487_01\n",
- "571542797_02\n",
- "inter_no 175\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id -571500487_01\n",
- "out_edge_id 571542797_02\n",
- "node_id i0\n",
- "Name: 3, dtype: object\n",
- "i0\n",
- "-571500487_01\n",
- "571542797_02\n",
- "inter_no 175\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id -571500487_01\n",
- "out_edge_id 571542797_02\n",
- "node_id i0\n",
- "Name: 3, dtype: object\n",
- "i0\n",
- "571510153_02\n",
- "571500487_01\n",
- "inter_no 175\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571510153_02\n",
- "out_edge_id 571500487_01\n",
- "node_id i0\n",
- "Name: 4, dtype: object\n",
- "i0\n",
- "571545870_02\n",
- "571510153_01\n",
- "inter_no 175\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571545870_02\n",
- "out_edge_id 571510153_01\n",
- "node_id i0\n",
- "Name: 5, dtype: object\n",
- "i0\n",
- "571545870_02\n",
- "571510153_01\n",
- "inter_no 175\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571545870_02\n",
- "out_edge_id 571510153_01\n",
- "node_id i0\n",
- "Name: 5, dtype: object\n",
- "i0\n",
- "-571500487_01\n",
- "571545870_01\n",
- "inter_no 175\n",
- "move_no 7\n",
- "inc_dire 북\n",
- "out_dire 동\n",
- "inc_edge_id -571500487_01\n",
- "out_edge_id 571545870_01\n",
- "node_id i0\n",
- "Name: 6, dtype: object\n",
- "i0\n",
- "-571542797_02\n",
- "571500487_01\n",
- "inter_no 175\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542797_02\n",
- "out_edge_id 571500487_01\n",
- "node_id i0\n",
- "Name: 7, dtype: object\n",
- "i0\n",
- "-571542797_02\n",
- "571500487_01\n",
- "inter_no 175\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542797_02\n",
- "out_edge_id 571500487_01\n",
- "node_id i0\n",
- "Name: 7, dtype: object\n",
- "i0\n",
- "-571542797_02\n",
- "571500487_01\n",
- "inter_no 175\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542797_02\n",
- "out_edge_id 571500487_01\n",
- "node_id i0\n",
- "Name: 7, dtype: object\n",
- "i0\n",
- "-571542797_02\n",
- "571500487_01\n",
- "inter_no 175\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542797_02\n",
- "out_edge_id 571500487_01\n",
- "node_id i0\n",
- "Name: 7, dtype: object\n",
- "u00\n",
- "571500487_02\n",
- "571500487_01.32\n",
- "inter_no 175\n",
- "move_no 7\n",
- "inc_dire 북\n",
- "out_dire 동\n",
- "inc_edge_id 571500487_02\n",
- "out_edge_id 571500487_01.32\n",
- "node_id u00\n",
- "Name: 12, dtype: object\n",
- "i1\n",
- "-571542810_01\n",
- "571543469_01\n",
- "inter_no 176\n",
- "move_no 3\n",
- "inc_dire 남\n",
- "out_dire 서\n",
- "inc_edge_id -571542810_01\n",
- "out_edge_id 571543469_01\n",
- "node_id i1\n",
- "Name: 13, dtype: object\n",
- "i1\n",
- "571542797_02.99\n",
- "571542810_01\n",
- "inter_no 176\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542797_02.99\n",
- "out_edge_id 571542810_01\n",
- "node_id i1\n",
- "Name: 14, dtype: object\n",
- "i1\n",
- "571542797_02.99\n",
- "571542810_01\n",
- "inter_no 176\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542797_02.99\n",
- "out_edge_id 571542810_01\n",
- "node_id i1\n",
- "Name: 14, dtype: object\n",
- "i1\n",
- "571543469_02\n",
- "-571542797_02.99\n",
- "inter_no 176\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571543469_02\n",
- "out_edge_id -571542797_02.99\n",
- "node_id i1\n",
- "Name: 15, dtype: object\n",
- "i1\n",
- "571543469_02\n",
- "-571542797_02.99\n",
- "inter_no 176\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571543469_02\n",
- "out_edge_id -571542797_02.99\n",
- "node_id i1\n",
- "Name: 15, dtype: object\n",
- "i1\n",
- "-571542810_01\n",
- "-571542797_02.99\n",
- "inter_no 176\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542810_01\n",
- "out_edge_id -571542797_02.99\n",
- "node_id i1\n",
- "Name: 16, dtype: object\n",
- "i1\n",
- "-571542810_01\n",
- "-571542797_02.99\n",
- "inter_no 176\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542810_01\n",
- "out_edge_id -571542797_02.99\n",
- "node_id i1\n",
- "Name: 16, dtype: object\n",
- "i1\n",
- "-571542810_01\n",
- "-571542797_02.99\n",
- "inter_no 176\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542810_01\n",
- "out_edge_id -571542797_02.99\n",
- "node_id i1\n",
- "Name: 16, dtype: object\n",
- "i2\n",
- "571542811_02\n",
- "571542809_01\n",
- "inter_no 177\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542811_02\n",
- "out_edge_id 571542809_01\n",
- "node_id i2\n",
- "Name: 19, dtype: object\n",
- "i2\n",
- "571542811_02\n",
- "571542809_01\n",
- "inter_no 177\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542811_02\n",
- "out_edge_id 571542809_01\n",
- "node_id i2\n",
- "Name: 19, dtype: object\n",
- "i2\n",
- "-571542809_01\n",
- "571542811_01\n",
- "inter_no 177\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542809_01\n",
- "out_edge_id 571542811_01\n",
- "node_id i2\n",
- "Name: 20, dtype: object\n",
- "i2\n",
- "-571542809_01\n",
- "571542811_01\n",
- "inter_no 177\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542809_01\n",
- "out_edge_id 571542811_01\n",
- "node_id i2\n",
- "Name: 20, dtype: object\n",
- "i2\n",
- "-571542809_01\n",
- "571542811_01\n",
- "inter_no 177\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571542809_01\n",
- "out_edge_id 571542811_01\n",
- "node_id i2\n",
- "Name: 20, dtype: object\n",
- "i3\n",
- "-571500475_01\n",
- "571540304_01\n",
- "inter_no 178\n",
- "move_no 1\n",
- "inc_dire 동\n",
- "out_dire 남\n",
- "inc_edge_id -571500475_01\n",
- "out_edge_id 571540304_01\n",
- "node_id i3\n",
- "Name: 21, dtype: object\n",
- "i3\n",
- "571540303_02.21\n",
- "571500475_01\n",
- "inter_no 178\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571540303_02.21\n",
- "out_edge_id 571500475_01\n",
- "node_id i3\n",
- "Name: 22, dtype: object\n",
- "i3\n",
- "571540303_02.21\n",
- "571500475_01\n",
- "inter_no 178\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571540303_02.21\n",
- "out_edge_id 571500475_01\n",
- "node_id i3\n",
- "Name: 22, dtype: object\n",
- "i3\n",
- "571540303_02.21\n",
- "571500475_01\n",
- "inter_no 178\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571540303_02.21\n",
- "out_edge_id 571500475_01\n",
- "node_id i3\n",
- "Name: 22, dtype: object\n",
- "i3\n",
- "571540304_02\n",
- "571540303_01\n",
- "inter_no 178\n",
- "move_no 3\n",
- "inc_dire 남\n",
- "out_dire 서\n",
- "inc_edge_id 571540304_02\n",
- "out_edge_id 571540303_01\n",
- "node_id i3\n",
- "Name: 23, dtype: object\n",
- "i3\n",
- "571556450_02\n",
- "571540304_01\n",
- "inter_no 178\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571556450_02\n",
- "out_edge_id 571540304_01\n",
- "node_id i3\n",
- "Name: 24, dtype: object\n",
- "i3\n",
- "571556450_02\n",
- "571540304_01\n",
- "inter_no 178\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571556450_02\n",
- "out_edge_id 571540304_01\n",
- "node_id i3\n",
- "Name: 24, dtype: object\n",
- "i3\n",
- "571556450_02\n",
- "571540304_01\n",
- "inter_no 178\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571556450_02\n",
- "out_edge_id 571540304_01\n",
- "node_id i3\n",
- "Name: 24, dtype: object\n",
- "i3\n",
- "571540303_02.21\n",
- "571556450_01\n",
- "inter_no 178\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571540303_02.21\n",
- "out_edge_id 571556450_01\n",
- "node_id i3\n",
- "Name: 25, dtype: object\n",
- "i3\n",
- "-571500475_01\n",
- "571540303_01\n",
- "inter_no 178\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571500475_01\n",
- "out_edge_id 571540303_01\n",
- "node_id i3\n",
- "Name: 26, dtype: object\n",
- "i3\n",
- "-571500475_01\n",
- "571540303_01\n",
- "inter_no 178\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571500475_01\n",
- "out_edge_id 571540303_01\n",
- "node_id i3\n",
- "Name: 26, dtype: object\n",
- "i3\n",
- "-571500475_01\n",
- "571540303_01\n",
- "inter_no 178\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571500475_01\n",
- "out_edge_id 571540303_01\n",
- "node_id i3\n",
- "Name: 26, dtype: object\n",
- "i3\n",
- "571556450_02\n",
- "571500475_01\n",
- "inter_no 178\n",
- "move_no 7\n",
- "inc_dire 북\n",
- "out_dire 동\n",
- "inc_edge_id 571556450_02\n",
- "out_edge_id 571500475_01\n",
- "node_id i3\n",
- "Name: 27, dtype: object\n",
- "i3\n",
- "571540304_02\n",
- "571556450_01\n",
- "inter_no 178\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571540304_02\n",
- "out_edge_id 571556450_01\n",
- "node_id i3\n",
- "Name: 28, dtype: object\n",
- "i3\n",
- "571540304_02\n",
- "571556450_01\n",
- "inter_no 178\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571540304_02\n",
- "out_edge_id 571556450_01\n",
- "node_id i3\n",
- "Name: 28, dtype: object\n",
- "i3\n",
- "571540304_02\n",
- "571556450_01\n",
- "inter_no 178\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571540304_02\n",
- "out_edge_id 571556450_01\n",
- "node_id i3\n",
- "Name: 28, dtype: object\n",
- "u30\n",
- "571556452_01\n",
- "571556452_02\n",
- "inter_no 178\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571556452_01\n",
- "out_edge_id 571556452_02\n",
- "node_id u30\n",
- "Name: 33, dtype: object\n",
- "u31\n",
- "571500475_02\n",
- "571500475_01.26\n",
- "inter_no 178\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571500475_02\n",
- "out_edge_id 571500475_01.26\n",
- "node_id u31\n",
- "Name: 34, dtype: object\n",
- "u32\n",
- "571540303_02\n",
- "-571540303_02\n",
- "inter_no 178\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571540303_02\n",
- "out_edge_id -571540303_02\n",
- "node_id u32\n",
- "Name: 35, dtype: object\n",
- "i8\n",
- "571500617_02\n",
- "571500569_01\n",
- "inter_no 201\n",
- "move_no 1\n",
- "inc_dire 동\n",
- "out_dire 남\n",
- "inc_edge_id 571500617_02\n",
- "out_edge_id 571500569_01\n",
- "node_id i8\n",
- "Name: 36, dtype: object\n",
- "i8\n",
- "571500618_02\n",
- "571500617_01\n",
- "inter_no 201\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571500618_02\n",
- "out_edge_id 571500617_01\n",
- "node_id i8\n",
- "Name: 37, dtype: object\n",
- "i8\n",
- "571500618_02\n",
- "571500617_01\n",
- "inter_no 201\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571500618_02\n",
- "out_edge_id 571500617_01\n",
- "node_id i8\n",
- "Name: 37, dtype: object\n",
- "i8\n",
- "-571500569_01\n",
- "571500618_01\n",
- "inter_no 201\n",
- "move_no 3\n",
- "inc_dire 남\n",
- "out_dire 서\n",
- "inc_edge_id -571500569_01\n",
- "out_edge_id 571500618_01\n",
- "node_id i8\n",
- "Name: 38, dtype: object\n",
- "i8\n",
- "571500583_01\n",
- "571500569_01\n",
- "inter_no 201\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571500583_01\n",
- "out_edge_id 571500569_01\n",
- "node_id i8\n",
- "Name: 39, dtype: object\n",
- "i8\n",
- "571500583_01\n",
- "571500569_01\n",
- "inter_no 201\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571500583_01\n",
- "out_edge_id 571500569_01\n",
- "node_id i8\n",
- "Name: 39, dtype: object\n",
- "i8\n",
- "571500618_02\n",
- "571500583_02\n",
- "inter_no 201\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571500618_02\n",
- "out_edge_id 571500583_02\n",
- "node_id i8\n",
- "Name: 40, dtype: object\n",
- "i8\n",
- "571500617_02\n",
- "571500618_01\n",
- "inter_no 201\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571500617_02\n",
- "out_edge_id 571500618_01\n",
- "node_id i8\n",
- "Name: 41, dtype: object\n",
- "i8\n",
- "571500617_02\n",
- "571500618_01\n",
- "inter_no 201\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571500617_02\n",
- "out_edge_id 571500618_01\n",
- "node_id i8\n",
- "Name: 41, dtype: object\n",
- "i8\n",
- "571500617_02\n",
- "571500618_01\n",
- "inter_no 201\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571500617_02\n",
- "out_edge_id 571500618_01\n",
- "node_id i8\n",
- "Name: 41, dtype: object\n",
- "i8\n",
- "571500583_01\n",
- "571500617_01\n",
- "inter_no 201\n",
- "move_no 7\n",
- "inc_dire 북\n",
- "out_dire 동\n",
- "inc_edge_id 571500583_01\n",
- "out_edge_id 571500617_01\n",
- "node_id i8\n",
- "Name: 42, dtype: object\n",
- "i8\n",
- "-571500569_01\n",
- "571500583_02\n",
- "inter_no 201\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571500569_01\n",
- "out_edge_id 571500583_02\n",
- "node_id i8\n",
- "Name: 43, dtype: object\n",
- "i8\n",
- "-571500569_01\n",
- "571500583_02\n",
- "inter_no 201\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571500569_01\n",
- "out_edge_id 571500583_02\n",
- "node_id i8\n",
- "Name: 43, dtype: object\n",
- "i9\n",
- "571510152_01\n",
- "571510152_01.65\n",
- "inter_no 202\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571510152_01\n",
- "out_edge_id 571510152_01.65\n",
- "node_id i9\n",
- "Name: 48, dtype: object\n",
- "i9\n",
- "571510152_01\n",
- "571510152_01.65\n",
- "inter_no 202\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571510152_01\n",
- "out_edge_id 571510152_01.65\n",
- "node_id i9\n",
- "Name: 48, dtype: object\n",
- "i9\n",
- "571510152_02\n",
- "-571510152_01\n",
- "inter_no 202\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571510152_02\n",
- "out_edge_id -571510152_01\n",
- "node_id i9\n",
- "Name: 49, dtype: object\n",
- "i9\n",
- "571510152_02\n",
- "-571510152_01\n",
- "inter_no 202\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id 571510152_02\n",
- "out_edge_id -571510152_01\n",
- "node_id i9\n",
- "Name: 49, dtype: object\n",
- "i7\n",
- "571542073_01\n",
- "571511538_02\n",
- "inter_no 206\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542073_01\n",
- "out_edge_id 571511538_02\n",
- "node_id i7\n",
- "Name: 50, dtype: object\n",
- "i7\n",
- "571542073_01\n",
- "571511538_02\n",
- "inter_no 206\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571542073_01\n",
- "out_edge_id 571511538_02\n",
- "node_id i7\n",
- "Name: 50, dtype: object\n",
- "i7\n",
- "-571511538_02\n",
- "571542073_02\n",
- "inter_no 206\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571511538_02\n",
- "out_edge_id 571542073_02\n",
- "node_id i7\n",
- "Name: 51, dtype: object\n",
- "i7\n",
- "-571511538_02\n",
- "571542073_02\n",
- "inter_no 206\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id -571511538_02\n",
- "out_edge_id 571542073_02\n",
- "node_id i7\n",
- "Name: 51, dtype: object\n",
- "i6\n",
- "-571542115_01\n",
- "571500585_01\n",
- "inter_no 210\n",
- "move_no 1\n",
- "inc_dire 동\n",
- "out_dire 남\n",
- "inc_edge_id -571542115_01\n",
- "out_edge_id 571500585_01\n",
- "node_id i6\n",
- "Name: 52, dtype: object\n",
- "i6\n",
- "571500535_02.18\n",
- "571542115_01\n",
- "inter_no 210\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571500535_02.18\n",
- "out_edge_id 571542115_01\n",
- "node_id i6\n",
- "Name: 53, dtype: object\n",
- "i6\n",
- "571500535_02.18\n",
- "571542115_01\n",
- "inter_no 210\n",
- "move_no 2\n",
- "inc_dire 서\n",
- "out_dire 동\n",
- "inc_edge_id 571500535_02.18\n",
- "out_edge_id 571542115_01\n",
- "node_id i6\n",
- "Name: 53, dtype: object\n",
- "i6\n",
- "571511538_02.121\n",
- "571500585_01\n",
- "inter_no 210\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571511538_02.121\n",
- "out_edge_id 571500585_01\n",
- "node_id i6\n",
- "Name: 55, dtype: object\n",
- "i6\n",
- "571511538_02.121\n",
- "571500585_01\n",
- "inter_no 210\n",
- "move_no 4\n",
- "inc_dire 북\n",
- "out_dire 남\n",
- "inc_edge_id 571511538_02.121\n",
- "out_edge_id 571500585_01\n",
- "node_id i6\n",
- "Name: 55, dtype: object\n",
- "i6\n",
- "571500535_02.18\n",
- "571511538_01\n",
- "inter_no 210\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571500535_02.18\n",
- "out_edge_id 571511538_01\n",
- "node_id i6\n",
- "Name: 56, dtype: object\n",
- "i6\n",
- "-571542115_01\n",
- "571500535_01\n",
- "inter_no 210\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571542115_01\n",
- "out_edge_id 571500535_01\n",
- "node_id i6\n",
- "Name: 57, dtype: object\n",
- "i6\n",
- "-571542115_01\n",
- "571500535_01\n",
- "inter_no 210\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571542115_01\n",
- "out_edge_id 571500535_01\n",
- "node_id i6\n",
- "Name: 57, dtype: object\n",
- "i6\n",
- "-571542115_01\n",
- "571500535_01\n",
- "inter_no 210\n",
- "move_no 6\n",
- "inc_dire 동\n",
- "out_dire 서\n",
- "inc_edge_id -571542115_01\n",
- "out_edge_id 571500535_01\n",
- "node_id i6\n",
- "Name: 57, dtype: object\n",
- "i6\n",
- "571511538_02.121\n",
- "571542115_01\n",
- "inter_no 210\n",
- "move_no 7\n",
- "inc_dire 북\n",
- "out_dire 동\n",
- "inc_edge_id 571511538_02.121\n",
- "out_edge_id 571542115_01\n",
- "node_id i6\n",
- "Name: 58, dtype: object\n",
- "i6\n",
- "571500585_02\n",
- "571511538_01\n",
- "inter_no 210\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571500585_02\n",
- "out_edge_id 571511538_01\n",
- "node_id i6\n",
- "Name: 59, dtype: object\n",
- "i6\n",
- "571500585_02\n",
- "571511538_01\n",
- "inter_no 210\n",
- "move_no 8\n",
- "inc_dire 남\n",
- "out_dire 북\n",
- "inc_edge_id 571500585_02\n",
- "out_edge_id 571511538_01\n",
- "node_id i6\n",
- "Name: 59, dtype: object\n",
- "u60\n",
- "571500535_02\n",
- "-571500535_02\n",
- "inter_no 210\n",
- "move_no 5\n",
- "inc_dire 서\n",
- "out_dire 북\n",
- "inc_edge_id 571500535_02\n",
- "out_edge_id -571500535_02\n",
- "node_id u60\n",
- "Name: 64, dtype: object\n",
- "ggggrgggg\n",
- "ggggrgggg\n"
- ]
- }
- ],
- "source": [
- "NODE_ID = 'u00'\n",
- "self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n",
- "self.node2init = {}\n",
- "# 모든 노드들을 순회\n",
- "for node in self.nodes:\n",
- " node_id = node.getID()\n",
- " # 모든 connection\n",
- " conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
- " conns = [c for c in conns if c[0] >= 0]\n",
- " conns = sorted(conns, key=lambda x: x[0])\n",
- " state = []\n",
- " # i번째 connection : ci\n",
- " for i, ci in conns:\n",
- " if ci.getTLLinkIndex() < 0:\n",
- " continue\n",
- " are_foes = False\n",
- " # j번째 connection : cj\n",
- " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n",
- " # 그외의 경우에는 are_foes = False (g)\n",
- " for j, cj in conns:\n",
- " # ci, cj의 합류지점이 같으면 통과\n",
- " if ci.getTo() == cj.getTo():\n",
- " continue\n",
- " # ci, cj가 상충되면 are_foes를 True로 지정.\n",
- " if node.areFoes(i, j):\n",
- " are_foes = True\n",
- " break\n",
- " state.append('r' if are_foes else 'g')\n",
- " self.node2init[node_id] = state\n",
- "print(''.join(self.node2init[NODE_ID]))\n",
- "\n",
- "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n",
- "for _, row in self.matching.iterrows():\n",
- " node_id = row.node_id\n",
- " move_no = row.move_no\n",
- " inc_edge_id = row.inc_edge_id\n",
- " out_edge_id = row.out_edge_id\n",
- " if move_no != 21:\n",
- " inc_edge = self.net.getEdge(inc_edge_id)\n",
- " out_edge = self.net.getEdge(out_edge_id)\n",
- " for conn in inc_edge.getConnections(out_edge):\n",
- " index = conn.getTLLinkIndex()\n",
- " if index >= 0:\n",
- " print(inc_edge_id)\n",
- " print(out_edge_id)\n",
- " self.node2init[node_id][index] = 'r'\n",
- "print(''.join(self.node2init[NODE_ID]))\n",
- "\n",
- "# 유턴교차로\n",
- "for _, row in self.u_turn.iterrows():\n",
- " node_id = row.child_id\n",
- " inc_edge_id = row.inc_edge_id\n",
- " out_edge = row.out_edge_id\n",
- " if not (pd.isna(inc_edge_id) and pd.isna(out_edge_id)):\n",
- " inc_edge = self.net.getEdge(inc_edge_id)\n",
- " out_edge = self.net.getEdge(out_edge_id)\n",
- " for conn in inc_edge.getConnections(out_edge):\n",
- " index = conn.getTLLinkIndex()\n",
- " if index >= 0:\n",
- " self.node2init[node_id][index] = 'r'\n",
- "print(''.join(self.node2init[NODE_ID]))\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "2-2. 비보호우회전(g)을 배정했습니다.\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "['g', 'g', 'g', 'g', 'g', 'g']"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.initialize_state()\n",
- "\n",
- "self.node2init['u20']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 131,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['r', 'r', 'g', 'g', 'r', 'r', 'r']"
- ]
- },
- "execution_count": 131,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.node2init['i2']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 132,
- "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",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 175 | \n",
- " i0 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " -571542797_02 | \n",
- " 571500487_01 | \n",
- " grrrgrrrgGGGGrgrr | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 175 | \n",
- " i0 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " -571500487_01 | \n",
- " 571542797_02 | \n",
- " gGGrgrrrgrrrrrgrr | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " i0 | \n",
- " 2 | \n",
- " A | \n",
- " 7 | \n",
- " -571500487_01 | \n",
- " 571545870_01 | \n",
- " grrGgrrrgrrrrrgrr | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 175 | \n",
- " i0 | \n",
- " 2 | \n",
- " B | \n",
- " 3 | \n",
- " -571542797_02 | \n",
- " 571510153_01 | \n",
- " grrrgrrrgrrrrGgrr | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 175 | \n",
- " i0 | \n",
- " 3 | \n",
- " A | \n",
- " 6 | \n",
- " 571545870_02 | \n",
- " 571510153_01 | \n",
- " grrrgGGrgrrrrrgrr | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 175 | \n",
- " i0 | \n",
- " 3 | \n",
- " B | \n",
- " 1 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
- " grrrgrrGgrrrrrgrr | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 175 | \n",
- " i0 | \n",
- " 4 | \n",
- " A | \n",
- " 5 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
- " grrrgrrrgrrrrrgrG | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 175 | \n",
- " i0 | \n",
- " 4 | \n",
- " B | \n",
- " 2 | \n",
- " 571510153_02 | \n",
- " 571545870_01 | \n",
- " grrrgrrrgrrrrrgGr | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 175 | \n",
- " u00 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 175 | \n",
- " u00 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 175 | \n",
- " u00 | \n",
- " 2 | \n",
- " A | \n",
- " 7 | \n",
- " 571500487_02 | \n",
- " 571500487_01.32 | \n",
- " ggggGgggg | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 175 | \n",
- " u00 | \n",
- " 2 | \n",
- " B | \n",
- " 3 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 175 | \n",
- " u00 | \n",
- " 3 | \n",
- " A | \n",
- " 6 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 175 | \n",
- " u00 | \n",
- " 3 | \n",
- " B | \n",
- " 1 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 175 | \n",
- " u00 | \n",
- " 4 | \n",
- " A | \n",
- " 5 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 175 | \n",
- " u00 | \n",
- " 4 | \n",
- " B | \n",
- " 2 | \n",
- " NaN | \n",
- " NaN | \n",
- " ggggrgggg | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n",
- "0 175 i0 1 A 8 -571542797_02 \n",
- "1 175 i0 1 B 4 -571500487_01 \n",
- "2 175 i0 2 A 7 -571500487_01 \n",
- "3 175 i0 2 B 3 -571542797_02 \n",
- "4 175 i0 3 A 6 571545870_02 \n",
- "5 175 i0 3 B 1 571545870_02 \n",
- "6 175 i0 4 A 5 571510153_02 \n",
- "7 175 i0 4 B 2 571510153_02 \n",
- "8 175 u00 1 A 8 NaN \n",
- "9 175 u00 1 B 4 NaN \n",
- "10 175 u00 2 A 7 571500487_02 \n",
- "11 175 u00 2 B 3 NaN \n",
- "12 175 u00 3 A 6 NaN \n",
- "13 175 u00 3 B 1 NaN \n",
- "14 175 u00 4 A 5 NaN \n",
- "15 175 u00 4 B 2 NaN \n",
- "\n",
- " out_edge_id state \n",
- "0 571500487_01 grrrgrrrgGGGGrgrr \n",
- "1 571542797_02 gGGrgrrrgrrrrrgrr \n",
- "2 571545870_01 grrGgrrrgrrrrrgrr \n",
- "3 571510153_01 grrrgrrrgrrrrGgrr \n",
- "4 571510153_01 grrrgGGrgrrrrrgrr \n",
- "5 571542797_02 grrrgrrGgrrrrrgrr \n",
- "6 571500487_01 grrrgrrrgrrrrrgrG \n",
- "7 571545870_01 grrrgrrrgrrrrrgGr \n",
- "8 NaN ggggrgggg \n",
- "9 NaN ggggrgggg \n",
- "10 571500487_01.32 ggggGgggg \n",
- "11 NaN ggggrgggg \n",
- "12 NaN ggggrgggg \n",
- "13 NaN ggggrgggg \n",
- "14 NaN ggggrgggg \n",
- "15 NaN ggggrgggg "
- ]
- },
- "execution_count": 132,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.match6[self.match6.node_id.isin(['i0', 'u00'])]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 127,
- "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",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 22 | \n",
- " 177 | \n",
- " i2 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " -571542809_01 | \n",
- " 571542811_01 | \n",
- " rrggGGG | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 177 | \n",
- " i2 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " 571542811_02 | \n",
- " 571542809_01 | \n",
- " GGggrrr | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 177 | \n",
- " i2 | \n",
- " 2 | \n",
- " A | \n",
- " 17 | \n",
- " NaN | \n",
- " NaN | \n",
- " rrggrrr | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 177 | \n",
- " i2 | \n",
- " 2 | \n",
- " B | \n",
- " 18 | \n",
- " NaN | \n",
- " NaN | \n",
- " rrggrrr | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 177 | \n",
- " u20 | \n",
- " 1 | \n",
- " A | \n",
- " 8 | \n",
- " NaN | \n",
- " NaN | \n",
- " gggggg | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 177 | \n",
- " u20 | \n",
- " 1 | \n",
- " B | \n",
- " 4 | \n",
- " NaN | \n",
- " NaN | \n",
- " gggggg | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 177 | \n",
- " u20 | \n",
- " 2 | \n",
- " A | \n",
- " 17 | \n",
- " 571542810_01.51 | \n",
- " 571542810_02 | \n",
- " ggGggg | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 177 | \n",
- " u20 | \n",
- " 2 | \n",
- " B | \n",
- " 18 | \n",
- " NaN | \n",
- " NaN | \n",
- " gggggg | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n",
- "22 177 i2 1 A 8 -571542809_01 \n",
- "23 177 i2 1 B 4 571542811_02 \n",
- "24 177 i2 2 A 17 NaN \n",
- "25 177 i2 2 B 18 NaN \n",
- "26 177 u20 1 A 8 NaN \n",
- "27 177 u20 1 B 4 NaN \n",
- "28 177 u20 2 A 17 571542810_01.51 \n",
- "29 177 u20 2 B 18 NaN \n",
- "\n",
- " out_edge_id state \n",
- "22 571542811_01 rrggGGG \n",
- "23 571542809_01 GGggrrr \n",
- "24 NaN rrggrrr \n",
- "25 NaN rrggrrr \n",
- "26 NaN gggggg \n",
- "27 NaN gggggg \n",
- "28 571542810_02 ggGggg \n",
- "29 NaN gggggg "
- ]
- },
- "execution_count": 127,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "self.match6[self.match6.node_id.isin(['i2', 'u20'])]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "'''Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n",
- "Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n",
- "`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n",
- "Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n",
- "Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`.'''"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "sts",
- "language": "python",
- "name": "sts"
- },
- "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
-}
diff --git a/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb b/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
index e212fa828..f58d0ada9 100644
--- a/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
+++ b/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
@@ -296,7 +296,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -321,64 +321,70 @@
" \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",
- " node_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",
- " i0 | \n",
+ " left | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
+ " i0 | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 571510153_02 | \n",
" 571545870_01 | \n",
- " i0 | \n",
+ " straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
+ " i0 | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
- " i0 | \n",
+ " left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
+ " i0 | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
- " i0 | \n",
+ " straight | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
+ " i0 | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 571510153_02 | \n",
" 571500487_01 | \n",
- " i0 | \n",
+ " left | \n",
"
\n",
" \n",
" ... | \n",
@@ -389,137 +395,142 @@
" ... | \n",
" ... | \n",
" ... | \n",
+ " ... | \n",
"
\n",
" \n",
" 123 | \n",
" 210 | \n",
+ " i6 | \n",
" 12 | \n",
" 북서 | \n",
" 남동 | \n",
" 571500535_02.18 | \n",
" 571542115_01 | \n",
- " i6 | \n",
+ " straight | \n",
"
\n",
" \n",
" 124 | \n",
" 210 | \n",
+ " i6 | \n",
" 13 | \n",
" 남서 | \n",
" 북서 | \n",
" 571500585_02 | \n",
" 571500535_01 | \n",
- " i6 | \n",
+ " left | \n",
"
\n",
" \n",
" 125 | \n",
" 210 | \n",
+ " i6 | \n",
" 14 | \n",
" 북동 | \n",
" 남서 | \n",
" 571511538_02.121 | \n",
" 571500585_01 | \n",
- " i6 | \n",
+ " straight | \n",
"
\n",
" \n",
" 126 | \n",
" 210 | \n",
+ " i6 | \n",
" 15 | \n",
" 북서 | \n",
" 북동 | \n",
" 571500535_02.18 | \n",
" 571511538_01 | \n",
- " i6 | \n",
+ " left | \n",
"
\n",
" \n",
" 127 | \n",
" 210 | \n",
+ " i6 | \n",
" 16 | \n",
" 남동 | \n",
" 북서 | \n",
" -571542115_01 | \n",
" 571500535_01 | \n",
- " i6 | \n",
+ " straight | \n",
"
\n",
" \n",
"\n",
- "128 rows × 7 columns
\n",
+ "128 rows × 8 columns
\n",
""
],
"text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "0 175 1 동 남 571545870_02 571542797_02 \n",
- "1 175 2 서 동 571510153_02 571545870_01 \n",
- "2 175 3 남 서 -571542797_02 571510153_01 \n",
- "3 175 4 북 남 -571500487_01 571542797_02 \n",
- "4 175 5 서 북 571510153_02 571500487_01 \n",
- ".. ... ... ... ... ... ... \n",
- "123 210 12 북서 남동 571500535_02.18 571542115_01 \n",
- "124 210 13 남서 북서 571500585_02 571500535_01 \n",
- "125 210 14 북동 남서 571511538_02.121 571500585_01 \n",
- "126 210 15 북서 북동 571500535_02.18 571511538_01 \n",
- "127 210 16 남동 북서 -571542115_01 571500535_01 \n",
+ " inter_no node_id move_no inc_dire out_dire inc_edge_id \\\n",
+ "0 175 i0 1 동 남 571545870_02 \n",
+ "1 175 i0 2 서 동 571510153_02 \n",
+ "2 175 i0 3 남 서 -571542797_02 \n",
+ "3 175 i0 4 북 남 -571500487_01 \n",
+ "4 175 i0 5 서 북 571510153_02 \n",
+ ".. ... ... ... ... ... ... \n",
+ "123 210 i6 12 북서 남동 571500535_02.18 \n",
+ "124 210 i6 13 남서 북서 571500585_02 \n",
+ "125 210 i6 14 북동 남서 571511538_02.121 \n",
+ "126 210 i6 15 북서 북동 571500535_02.18 \n",
+ "127 210 i6 16 남동 북서 -571542115_01 \n",
"\n",
- " node_id \n",
- "0 i0 \n",
- "1 i0 \n",
- "2 i0 \n",
- "3 i0 \n",
- "4 i0 \n",
- ".. ... \n",
- "123 i6 \n",
- "124 i6 \n",
- "125 i6 \n",
- "126 i6 \n",
- "127 i6 \n",
+ " out_edge_id turn_type \n",
+ "0 571542797_02 left \n",
+ "1 571545870_01 straight \n",
+ "2 571510153_01 left \n",
+ "3 571542797_02 straight \n",
+ "4 571500487_01 left \n",
+ ".. ... ... \n",
+ "123 571542115_01 straight \n",
+ "124 571500535_01 left \n",
+ "125 571500585_01 straight \n",
+ "126 571511538_01 left \n",
+ "127 571500535_01 straight \n",
"\n",
- "[128 rows x 7 columns]"
+ "[128 rows x 8 columns]"
]
},
+ "execution_count": 4,
"metadata": {},
- "output_type": "display_data"
+ "output_type": "execute_result"
}
],
"source": [
"self.match7 = self.match6.copy()\n",
"self.match7 = self.match7[['inter_no', 'node_id', 'move_no', 'inc_angle', 'out_angle', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id']]\n",
- "# (1) 가능한 (진입방향, 진출방향) 목록 \n",
- "flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
"\n",
- "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
+ "# (1) 각 교차로별 방향 목록 : pdires (possible directions)\n",
"p2dires = {} # parent_id to directions\n",
"for parent_id in self.parent_ids:\n",
" dires = self.match7[self.match7.node_id == parent_id][['inc_dire','out_dire']].values.flatten()\n",
" dires = {dire for dire in dires if type(dire)==str}\n",
" p2dires[parent_id] = dires\n",
"\n",
- "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
+ "# (2) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
"inc2id = {}\n",
"for parent_id in self.parent_ids:\n",
" for inc_dire in p2dires[parent_id]:\n",
" df = self.match7[(self.match7.node_id==parent_id) & (self.match7.inc_dire==inc_dire)]\n",
" inc2id[(parent_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
"\n",
- "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
+ "# (3) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
"out2id = {}\n",
"for parent_id in self.parent_ids:\n",
" for out_dire in p2dires[parent_id]:\n",
" df = self.match7[(self.match7.node_id==parent_id) & (self.match7.out_dire==out_dire)]\n",
" out2id[(parent_id, out_dire)] = df.out_edge_id.iloc[0]\n",
"\n",
- "# (5) 각 parent_id별 이동류번호 목록\n",
+ "# (4) 각 parent_id별 이동류번호 목록\n",
"p2move = dict() # parent id to a list of aligned movement numbers\n",
"for parent_id in self.parent_ids:\n",
" pnema = self.nema[self.nema.inc_dire.isin(p2dires[parent_id]) & self.nema.out_dire.isin(p2dires[parent_id])]\n",
" p2move[parent_id] = list(pnema.move_no)\n",
"\n",
- "# (6) 방위별 방향벡터\n",
+ "# (5) 방위별 방향벡터\n",
"dire2vec = dict() # direction to unit vector\n",
"theta = np.pi/2\n",
"for dire in self.dires:\n",
" dire2vec[dire] = np.array([np.cos(theta), np.sin(theta)])\n",
" theta -= np.pi/4\n",
"\n",
- "# (7) 각 parent_id별 : 각 이동류별 진입/진출 엣지 id\n",
+ "# (6) 각 parent_id별 : 각 이동류별 진입/진출 엣지 id\n",
"p2move2inc_edge_id = dict() # parent id to move2inc_edge_id\n",
"p2move2out_edge_id = dict() # parent id to move2out_edge_id\n",
"for parent_id in self.parent_ids:\n",
@@ -561,7 +572,7 @@
" p2move2inc_edge_id[parent_id] = move2inc_edge_id\n",
" p2move2out_edge_id[parent_id] = move2out_edge_id\n",
"\n",
- "# (8) 각 이동류별 진입/진출 방위\n",
+ "# (7) 각 이동류별 진입/진출 방위\n",
"m2inc_dire = dict()\n",
"m2out_dire = dict()\n",
"for move_no in range(1,17):\n",
@@ -569,7 +580,7 @@
" m2inc_dire[move_no] = row.inc_dire\n",
" m2out_dire[move_no] = row.out_dire\n",
"\n",
- "# (9) 가능한 모든 이동류에 대하여 진입id, 진출id 배정 : matching\n",
+ "# (8) 가능한 모든 이동류에 대하여 진입id, 진출id 배정 : matching\n",
"self.matching = []\n",
"for parent_id in self.parent_ids:\n",
" inter_no = self.node2inter[parent_id]\n",
@@ -583,9 +594,14 @@
" else:\n",
" inc_edge_id = p2move2inc_edge_id[parent_id][move_no]\n",
" out_edge_id = p2move2out_edge_id[parent_id][move_no]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
+ " if (inc_edge_id, out_edge_id) in self.n2io2turn[parent_id]:\n",
+ " turn_type = self.n2io2turn[parent_id][inc_edge_id, out_edge_id]\n",
+ " else:\n",
+ " turn_type = 'left' if move_no%2 else 'straight'\n",
+ " new_row = pd.DataFrame({'inter_no':[inter_no], 'node_id':[parent_id], 'move_no':[move_no],\n",
" 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[parent_id]})\n",
+ " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id],\n",
+ " 'turn_type': turn_type})\n",
" self.matching.append(new_row)\n",
"child_matching = self.match7[self.match7.node_id.isin(self.child_ids)]\n",
"child_matching = child_matching.drop(columns=['inc_angle', 'out_angle'])\n",
@@ -593,26 +609,39 @@
"self.matching = self.matching.dropna(subset=['inc_edge_id', 'out_edge_id'])\\\n",
" .sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n",
"self.matching['move_no'] = self.matching['move_no'].astype(int)\n",
- "display(self.matching)"
+ "self.matching"
]
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{('-571542797_02', '571500487_01'): 'straight',\n",
+ " ('-571500487_01', '571542797_02'): 'straight',\n",
+ " ('-571500487_01', '571545870_01'): 'left',\n",
+ " ('-571542797_02', '571510153_01'): 'left',\n",
+ " ('571545870_02', '571510153_01'): 'straight',\n",
+ " ('571545870_02', '571542797_02'): 'left',\n",
+ " ('571510153_02', '571500487_01'): 'left',\n",
+ " ('571510153_02', '571545870_01'): 'straight'}"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "m2inc_dire = dict()\n",
- "m2out_dire = dict()\n",
- "for move_no in range(1,17):\n",
- " row = self.nema[self.nema.move_no==move_no].iloc[0]\n",
- " m2inc_dire[move_no] = row.inc_dire\n",
- " m2out_dire[move_no] = row.out_dire"
+ "self.n2io2turn['i0']"
]
},
{
"cell_type": "code",
- "execution_count": 37,
+ "execution_count": 62,
"metadata": {},
"outputs": [
{
@@ -637,12 +666,17 @@
" \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",
+ " turn_type | \n",
"
\n",
" \n",
" \n",
@@ -650,145 +684,326 @@
" 0 | \n",
" 175 | \n",
" 1 | \n",
- " 동 | \n",
+ " A | \n",
+ " 8 | \n",
" 남 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 000 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
" i0 | \n",
+ " straight | \n",
" \n",
" \n",
" 1 | \n",
" 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 001 | \n",
+ " 180 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
" 2 | \n",
- " 서 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
" 동 | \n",
- " 571510153_02 | \n",
+ " 001 | \n",
+ " 090 | \n",
+ " -571500487_01 | \n",
" 571545870_01 | \n",
" i0 | \n",
+ " left | \n",
"
\n",
" \n",
- " 2 | \n",
+ " 3 | \n",
" 175 | \n",
+ " 2 | \n",
+ " B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
+ " left | \n",
"
\n",
" \n",
- " 3 | \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \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 북 남 001 \n",
+ "2 175 2 A 7 북 동 001 \n",
+ "3 175 2 B 3 남 서 179 \n",
+ "4 175 3 A 6 동 서 090 \n",
+ "\n",
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "0 000 -571542797_02 571500487_01 i0 straight \n",
+ "1 180 -571500487_01 571542797_02 i0 straight \n",
+ "2 090 -571500487_01 571545870_01 i0 left \n",
+ "3 270 -571542797_02 571510153_01 i0 left \n",
+ "4 270 571545870_02 571510153_01 i0 straight "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "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",
+ " turn_type | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 000 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
" 175 | \n",
+ " 1 | \n",
+ " B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
+ " 001 | \n",
+ " 180 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" i0 | \n",
+ " straight | \n",
"
\n",
" \n",
- " 4 | \n",
+ " 2 | \n",
" 175 | \n",
- " 5 | \n",
- " 서 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
" 북 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 090 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
" i0 | \n",
+ " left | \n",
"
\n",
" \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ " left | \n",
"
\n",
" \n",
- " 135 | \n",
- " 210 | \n",
- " 13 | \n",
- " 남서 | \n",
- " 북서 | \n",
- " 571500585_02 | \n",
- " 571500535_01 | \n",
- " i6 | \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \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 북 남 001 \n",
+ "2 175 2 A 7 북 동 001 \n",
+ "3 175 2 B 3 남 서 179 \n",
+ "4 175 3 A 6 동 서 090 \n",
+ "\n",
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "0 000 -571542797_02 571500487_01 i0 straight \n",
+ "1 180 -571500487_01 571542797_02 i0 straight \n",
+ "2 090 -571500487_01 571545870_01 i0 left \n",
+ "3 270 -571542797_02 571510153_01 i0 left \n",
+ "4 270 571545870_02 571510153_01 i0 straight "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " inter_no | \n",
+ " move_no | \n",
+ " inc_dire | \n",
+ " out_dire | \n",
+ " inc_edge_id | \n",
+ " out_edge_id | \n",
+ " node_id | \n",
"
\n",
+ " \n",
+ " \n",
" \n",
- " 136 | \n",
- " 210 | \n",
- " 14 | \n",
- " 북동 | \n",
- " 남서 | \n",
- " 571511538_02.121 | \n",
- " 571500585_01 | \n",
- " i6 | \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " 동 | \n",
+ " 남 | \n",
+ " 571545870_02 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
"
\n",
" \n",
- " 137 | \n",
- " 210 | \n",
- " 15 | \n",
- " 북서 | \n",
- " 북동 | \n",
- " 571500535_02.18 | \n",
- " 571511538_01 | \n",
- " i6 | \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " 571510153_02 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
"
\n",
" \n",
- " 138 | \n",
- " 210 | \n",
- " 16 | \n",
- " 남동 | \n",
- " 북서 | \n",
- " -571542115_01 | \n",
- " 571500535_01 | \n",
- " i6 | \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
"
\n",
" \n",
- " 139 | \n",
- " 210 | \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
- " 571500535_02 | \n",
- " -571500535_02 | \n",
- " u60 | \n",
+ " 571510153_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
"
\n",
" \n",
"
\n",
- "
140 rows × 7 columns
\n",
"
"
],
"text/plain": [
- " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
- "0 175 1 동 남 571545870_02 571542797_02 \n",
- "1 175 2 서 동 571510153_02 571545870_01 \n",
- "2 175 3 남 서 -571542797_02 571510153_01 \n",
- "3 175 4 북 남 -571500487_01 571542797_02 \n",
- "4 175 5 서 북 571510153_02 571500487_01 \n",
- ".. ... ... ... ... ... ... \n",
- "135 210 13 남서 북서 571500585_02 571500535_01 \n",
- "136 210 14 북동 남서 571511538_02.121 571500585_01 \n",
- "137 210 15 북서 북동 571500535_02.18 571511538_01 \n",
- "138 210 16 남동 북서 -571542115_01 571500535_01 \n",
- "139 210 5 서 북 571500535_02 -571500535_02 \n",
- "\n",
- " node_id \n",
- "0 i0 \n",
- "1 i0 \n",
- "2 i0 \n",
- "3 i0 \n",
- "4 i0 \n",
- ".. ... \n",
- "135 i6 \n",
- "136 i6 \n",
- "137 i6 \n",
- "138 i6 \n",
- "139 u60 \n",
- "\n",
- "[140 rows x 7 columns]"
+ " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id node_id\n",
+ "0 175 1 동 남 571545870_02 571542797_02 i0\n",
+ "1 175 2 서 동 571510153_02 571545870_01 i0\n",
+ "2 175 3 남 서 -571542797_02 571510153_01 i0\n",
+ "3 175 4 북 남 -571500487_01 571542797_02 i0\n",
+ "4 175 5 서 북 571510153_02 571500487_01 i0"
]
},
"metadata": {},
@@ -796,30 +1011,13 @@
}
],
"source": [
- "# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
- "self.matching = []\n",
- "for parent_id in self.parent_ids:\n",
- " inter_no = self.node2inter[parent_id]\n",
- " # 좌회전과 직진(1 ~ 16)\n",
- " for move_no in range(1,17):\n",
- " inc_dire = m2inc_dire[move_no]\n",
- " out_dire = m2out_dire[move_no]\n",
- " if move_no in p2move[parent_id]:\n",
- " inc_edge_id = inc2id[(parent_id, inc_dire)]\n",
- " out_edge_id = out2id[(parent_id, out_dire)]\n",
- " else:\n",
- " inc_edge_id = p2pm2inc_edge_id[parent_id][move_no]\n",
- " out_edge_id = p2pm2out_edge_id[parent_id][move_no]\n",
- " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
- " 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
- " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[parent_id]})\n",
- " self.matching.append(new_row)\n",
- "self.matching.append(self.match7[self.match7.node_id.isin(self.child_ids)])\n",
- "self.matching = pd.concat(self.matching)\n",
- "self.matching = self.matching.dropna(subset=['inc_edge_id', 'out_edge_id'])\\\n",
- " .sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n",
- "self.matching['move_no'] = self.matching['move_no'].astype(int)\n",
- "display(self.matching)"
+ "# display(self.match1.head())\n",
+ "# display(self.match2.head())\n",
+ "# display(self.match3.head())\n",
+ "# display(self.match4.head())\n",
+ "display(self.match5.head())\n",
+ "display(self.match6.head())\n",
+ "display(self.matching.head())"
]
}
],
diff --git a/Analysis/0411_unp-left_p-right-uturn/0416_initialize_state.ipynb b/Analysis/0411_unp-left_p-right-uturn/0416_initialize_state.ipynb
new file mode 100644
index 000000000..3063e63cb
--- /dev/null
+++ b/Analysis/0411_unp-left_p-right-uturn/0416_initialize_state.ipynb
@@ -0,0 +1,2471 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import sys\n",
+ "sys.path.append('../../Scripts')\n",
+ "from preprocess_daily import DailyPreprocessor\n",
+ "from generate_signals import SignalGenerator"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1. 데이터를 로드합니다.\n",
+ "1-1. 네트워크가 로드되었습니다.\n",
+ "1-2. 테이블들이 로드되었습니다.\n",
+ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
+ "1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
+ "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n",
+ "2-1. 매칭 테이블들을 생성했습니다.\n"
+ ]
+ }
+ ],
+ "source": [
+ "self = DailyPreprocessor()\n",
+ "self.load_data() # 1. 데이터 불러오기\n",
+ "self.get_matches() # 2-1 매칭테이블 생성"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'u00': 4, 'u20': 2, 'u30': 4, 'u31': 4, 'u32': 7, 'u60': 8}"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.uid2uindex"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "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",
+ " turn_type | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 000 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 001 | \n",
+ " 180 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 090 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \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 북 남 001 \n",
+ "2 175 2 A 7 북 동 001 \n",
+ "3 175 2 B 3 남 서 179 \n",
+ "4 175 3 A 6 동 서 090 \n",
+ "\n",
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "0 000 -571542797_02 571500487_01 i0 straight \n",
+ "1 180 -571500487_01 571542797_02 i0 straight \n",
+ "2 090 -571500487_01 571545870_01 i0 left \n",
+ "3 270 -571542797_02 571510153_01 i0 left \n",
+ "4 270 571545870_02 571510153_01 i0 straight "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "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",
+ " turn_type | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 000 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 001 | \n",
+ " 180 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 090 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \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 북 남 001 \n",
+ "2 175 2 A 7 북 동 001 \n",
+ "3 175 2 B 3 남 서 179 \n",
+ "4 175 3 A 6 동 서 090 \n",
+ "\n",
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "0 000 -571542797_02 571500487_01 i0 straight \n",
+ "1 180 -571500487_01 571542797_02 i0 straight \n",
+ "2 090 -571500487_01 571545870_01 i0 left \n",
+ "3 270 -571542797_02 571510153_01 i0 left \n",
+ "4 270 571545870_02 571510153_01 i0 straight "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "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 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display(self.match5.head())\n",
+ "display(self.match6.head())\n",
+ "display(self.matching.head())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-2. 비보호우회전(g)을 배정했습니다.\n",
+ "c30 rrrrrr\n",
+ "i0 grrrgrrrgrrrrrgrr\n",
+ "i1 grrrrrrgrr\n",
+ "i2 rrggrrr\n",
+ "i3 grrrrgrrrrgrrrrgrrrr\n",
+ "i6 grrrgrrrrgrrgrrr\n",
+ "i7 rrrggrr\n",
+ "i8 grrrrrrrgrrrgrrr\n",
+ "i9 rrrr\n",
+ "u00 ggggrgggg\n",
+ "u20 ggrggg\n",
+ "u30 ggggrggg\n",
+ "u31 ggggrggg\n",
+ "u32 gggggggr\n",
+ "u60 ggggggggr\n"
+ ]
+ }
+ ],
+ "source": [
+ "self.initialize_state() # 2-2 신호 초기화\n",
+ "for node_id in self.node_ids:\n",
+ " print(node_id, ''.join(self.node2init[node_id]))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-2. 비보호우회전(g)을 배정했습니다.\n",
+ "2-3. 직진 및 좌회전(G)을 배정했습니다.\n"
+ ]
+ },
+ {
+ "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",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 8 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 571500487_02 | \n",
+ " 571500487_01.32 | \n",
+ " ggggGgggg | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 12 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 13 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 14 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 15 | \n",
+ " 175 | \n",
+ " u00 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrgggg | \n",
+ "
\n",
+ " \n",
+ " 26 | \n",
+ " 177 | \n",
+ " u20 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggrggg | \n",
+ "
\n",
+ " \n",
+ " 27 | \n",
+ " 177 | \n",
+ " u20 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggrggg | \n",
+ "
\n",
+ " \n",
+ " 28 | \n",
+ " 177 | \n",
+ " u20 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 17 | \n",
+ " 571542810_01.51 | \n",
+ " 571542810_02 | \n",
+ " ggGggg | \n",
+ "
\n",
+ " \n",
+ " 29 | \n",
+ " 177 | \n",
+ " u20 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 18 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggrggg | \n",
+ "
\n",
+ " \n",
+ " 46 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 47 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 48 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 49 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 50 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 51 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 52 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 571556452_01 | \n",
+ " 571556452_02 | \n",
+ " ggggGggg | \n",
+ "
\n",
+ " \n",
+ " 53 | \n",
+ " 178 | \n",
+ " u30 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 54 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 571500475_02 | \n",
+ " 571500475_01.26 | \n",
+ " ggggGggg | \n",
+ "
\n",
+ " \n",
+ " 55 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 56 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 57 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 58 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 59 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 60 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 6 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 61 | \n",
+ " 178 | \n",
+ " u31 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggrggg | \n",
+ "
\n",
+ " \n",
+ " 62 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 63 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 571540303_02 | \n",
+ " -571540303_02 | \n",
+ " gggggggG | \n",
+ "
\n",
+ " \n",
+ " 64 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 65 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 66 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 67 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 68 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 6 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 69 | \n",
+ " 178 | \n",
+ " u32 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " gggggggr | \n",
+ "
\n",
+ " \n",
+ " 100 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 6 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 101 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 18 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 102 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 5 | \n",
+ " 571500535_02 | \n",
+ " -571500535_02 | \n",
+ " ggggggggG | \n",
+ "
\n",
+ " \n",
+ " 103 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 104 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 105 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 106 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 107 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n",
+ "8 175 u00 1 A 8 NaN \n",
+ "9 175 u00 1 B 4 NaN \n",
+ "10 175 u00 2 A 7 571500487_02 \n",
+ "11 175 u00 2 B 3 NaN \n",
+ "12 175 u00 3 A 6 NaN \n",
+ "13 175 u00 3 B 1 NaN \n",
+ "14 175 u00 4 A 5 NaN \n",
+ "15 175 u00 4 B 2 NaN \n",
+ "26 177 u20 1 A 8 NaN \n",
+ "27 177 u20 1 B 4 NaN \n",
+ "28 177 u20 2 A 17 571542810_01.51 \n",
+ "29 177 u20 2 B 18 NaN \n",
+ "46 178 u30 1 A 8 NaN \n",
+ "47 178 u30 1 B 4 NaN \n",
+ "48 178 u30 2 A 7 NaN \n",
+ "49 178 u30 2 B 3 NaN \n",
+ "50 178 u30 3 A 5 NaN \n",
+ "51 178 u30 3 B 2 NaN \n",
+ "52 178 u30 4 A 6 571556452_01 \n",
+ "53 178 u30 4 B 1 NaN \n",
+ "54 178 u31 1 A 8 571500475_02 \n",
+ "55 178 u31 1 B 4 NaN \n",
+ "56 178 u31 2 A 7 NaN \n",
+ "57 178 u31 2 B 3 NaN \n",
+ "58 178 u31 3 A 5 NaN \n",
+ "59 178 u31 3 B 2 NaN \n",
+ "60 178 u31 4 A 6 NaN \n",
+ "61 178 u31 4 B 1 NaN \n",
+ "62 178 u32 1 A 8 NaN \n",
+ "63 178 u32 1 B 4 571540303_02 \n",
+ "64 178 u32 2 A 7 NaN \n",
+ "65 178 u32 2 B 3 NaN \n",
+ "66 178 u32 3 A 5 NaN \n",
+ "67 178 u32 3 B 2 NaN \n",
+ "68 178 u32 4 A 6 NaN \n",
+ "69 178 u32 4 B 1 NaN \n",
+ "100 210 u60 1 A 6 NaN \n",
+ "101 210 u60 1 B 18 NaN \n",
+ "102 210 u60 2 A 5 571500535_02 \n",
+ "103 210 u60 2 B 2 NaN \n",
+ "104 210 u60 3 A 7 NaN \n",
+ "105 210 u60 3 B 4 NaN \n",
+ "106 210 u60 4 A 8 NaN \n",
+ "107 210 u60 4 B 3 NaN \n",
+ "\n",
+ " out_edge_id state \n",
+ "8 NaN ggggrgggg \n",
+ "9 NaN ggggrgggg \n",
+ "10 571500487_01.32 ggggGgggg \n",
+ "11 NaN ggggrgggg \n",
+ "12 NaN ggggrgggg \n",
+ "13 NaN ggggrgggg \n",
+ "14 NaN ggggrgggg \n",
+ "15 NaN ggggrgggg \n",
+ "26 NaN ggrggg \n",
+ "27 NaN ggrggg \n",
+ "28 571542810_02 ggGggg \n",
+ "29 NaN ggrggg \n",
+ "46 NaN ggggrggg \n",
+ "47 NaN ggggrggg \n",
+ "48 NaN ggggrggg \n",
+ "49 NaN ggggrggg \n",
+ "50 NaN ggggrggg \n",
+ "51 NaN ggggrggg \n",
+ "52 571556452_02 ggggGggg \n",
+ "53 NaN ggggrggg \n",
+ "54 571500475_01.26 ggggGggg \n",
+ "55 NaN ggggrggg \n",
+ "56 NaN ggggrggg \n",
+ "57 NaN ggggrggg \n",
+ "58 NaN ggggrggg \n",
+ "59 NaN ggggrggg \n",
+ "60 NaN ggggrggg \n",
+ "61 NaN ggggrggg \n",
+ "62 NaN gggggggr \n",
+ "63 -571540303_02 gggggggG \n",
+ "64 NaN gggggggr \n",
+ "65 NaN gggggggr \n",
+ "66 NaN gggggggr \n",
+ "67 NaN gggggggr \n",
+ "68 NaN gggggggr \n",
+ "69 NaN gggggggr \n",
+ "100 NaN ggggggggr \n",
+ "101 NaN ggggggggr \n",
+ "102 -571500535_02 ggggggggG \n",
+ "103 NaN ggggggggr \n",
+ "104 NaN ggggggggr \n",
+ "105 NaN ggggggggr \n",
+ "106 NaN ggggggggr \n",
+ "107 NaN ggggggggr "
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.initialize_state() # 2-2 신호 초기화\n",
+ "self.assign_signals() # 2-3 신호 배정\n",
+ "self.match6[self.match6.node_id.isin(self.u_turn_ids)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
+ "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n",
+ "['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
+ "15\n",
+ "8\n",
+ "7\n",
+ "\n",
+ "['u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
+ "['c30']\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(self.node_ids)\n",
+ "print(self.parent_ids)\n",
+ "print(self.child_ids)\n",
+ "print(len(self.node_ids))\n",
+ "print(len(self.parent_ids))\n",
+ "print(len(self.child_ids))\n",
+ "print()\n",
+ "print(self.u_turn_ids)\n",
+ "print(self.coord_ids)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "c30 rrrrrr\n",
+ "u00 ggggrgggg\n",
+ "u20 ggrggg\n",
+ "u30 ggggrggg\n",
+ "u31 ggggrggg\n",
+ "u32 gggggggr\n",
+ "u60 ggggggggr\n"
+ ]
+ }
+ ],
+ "source": [
+ "for node_id in self.child_ids:\n",
+ " state = ''.join(self.node2init[node_id])\n",
+ " print(node_id, state)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "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",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 123 | \n",
+ " 210 | \n",
+ " i6 | \n",
+ " 12 | \n",
+ " 북서 | \n",
+ " 남동 | \n",
+ " 571500535_02.18 | \n",
+ " 571542115_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 124 | \n",
+ " 210 | \n",
+ " i6 | \n",
+ " 13 | \n",
+ " 남서 | \n",
+ " 북서 | \n",
+ " 571500585_02 | \n",
+ " 571500535_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 125 | \n",
+ " 210 | \n",
+ " i6 | \n",
+ " 14 | \n",
+ " 북동 | \n",
+ " 남서 | \n",
+ " 571511538_02.121 | \n",
+ " 571500585_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 126 | \n",
+ " 210 | \n",
+ " i6 | \n",
+ " 15 | \n",
+ " 북서 | \n",
+ " 북동 | \n",
+ " 571500535_02.18 | \n",
+ " 571511538_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 127 | \n",
+ " 210 | \n",
+ " i6 | \n",
+ " 16 | \n",
+ " 남동 | \n",
+ " 북서 | \n",
+ " -571542115_01 | \n",
+ " 571500535_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
128 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id move_no inc_dire out_dire inc_edge_id \\\n",
+ "0 175 i0 1 동 남 571545870_02 \n",
+ "1 175 i0 2 서 동 571510153_02 \n",
+ "2 175 i0 3 남 서 -571542797_02 \n",
+ "3 175 i0 4 북 남 -571500487_01 \n",
+ "4 175 i0 5 서 북 571510153_02 \n",
+ ".. ... ... ... ... ... ... \n",
+ "123 210 i6 12 북서 남동 571500535_02.18 \n",
+ "124 210 i6 13 남서 북서 571500585_02 \n",
+ "125 210 i6 14 북동 남서 571511538_02.121 \n",
+ "126 210 i6 15 북서 북동 571500535_02.18 \n",
+ "127 210 i6 16 남동 북서 -571542115_01 \n",
+ "\n",
+ " out_edge_id turn_type \n",
+ "0 571542797_02 left \n",
+ "1 571545870_01 straight \n",
+ "2 571510153_01 left \n",
+ "3 571542797_02 straight \n",
+ "4 571500487_01 left \n",
+ ".. ... ... \n",
+ "123 571542115_01 straight \n",
+ "124 571500535_01 left \n",
+ "125 571500585_01 straight \n",
+ "126 571511538_01 left \n",
+ "127 571500535_01 straight \n",
+ "\n",
+ "[128 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.matching"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1. 데이터를 로드합니다.\n",
+ "1-1. 네트워크가 로드되었습니다.\n",
+ "1-2. 테이블들이 로드되었습니다.\n",
+ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
+ "1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
+ "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n",
+ "2-1. 매칭 테이블들을 생성했습니다.\n",
+ "2-2. 비보호우회전(g)을 배정했습니다.\n"
+ ]
+ },
+ {
+ "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",
+ " 32 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 1 | \n",
+ " 동 | \n",
+ " 남 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 33 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " -571542809_01 | \n",
+ " 571542107_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 34 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " -571542809_01 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 35 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 571542811_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 36 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 5 | \n",
+ " 서 | \n",
+ " 북 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 37 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 38 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 571542811_02 | \n",
+ " 571542107_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 39 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 40 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 9 | \n",
+ " 북동 | \n",
+ " 남동 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 41 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 10 | \n",
+ " 남서 | \n",
+ " 북동 | \n",
+ " -571542809_01 | \n",
+ " 571542107_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 42 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 11 | \n",
+ " 남동 | \n",
+ " 남서 | \n",
+ " -571542809_01 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 43 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 12 | \n",
+ " 북서 | \n",
+ " 남동 | \n",
+ " 571542811_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 44 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 13 | \n",
+ " 남서 | \n",
+ " 북서 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 45 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 14 | \n",
+ " 북동 | \n",
+ " 남서 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 46 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 15 | \n",
+ " 북서 | \n",
+ " 북동 | \n",
+ " 571542811_02 | \n",
+ " 571542107_01 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 47 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 16 | \n",
+ " 남동 | \n",
+ " 북서 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
+ "32 177 i2 1 동 남 571542107_02 571542809_01 \n",
+ "33 177 i2 2 서 동 -571542809_01 571542107_01 \n",
+ "34 177 i2 3 남 서 -571542809_01 571542809_01 \n",
+ "35 177 i2 4 북 남 571542811_02 571542809_01 \n",
+ "36 177 i2 5 서 북 -571542809_01 571542811_01 \n",
+ "37 177 i2 6 동 서 571542107_02 571542809_01 \n",
+ "38 177 i2 7 북 동 571542811_02 571542107_01 \n",
+ "39 177 i2 8 남 북 -571542809_01 571542811_01 \n",
+ "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n",
+ "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n",
+ "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n",
+ "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n",
+ "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n",
+ "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n",
+ "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n",
+ "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n",
+ "\n",
+ " turn_type \n",
+ "32 left \n",
+ "33 straight \n",
+ "34 left \n",
+ "35 straight \n",
+ "36 straight \n",
+ "37 straight \n",
+ "38 left \n",
+ "39 straight \n",
+ "40 left \n",
+ "41 straight \n",
+ "42 left \n",
+ "43 straight \n",
+ "44 straight \n",
+ "45 straight \n",
+ "46 left \n",
+ "47 straight "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "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",
+ " state | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 32 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 1 | \n",
+ " 동 | \n",
+ " 남 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 33 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " -571542809_01 | \n",
+ " 571542107_01 | \n",
+ " straight | \n",
+ " rrgGrrr | \n",
+ "
\n",
+ " \n",
+ " 34 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " -571542809_01 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 35 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 571542811_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ " GGggrrr | \n",
+ "
\n",
+ " \n",
+ " 36 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 5 | \n",
+ " 서 | \n",
+ " 북 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ " rrggGGG | \n",
+ "
\n",
+ " \n",
+ " 37 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 38 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 571542811_02 | \n",
+ " 571542107_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 39 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ " rrggGGG | \n",
+ "
\n",
+ " \n",
+ " 40 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 9 | \n",
+ " 북동 | \n",
+ " 남동 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 41 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 10 | \n",
+ " 남서 | \n",
+ " 북동 | \n",
+ " -571542809_01 | \n",
+ " 571542107_01 | \n",
+ " straight | \n",
+ " rrgGrrr | \n",
+ "
\n",
+ " \n",
+ " 42 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 11 | \n",
+ " 남동 | \n",
+ " 남서 | \n",
+ " -571542809_01 | \n",
+ " 571542809_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 43 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 12 | \n",
+ " 북서 | \n",
+ " 남동 | \n",
+ " 571542811_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ " GGggrrr | \n",
+ "
\n",
+ " \n",
+ " 44 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 13 | \n",
+ " 남서 | \n",
+ " 북서 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ " rrggGGG | \n",
+ "
\n",
+ " \n",
+ " 45 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 14 | \n",
+ " 북동 | \n",
+ " 남서 | \n",
+ " 571542107_02 | \n",
+ " 571542809_01 | \n",
+ " straight | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 46 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 15 | \n",
+ " 북서 | \n",
+ " 북동 | \n",
+ " 571542811_02 | \n",
+ " 571542107_01 | \n",
+ " left | \n",
+ " rrggrrr | \n",
+ "
\n",
+ " \n",
+ " 47 | \n",
+ " 177 | \n",
+ " i2 | \n",
+ " 16 | \n",
+ " 남동 | \n",
+ " 북서 | \n",
+ " -571542809_01 | \n",
+ " 571542811_01 | \n",
+ " straight | \n",
+ " rrggGGG | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
+ "32 177 i2 1 동 남 571542107_02 571542809_01 \n",
+ "33 177 i2 2 서 동 -571542809_01 571542107_01 \n",
+ "34 177 i2 3 남 서 -571542809_01 571542809_01 \n",
+ "35 177 i2 4 북 남 571542811_02 571542809_01 \n",
+ "36 177 i2 5 서 북 -571542809_01 571542811_01 \n",
+ "37 177 i2 6 동 서 571542107_02 571542809_01 \n",
+ "38 177 i2 7 북 동 571542811_02 571542107_01 \n",
+ "39 177 i2 8 남 북 -571542809_01 571542811_01 \n",
+ "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n",
+ "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n",
+ "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n",
+ "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n",
+ "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n",
+ "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n",
+ "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n",
+ "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n",
+ "\n",
+ " turn_type state \n",
+ "32 left rrggrrr \n",
+ "33 straight rrgGrrr \n",
+ "34 left rrggrrr \n",
+ "35 straight GGggrrr \n",
+ "36 straight rrggGGG \n",
+ "37 straight rrggrrr \n",
+ "38 left rrggrrr \n",
+ "39 straight rrggGGG \n",
+ "40 left rrggrrr \n",
+ "41 straight rrgGrrr \n",
+ "42 left rrggrrr \n",
+ "43 straight GGggrrr \n",
+ "44 straight rrggGGG \n",
+ "45 straight rrggrrr \n",
+ "46 left rrggrrr \n",
+ "47 straight rrggGGG "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import copy\n",
+ "self = DailyPreprocessor()\n",
+ "self.load_data() # 1. 데이터 불러오기\n",
+ "self.get_matches() # 2-1 매칭테이블 생성\n",
+ "self.initialize_state() # 2-2 신호 초기화\n",
+ "display(self.matching[self.matching.node_id=='i2'])\n",
+ "# matching에 신호 배정\n",
+ "for i, row in self.matching.iterrows():\n",
+ " node_id = row.node_id\n",
+ " move_no = row.move_no\n",
+ " inc_edge = self.net.getEdge(row.inc_edge_id)\n",
+ " out_edge = self.net.getEdge(row.out_edge_id)\n",
+ " state = copy.deepcopy(self.node2init[node_id])\n",
+ " for conn in inc_edge.getConnections(out_edge):\n",
+ " index = conn.getTLLinkIndex()\n",
+ " if index >= 0:\n",
+ " state[index] = 'G'\n",
+ " self.matching.at[i, 'state'] = ''.join(state)\n",
+ "\n",
+ "display(self.matching[self.matching.node_id=='i2'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# matching의 각 행을 순회\n",
+ "for row in self.matching.itertuples(index=True):\n",
+ " node_id = row.node_id\n",
+ " move_no = row.move_no\n",
+ " inc_edge_id = row.inc_edge_id\n",
+ " out_edge_id = row.out_edge_id\n",
+ " state = copy.deepcopy(self.node2init)[node_id]\n",
+ "\n",
+ " if move_no != 21:\n",
+ " inc_edge = self.net.getEdge(inc_edge_id)\n",
+ " out_edge = self.net.getEdge(out_edge_id)\n",
+ " for conn in inc_edge.getConnections(out_edge):\n",
+ " index = conn.getTLLinkIndex()\n",
+ " if index >= 0:\n",
+ " state[index] = 'G'\n",
+ " self.matching.at[row.Index, 'state'] = ''.join(state)\n",
+ "\n",
+ "self.matching = self.matching.dropna(subset='state')\n",
+ "self.matching = self.matching.reset_index(drop=True)\n",
+ "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'inc_edge_id', 'out_edge_id', 'state']]\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "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",
+ " turn_type | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 000 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 001 | \n",
+ " 180 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 090 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 103 | \n",
+ " 210 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " 270 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 104 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 000 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ " 105 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 000 | \n",
+ " 180 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 106 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 180 | \n",
+ " 000 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ " straight | \n",
+ "
\n",
+ " \n",
+ " 107 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 180 | \n",
+ " 270 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ " left | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
108 rows × 12 columns
\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 북 남 001 \n",
+ "2 175 2 A 7 북 동 001 \n",
+ "3 175 2 B 3 남 서 179 \n",
+ "4 175 3 A 6 동 서 090 \n",
+ ".. ... ... ... ... ... ... ... \n",
+ "103 210 2 B 2 서 동 270 \n",
+ "104 210 3 A 7 북 동 000 \n",
+ "105 210 3 B 4 북 남 000 \n",
+ "106 210 4 A 8 남 북 180 \n",
+ "107 210 4 B 3 남 서 180 \n",
+ "\n",
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "0 000 -571542797_02 571500487_01 i0 straight \n",
+ "1 180 -571500487_01 571542797_02 i0 straight \n",
+ "2 090 -571500487_01 571545870_01 i0 left \n",
+ "3 270 -571542797_02 571510153_01 i0 left \n",
+ "4 270 571545870_02 571510153_01 i0 straight \n",
+ ".. ... ... ... ... ... \n",
+ "103 090 NaN NaN u60 straight \n",
+ "104 090 NaN NaN u60 left \n",
+ "105 180 NaN NaN u60 straight \n",
+ "106 000 NaN NaN u60 straight \n",
+ "107 270 NaN NaN u60 left \n",
+ "\n",
+ "[108 rows x 12 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-3. 직진 및 좌회전(G)을 배정했습니다.\n"
+ ]
+ },
+ {
+ "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",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " grrrgrrrgGGGGrgrr | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " gGGrgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " grrGgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " grrrgrrrgrrrrGgrr | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " grrrgGGrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 103 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 104 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 105 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 106 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 107 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
108 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n",
+ "0 175 i0 1 A 8 -571542797_02 \n",
+ "1 175 i0 1 B 4 -571500487_01 \n",
+ "2 175 i0 2 A 7 -571500487_01 \n",
+ "3 175 i0 2 B 3 -571542797_02 \n",
+ "4 175 i0 3 A 6 571545870_02 \n",
+ ".. ... ... ... ... ... ... \n",
+ "103 210 u60 2 B 2 NaN \n",
+ "104 210 u60 3 A 7 NaN \n",
+ "105 210 u60 3 B 4 NaN \n",
+ "106 210 u60 4 A 8 NaN \n",
+ "107 210 u60 4 B 3 NaN \n",
+ "\n",
+ " out_edge_id state \n",
+ "0 571500487_01 grrrgrrrgGGGGrgrr \n",
+ "1 571542797_02 gGGrgrrrgrrrrrgrr \n",
+ "2 571545870_01 grrGgrrrgrrrrrgrr \n",
+ "3 571510153_01 grrrgrrrgrrrrGgrr \n",
+ "4 571510153_01 grrrgGGrgrrrrrgrr \n",
+ ".. ... ... \n",
+ "103 NaN ggggggggr \n",
+ "104 NaN ggggggggr \n",
+ "105 NaN ggggggggr \n",
+ "106 NaN ggggggggr \n",
+ "107 NaN ggggggggr \n",
+ "\n",
+ "[108 rows x 8 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display(self.match6)\n",
+ "self.assign_signals() # 2-3 신호배정\n",
+ "display(self.match6)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "sts",
+ "language": "python",
+ "name": "sts"
+ },
+ "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
+}
diff --git a/Intermediates/match6.csv b/Intermediates/match6.csv
index efeac953e..c81cc4a94 100644
--- a/Intermediates/match6.csv
+++ b/Intermediates/match6.csv
@@ -1,34 +1,34 @@
,inter_no,node_id,phase_no,ring_type,move_no,inc_edge_id,out_edge_id,state
-0,175,i0,1,A,8,-571542797_02,571500487_01,rrrrrrrrgGGGGrgrr
-1,175,i0,1,B,4,-571500487_01,571542797_02,rGGrrrrrgrrrrrgrr
-2,175,i0,2,A,7,-571500487_01,571545870_01,rrrGrrrrgrrrrrgrr
-3,175,i0,2,B,3,-571542797_02,571510153_01,rrrrrrrrgrrrrGgrr
-4,175,i0,3,A,6,571545870_02,571510153_01,rrrrrGGrgrrrrrgrr
-5,175,i0,3,B,1,571545870_02,571542797_02,rrrrrrrGgrrrrrgrr
-6,175,i0,4,A,5,571510153_02,571500487_01,rrrrrrrrgrrrrrgrG
-7,175,i0,4,B,2,571510153_02,571545870_01,rrrrrrrrgrrrrrgGr
-8,175,u00,1,A,8,,,ggggggggg
-9,175,u00,1,B,4,,,ggggggggg
+0,175,i0,1,A,8,-571542797_02,571500487_01,grrrgrrrgGGGGrgrr
+1,175,i0,1,B,4,-571500487_01,571542797_02,gGGrgrrrgrrrrrgrr
+2,175,i0,2,A,7,-571500487_01,571545870_01,grrGgrrrgrrrrrgrr
+3,175,i0,2,B,3,-571542797_02,571510153_01,grrrgrrrgrrrrGgrr
+4,175,i0,3,A,6,571545870_02,571510153_01,grrrgGGrgrrrrrgrr
+5,175,i0,3,B,1,571545870_02,571542797_02,grrrgrrGgrrrrrgrr
+6,175,i0,4,A,5,571510153_02,571500487_01,grrrgrrrgrrrrrgrG
+7,175,i0,4,B,2,571510153_02,571545870_01,grrrgrrrgrrrrrgGr
+8,175,u00,1,A,8,,,ggggrgggg
+9,175,u00,1,B,4,,,ggggrgggg
10,175,u00,2,A,7,571500487_02,571500487_01.32,ggggGgggg
-11,175,u00,2,B,3,,,ggggggggg
-12,175,u00,3,A,6,,,ggggggggg
-13,175,u00,3,B,1,,,ggggggggg
-14,175,u00,4,A,5,,,ggggggggg
-15,175,u00,4,B,2,,,ggggggggg
-16,176,i1,1,A,8,-571542810_01,-571542797_02.99,rrrGGGrrrr
-17,176,i1,1,B,4,571542797_02.99,571542810_01,rGGrrrrrrr
-18,176,i1,2,A,8,-571542810_01,-571542797_02.99,rrrGGGrrrr
-19,176,i1,2,B,3,-571542810_01,571543469_01,rrrrrrGrrr
-20,176,i1,3,A,5,571543469_02,-571542797_02.99,rrrrrrrrGG
-21,176,i1,3,B,18,,,rrrrrrrrrr
-22,177,i2,1,A,8,-571542809_01,571542811_01,rrgrGGG
-23,177,i2,1,B,4,571542811_02,571542809_01,GGgrrrr
-24,177,i2,2,A,17,,,rrgrrrr
-25,177,i2,2,B,18,,,rrgrrrr
-26,177,u20,1,A,8,,,gggggg
-27,177,u20,1,B,4,,,gggggg
+11,175,u00,2,B,3,,,ggggrgggg
+12,175,u00,3,A,6,,,ggggrgggg
+13,175,u00,3,B,1,,,ggggrgggg
+14,175,u00,4,A,5,,,ggggrgggg
+15,175,u00,4,B,2,,,ggggrgggg
+16,176,i1,1,A,8,-571542810_01,-571542797_02.99,grrGGGrgrr
+17,176,i1,1,B,4,571542797_02.99,571542810_01,gGGrrrrgrr
+18,176,i1,2,A,8,-571542810_01,-571542797_02.99,grrGGGrgrr
+19,176,i1,2,B,3,-571542810_01,571543469_01,grrrrrGgrr
+20,176,i1,3,A,5,571543469_02,-571542797_02.99,grrrrrrgGG
+21,176,i1,3,B,18,,,grrrrrrgrr
+22,177,i2,1,A,8,-571542809_01,571542811_01,rrggGGG
+23,177,i2,1,B,4,571542811_02,571542809_01,GGggrrr
+24,177,i2,2,A,17,,,rrggrrr
+25,177,i2,2,B,18,,,rrggrrr
+26,177,u20,1,A,8,,,ggrggg
+27,177,u20,1,B,4,,,ggrggg
28,177,u20,2,A,17,571542810_01.51,571542810_02,ggGggg
-29,177,u20,2,B,18,,,gggggg
+29,177,u20,2,B,18,,,ggrggg
30,178,c30,1,A,20,,,rrrrrr
31,178,c30,1,B,20,,,rrrrrr
32,178,c30,2,A,20,571542116_01,-571542116_02.96,GGGrrr
@@ -45,30 +45,30 @@
43,178,i3,3,B,2,571540303_02.21,571500475_01,grrrrgrrrrgrrrrgGGGr
44,178,i3,4,A,6,-571500475_01,571540303_01,grrrrgGGGrgrrrrgrrrr
45,178,i3,4,B,1,-571500475_01,571540304_01,grrrrgrrrGgrrrrgrrrr
-46,178,u30,1,A,8,,,gggggggg
-47,178,u30,1,B,4,,,gggggggg
-48,178,u30,2,A,7,,,gggggggg
-49,178,u30,2,B,3,,,gggggggg
-50,178,u30,3,A,5,,,gggggggg
-51,178,u30,3,B,2,,,gggggggg
+46,178,u30,1,A,8,,,ggggrggg
+47,178,u30,1,B,4,,,ggggrggg
+48,178,u30,2,A,7,,,ggggrggg
+49,178,u30,2,B,3,,,ggggrggg
+50,178,u30,3,A,5,,,ggggrggg
+51,178,u30,3,B,2,,,ggggrggg
52,178,u30,4,A,6,571556452_01,571556452_02,ggggGggg
-53,178,u30,4,B,1,,,gggggggg
+53,178,u30,4,B,1,,,ggggrggg
54,178,u31,1,A,8,571500475_02,571500475_01.26,ggggGggg
-55,178,u31,1,B,4,,,gggggggg
-56,178,u31,2,A,7,,,gggggggg
-57,178,u31,2,B,3,,,gggggggg
-58,178,u31,3,A,5,,,gggggggg
-59,178,u31,3,B,2,,,gggggggg
-60,178,u31,4,A,6,,,gggggggg
-61,178,u31,4,B,1,,,gggggggg
-62,178,u32,1,A,8,,,gggggggg
+55,178,u31,1,B,4,,,ggggrggg
+56,178,u31,2,A,7,,,ggggrggg
+57,178,u31,2,B,3,,,ggggrggg
+58,178,u31,3,A,5,,,ggggrggg
+59,178,u31,3,B,2,,,ggggrggg
+60,178,u31,4,A,6,,,ggggrggg
+61,178,u31,4,B,1,,,ggggrggg
+62,178,u32,1,A,8,,,gggggggr
63,178,u32,1,B,4,571540303_02,-571540303_02,gggggggG
-64,178,u32,2,A,7,,,gggggggg
-65,178,u32,2,B,3,,,gggggggg
-66,178,u32,3,A,5,,,gggggggg
-67,178,u32,3,B,2,,,gggggggg
-68,178,u32,4,A,6,,,gggggggg
-69,178,u32,4,B,1,,,gggggggg
+64,178,u32,2,A,7,,,gggggggr
+65,178,u32,2,B,3,,,gggggggr
+66,178,u32,3,A,5,,,gggggggr
+67,178,u32,3,B,2,,,gggggggr
+68,178,u32,4,A,6,,,gggggggr
+69,178,u32,4,B,1,,,gggggggr
70,201,i8,1,A,8,-571500569_01,571500583_02,grrrrrrrgGGrgrrr
71,201,i8,1,B,3,-571500569_01,571500618_01,grrrrrrrgrrGgrrr
72,201,i8,2,A,5,571500618_02,571500583_02,grrrrrrrgrrrgrrG
@@ -83,14 +83,14 @@
81,202,i9,1,B,2,571510152_01,571510152_01.65,rrGG
82,202,i9,2,A,17,,,rrrr
83,202,i9,2,B,18,,,rrrr
-84,206,i7,1,A,8,-571511538_02,571542073_02,rrrrrGG
-85,206,i7,1,B,4,571542073_01,571511538_02,GGrrrrr
-86,206,i7,2,A,17,,,rrrrrrr
-87,206,i7,2,B,18,,,rrrrrrr
-88,206,i7,3,A,8,-571511538_02,571542073_02,rrrrrGG
-89,206,i7,3,B,4,571542073_01,571511538_02,GGrrrrr
-90,206,i7,4,A,17,,,rrrrrrr
-91,206,i7,4,B,18,,,rrrrrrr
+84,206,i7,1,A,8,-571511538_02,571542073_02,rrrggGG
+85,206,i7,1,B,4,571542073_01,571511538_02,GGrggrr
+86,206,i7,2,A,17,,,rrrggrr
+87,206,i7,2,B,18,,,rrrggrr
+88,206,i7,3,A,8,-571511538_02,571542073_02,rrrggGG
+89,206,i7,3,B,4,571542073_01,571511538_02,GGrggrr
+90,206,i7,4,A,17,,,rrrggrr
+91,206,i7,4,B,18,,,rrrggrr
92,210,i6,1,A,6,-571542115_01,571500535_01,grrrgGGGrgrrgrrr
93,210,i6,1,B,18,,,grrrgrrrrgrrgrrr
94,210,i6,2,A,5,571500535_02.18,571511538_01,grrrgrrrrgrrgrrG
@@ -99,11 +99,11 @@
97,210,i6,3,B,4,571511538_02.121,571500585_01,gGGrgrrrrgrrgrrr
98,210,i6,4,A,8,571500585_02,571511538_01,grrrgrrrrgGGgrrr
99,210,i6,4,B,3,571500585_02,571500535_01,grrrgrrrrgrrgrrr
-100,210,u60,1,A,6,,,ggggggggg
-101,210,u60,1,B,18,,,ggggggggg
+100,210,u60,1,A,6,,,ggggggggr
+101,210,u60,1,B,18,,,ggggggggr
102,210,u60,2,A,5,571500535_02,-571500535_02,ggggggggG
-103,210,u60,2,B,2,,,ggggggggg
-104,210,u60,3,A,7,,,ggggggggg
-105,210,u60,3,B,4,,,ggggggggg
-106,210,u60,4,A,8,,,ggggggggg
-107,210,u60,4,B,3,,,ggggggggg
+103,210,u60,2,B,2,,,ggggggggr
+104,210,u60,3,A,7,,,ggggggggr
+105,210,u60,3,B,4,,,ggggggggr
+106,210,u60,4,A,8,,,ggggggggr
+107,210,u60,4,B,3,,,ggggggggr
diff --git a/Intermediates/matching.csv b/Intermediates/matching.csv
index 28abf6c3a..ca051a80f 100644
--- a/Intermediates/matching.csv
+++ b/Intermediates/matching.csv
@@ -1,52 +1,52 @@
inter_no,node_id,move_no,inc_edge_id,out_edge_id,state
-175,i0,1,571545870_02,571542797_02,rrrrrrrGgrrrrrgrr
-175,i0,2,571510153_02,571545870_01,rrrrrrrrgrrrrrgGr
-175,i0,3,-571542797_02,571510153_01,rrrrrrrrgrrrrGgrr
-175,i0,4,-571500487_01,571542797_02,rGGrrrrrgrrrrrgrr
-175,i0,5,571510153_02,571500487_01,rrrrrrrrgrrrrrgrG
-175,i0,6,571545870_02,571510153_01,rrrrrGGrgrrrrrgrr
-175,i0,7,-571500487_01,571545870_01,rrrGrrrrgrrrrrgrr
-175,i0,8,-571542797_02,571500487_01,rrrrrrrrgGGGGrgrr
-175,i0,9,-571500487_01,571545870_01,rrrGrrrrgrrrrrgrr
-175,i0,10,571510153_02,571500487_01,rrrrrrrrgrrrrrgrG
-175,i0,11,571545870_02,571510153_01,rrrrrGGrgrrrrrgrr
-175,i0,12,-571500487_01,571545870_01,rrrGrrrrgrrrrrgrr
-175,i0,13,571510153_02,571500487_01,rrrrrrrrgrrrrrgrG
-175,i0,14,-571500487_01,571510153_01,Grrrrrrrgrrrrrgrr
-175,i0,15,-571500487_01,571500487_01,rrrrrrrrgrrrrrgrr
-175,i0,16,571545870_02,571500487_01,rrrrGrrrgrrrrrgrr
-176,i1,1,571542797_02.99,571542810_01,rGGrrrrrrr
-176,i1,2,571543469_02,-571542797_02.99,rrrrrrrrGG
-176,i1,3,-571542810_01,571543469_01,rrrrrrGrrr
-176,i1,4,571542797_02.99,571542810_01,rGGrrrrrrr
-176,i1,5,571543469_02,-571542797_02.99,rrrrrrrrGG
-176,i1,6,571542797_02.99,571543469_01,Grrrrrrrrr
-176,i1,7,571542797_02.99,-571542797_02.99,rrrrrrrrrr
-176,i1,8,-571542810_01,-571542797_02.99,rrrGGGrrrr
-176,i1,9,571542797_02.99,571542810_01,rGGrrrrrrr
-176,i1,10,-571542810_01,-571542797_02.99,rrrGGGrrrr
-176,i1,11,-571542810_01,571542810_01,rrrrrrrrrr
-176,i1,12,571543469_02,571542810_01,rrrrrrrGrr
-176,i1,13,-571542810_01,571543469_01,rrrrrrGrrr
-176,i1,14,571542797_02.99,571542810_01,rGGrrrrrrr
-176,i1,15,571543469_02,-571542797_02.99,rrrrrrrrGG
-176,i1,16,-571542810_01,571543469_01,rrrrrrGrrr
-177,i2,1,571542107_02,571542809_01,rrgrrrr
+175,i0,1,571545870_02,571542797_02,grrrgrrGgrrrrrgrr
+175,i0,2,571510153_02,571545870_01,grrrgrrrgrrrrrgGr
+175,i0,3,-571542797_02,571510153_01,grrrgrrrgrrrrGgrr
+175,i0,4,-571500487_01,571542797_02,gGGrgrrrgrrrrrgrr
+175,i0,5,571510153_02,571500487_01,grrrgrrrgrrrrrgrG
+175,i0,6,571545870_02,571510153_01,grrrgGGrgrrrrrgrr
+175,i0,7,-571500487_01,571545870_01,grrGgrrrgrrrrrgrr
+175,i0,8,-571542797_02,571500487_01,grrrgrrrgGGGGrgrr
+175,i0,9,-571500487_01,571545870_01,grrGgrrrgrrrrrgrr
+175,i0,10,571510153_02,571500487_01,grrrgrrrgrrrrrgrG
+175,i0,11,571545870_02,571510153_01,grrrgGGrgrrrrrgrr
+175,i0,12,-571500487_01,571545870_01,grrGgrrrgrrrrrgrr
+175,i0,13,571510153_02,571500487_01,grrrgrrrgrrrrrgrG
+175,i0,14,-571500487_01,571510153_01,Grrrgrrrgrrrrrgrr
+175,i0,15,-571500487_01,571500487_01,grrrgrrrgrrrrrgrr
+175,i0,16,571545870_02,571500487_01,grrrGrrrgrrrrrgrr
+176,i1,1,571542797_02.99,571542810_01,gGGrrrrgrr
+176,i1,2,571543469_02,-571542797_02.99,grrrrrrgGG
+176,i1,3,-571542810_01,571543469_01,grrrrrGgrr
+176,i1,4,571542797_02.99,571542810_01,gGGrrrrgrr
+176,i1,5,571543469_02,-571542797_02.99,grrrrrrgGG
+176,i1,6,571542797_02.99,571543469_01,Grrrrrrgrr
+176,i1,7,571542797_02.99,-571542797_02.99,grrrrrrgrr
+176,i1,8,-571542810_01,-571542797_02.99,grrGGGrgrr
+176,i1,9,571542797_02.99,571542810_01,gGGrrrrgrr
+176,i1,10,-571542810_01,-571542797_02.99,grrGGGrgrr
+176,i1,11,-571542810_01,571542810_01,grrrrrrgrr
+176,i1,12,571543469_02,571542810_01,grrrrrrGrr
+176,i1,13,-571542810_01,571543469_01,grrrrrGgrr
+176,i1,14,571542797_02.99,571542810_01,gGGrrrrgrr
+176,i1,15,571543469_02,-571542797_02.99,grrrrrrgGG
+176,i1,16,-571542810_01,571543469_01,grrrrrGgrr
+177,i2,1,571542107_02,571542809_01,rrggrrr
177,i2,2,-571542809_01,571542107_01,rrgGrrr
-177,i2,3,-571542809_01,571542809_01,rrgrrrr
-177,i2,4,571542811_02,571542809_01,GGgrrrr
-177,i2,5,-571542809_01,571542811_01,rrgrGGG
-177,i2,6,571542107_02,571542809_01,rrgrrrr
-177,i2,7,571542811_02,571542107_01,rrgrrrr
-177,i2,8,-571542809_01,571542811_01,rrgrGGG
-177,i2,9,571542107_02,571542809_01,rrgrrrr
+177,i2,3,-571542809_01,571542809_01,rrggrrr
+177,i2,4,571542811_02,571542809_01,GGggrrr
+177,i2,5,-571542809_01,571542811_01,rrggGGG
+177,i2,6,571542107_02,571542809_01,rrggrrr
+177,i2,7,571542811_02,571542107_01,rrggrrr
+177,i2,8,-571542809_01,571542811_01,rrggGGG
+177,i2,9,571542107_02,571542809_01,rrggrrr
177,i2,10,-571542809_01,571542107_01,rrgGrrr
-177,i2,11,-571542809_01,571542809_01,rrgrrrr
-177,i2,12,571542811_02,571542809_01,GGgrrrr
-177,i2,13,-571542809_01,571542811_01,rrgrGGG
-177,i2,14,571542107_02,571542809_01,rrgrrrr
-177,i2,15,571542811_02,571542107_01,rrgrrrr
-177,i2,16,-571542809_01,571542811_01,rrgrGGG
+177,i2,11,-571542809_01,571542809_01,rrggrrr
+177,i2,12,571542811_02,571542809_01,GGggrrr
+177,i2,13,-571542809_01,571542811_01,rrggGGG
+177,i2,14,571542107_02,571542809_01,rrggrrr
+177,i2,15,571542811_02,571542107_01,rrggrrr
+177,i2,16,-571542809_01,571542811_01,rrggGGG
178,i3,1,-571500475_01,571540304_01,grrrrgrrrGgrrrrgrrrr
178,i3,2,571540303_02.21,571500475_01,grrrrgrrrrgrrrrgGGGr
178,i3,3,571540304_02,571540303_01,grrrrgrrrrgrrrGgrrrr
@@ -95,22 +95,22 @@ inter_no,node_id,move_no,inc_edge_id,out_edge_id,state
202,i9,14,571510152_02,-571510152_01,GGrr
202,i9,15,571510152_01,571510152_01.65,rrGG
202,i9,16,571510152_02,-571510152_01,GGrr
-206,i7,1,571542071_02,571511538_02,rrrrrrr
-206,i7,2,-571511538_02,571542071_01,rrrrGrr
-206,i7,3,-571511538_02,571511538_02,rrrrrrr
-206,i7,4,571542073_01,571511538_02,GGrrrrr
-206,i7,5,-571511538_02,571542073_02,rrrrrGG
-206,i7,6,571542071_02,571511538_02,rrrrrrr
-206,i7,7,571542073_01,571542071_01,rrGrrrr
-206,i7,8,-571511538_02,571542073_02,rrrrrGG
-206,i7,9,571542073_01,571542071_01,rrGrrrr
-206,i7,10,-571511538_02,571542073_02,rrrrrGG
-206,i7,11,571542071_02,571511538_02,rrrrrrr
-206,i7,12,571542073_01,571542071_01,rrGrrrr
-206,i7,13,-571511538_02,571542073_02,rrrrrGG
-206,i7,14,571542073_01,571511538_02,GGrrrrr
-206,i7,15,571542073_01,571542073_02,rrrrrrr
-206,i7,16,571542071_02,571542073_02,rrrGrrr
+206,i7,1,571542071_02,571511538_02,rrrggrr
+206,i7,2,-571511538_02,571542071_01,rrrgGrr
+206,i7,3,-571511538_02,571511538_02,rrrggrr
+206,i7,4,571542073_01,571511538_02,GGrggrr
+206,i7,5,-571511538_02,571542073_02,rrrggGG
+206,i7,6,571542071_02,571511538_02,rrrggrr
+206,i7,7,571542073_01,571542071_01,rrGggrr
+206,i7,8,-571511538_02,571542073_02,rrrggGG
+206,i7,9,571542073_01,571542071_01,rrGggrr
+206,i7,10,-571511538_02,571542073_02,rrrggGG
+206,i7,11,571542071_02,571511538_02,rrrggrr
+206,i7,12,571542073_01,571542071_01,rrGggrr
+206,i7,13,-571511538_02,571542073_02,rrrggGG
+206,i7,14,571542073_01,571511538_02,GGrggrr
+206,i7,15,571542073_01,571542073_02,rrrggrr
+206,i7,16,571542071_02,571542073_02,rrrGgrr
210,i6,1,-571542115_01,571500585_01,grrrgrrrGgrrgrrr
210,i6,2,571500535_02.18,571542115_01,grrrgrrrrgrrgGGr
210,i6,3,571500585_02,571500535_01,grrrgrrrrgrrgrrr
diff --git a/Intermediates/node2init.json b/Intermediates/node2init.json
index 6bb22dc8f..10176bfea 100644
--- a/Intermediates/node2init.json
+++ b/Intermediates/node2init.json
@@ -1 +1 @@
-{"c30": ["r", "r", "r", "r", "r", "r"], "i0": ["r", "r", "r", "r", "r", "r", "r", "r", "g", "r", "r", "r", "r", "r", "g", "r", "r"], "i1": ["r", "r", "r", "r", "r", "r", "r", "r", "r", "r"], "i2": ["r", "r", "g", "r", "r", "r", "r"], "i3": ["g", "r", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "r", "r"], "i6": ["g", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "g", "r", "r", "r"], "i7": ["r", "r", "r", "r", "r", "r", "r"], "i8": ["g", "r", "r", "r", "r", "r", "r", "r", "g", "r", "r", "r", "g", "r", "r", "r"], "i9": ["r", "r", "r", "r"], "u00": ["g", "g", "g", "g", "g", "g", "g", "g", "g"], "u20": ["g", "g", "g", "g", "g", "g"], "u30": ["g", "g", "g", "g", "g", "g", "g", "g"], "u31": ["g", "g", "g", "g", "g", "g", "g", "g"], "u32": ["g", "g", "g", "g", "g", "g", "g", "g"], "u60": ["g", "g", "g", "g", "g", "g", "g", "g", "g"]}
\ No newline at end of file
+{"c30": ["r", "r", "r", "r", "r", "r"], "i0": ["g", "r", "r", "r", "g", "r", "r", "r", "g", "r", "r", "r", "r", "r", "g", "r", "r"], "i1": ["g", "r", "r", "r", "r", "r", "r", "g", "r", "r"], "i2": ["r", "r", "g", "g", "r", "r", "r"], "i3": ["g", "r", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "r", "r"], "i6": ["g", "r", "r", "r", "g", "r", "r", "r", "r", "g", "r", "r", "g", "r", "r", "r"], "i7": ["r", "r", "r", "g", "g", "r", "r"], "i8": ["g", "r", "r", "r", "r", "r", "r", "r", "g", "r", "r", "r", "g", "r", "r", "r"], "i9": ["r", "r", "r", "r"], "u00": ["g", "g", "g", "g", "r", "g", "g", "g", "g"], "u20": ["g", "g", "r", "g", "g", "g"], "u30": ["g", "g", "g", "g", "r", "g", "g", "g"], "u31": ["g", "g", "g", "g", "r", "g", "g", "g"], "u32": ["g", "g", "g", "g", "g", "g", "g", "r"], "u60": ["g", "g", "g", "g", "g", "g", "g", "g", "r"]}
\ No newline at end of file
diff --git a/Results/sn_1704417600.add.xml b/Results/sn_1704417600.add.xml
index cdf2d488e..f08f9d10f 100644
--- a/Results/sn_1704417600.add.xml
+++ b/Results/sn_1704417600.add.xml
@@ -1,233 +1,189 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -285,52 +241,52 @@
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
@@ -387,248 +343,224 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc
index 8ea041067..dc0cb62ea 100644
Binary files a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc and b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc differ
diff --git a/Scripts/preprocess_daily.py b/Scripts/preprocess_daily.py
index b1ffaaf99..ba70ead87 100644
--- a/Scripts/preprocess_daily.py
+++ b/Scripts/preprocess_daily.py
@@ -403,13 +403,13 @@ class DailyPreprocessor():
self.match5 = self.match5.sort_values(by=['inter_no','phase_no','ring_type']).reset_index(drop=True)
# n2io2turn : dictionary that maps node_id to io2turn
- n2io2turn = dict()
+ self.n2io2turn = dict()
for node_id in self.parent_ids:
turn = self.turn_type[self.turn_type.node_id==node_id]
io = list(zip(turn.inc_edge_id, turn.out_edge_id))
# io2turn : dictionary that maps (inc_edge_id, out_edge_id) to turn_type
io2turn = dict(zip(io, turn.turn_type))
- n2io2turn[node_id] = io2turn
+ self.n2io2turn[node_id] = io2turn
# turn_type 지정
for i, row in self.match5.iterrows():
@@ -417,7 +417,7 @@ class DailyPreprocessor():
inc_edge_id = row.inc_edge_id
out_edge_id = row.out_edge_id
if not (pd.isna(inc_edge_id) and pd.isna(out_edge_id)):
- turn_type = n2io2turn[node_id][(inc_edge_id, out_edge_id)]
+ turn_type = self.n2io2turn[node_id][(inc_edge_id, out_edge_id)]
self.match5.at[i, 'turn_type'] = turn_type
# 2-1-6
@@ -427,7 +427,6 @@ class DailyPreprocessor():
컬럼명 : inter_no, phase_no, ring_type, move_no, inc_dire, out_dire, inc_angle, out_angle, inc_edge_id, out_edge_id, node_id
'''
-
self.u_turn = pd.merge(self.u_turn, self.u_condition, on='child_id')
# p2inc_edge2angle : node_id to inc_edge2angle
@@ -454,6 +453,8 @@ class DailyPreprocessor():
out_angle2edge = dict(zip(m5.out_angle.astype(int), m5.out_edge_id))
p2out_angle2edge[node_id] = out_angle2edge
+ self.uid2uindex = dict() # u_turn node id to u_turn index
+
# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여
cmatches = []
for row in self.u_turn.itertuples():
@@ -464,7 +465,13 @@ class DailyPreprocessor():
out_edge_id = row.out_edge_id
adj_inc_edge_id = row.adj_inc_edge_id
adj_out_edge_id = row.adj_out_edge_id
-
+
+ # self.uid2uindex 지정
+ inc_edge = self.net.getEdge(inc_edge_id)
+ out_edge = self.net.getEdge(out_edge_id)
+ u_turn_conn = inc_edge.getConnections(out_edge)[0]
+ self.uid2uindex[child_id] = u_turn_conn.getTLLinkIndex()
+
# match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)
cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node
cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)
@@ -554,12 +561,15 @@ class DailyPreprocessor():
self.coord['move_no'] = 20
self.coord = self.coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dire', 'out_dire', 'inc_angle','out_angle', 'inc_edge_id', 'out_edge_id', 'node_id']]
- # display(coord)
cmatches = pd.concat(cmatches)
self.match6 = pd.concat([self.match5, cmatches, self.coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])
self.match6 = self.match6.reset_index(drop=True)
- # self.match6.to_csv(os.path.join(self.path_intermediates, 'match6.csv'))
-
+
+
+ # json 파일로 저장 # to be deprecated
+ with open(os.path.join(self.path_intermediates, 'uid2uindex.json'), 'w') as file:
+ json.dump(self.uid2uindex, file)
+
# 2-1-7
def make_matching(self):
@@ -572,44 +582,42 @@ class DailyPreprocessor():
self.match7 = self.match6.copy()
self.match7 = self.match7[['inter_no', 'node_id', 'move_no', 'inc_angle', 'out_angle', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id']]
- # (1) 가능한 (진입방향, 진출방향) 목록
- flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()
- # (2) 각 교차로별 방향 목록 : pdires (possible directions)
+ # (1) 각 교차로별 방향 목록 : pdires (possible directions)
p2dires = {} # parent_id to directions
for parent_id in self.parent_ids:
dires = self.match7[self.match7.node_id == parent_id][['inc_dire','out_dire']].values.flatten()
dires = {dire for dire in dires if type(dire)==str}
p2dires[parent_id] = dires
- # (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)
+ # (2) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)
inc2id = {}
for parent_id in self.parent_ids:
for inc_dire in p2dires[parent_id]:
df = self.match7[(self.match7.node_id==parent_id) & (self.match7.inc_dire==inc_dire)]
inc2id[(parent_id, inc_dire)] = df.inc_edge_id.iloc[0]
- # (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)
+ # (3) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)
out2id = {}
for parent_id in self.parent_ids:
for out_dire in p2dires[parent_id]:
df = self.match7[(self.match7.node_id==parent_id) & (self.match7.out_dire==out_dire)]
out2id[(parent_id, out_dire)] = df.out_edge_id.iloc[0]
- # (5) 각 parent_id별 이동류번호 목록
+ # (4) 각 parent_id별 이동류번호 목록
p2move = dict() # parent id to a list of aligned movement numbers
for parent_id in self.parent_ids:
pnema = self.nema[self.nema.inc_dire.isin(p2dires[parent_id]) & self.nema.out_dire.isin(p2dires[parent_id])]
p2move[parent_id] = list(pnema.move_no)
- # (6) 방위별 방향벡터
+ # (5) 방위별 방향벡터
dire2vec = dict() # direction to unit vector
theta = np.pi/2
for dire in self.dires:
dire2vec[dire] = np.array([np.cos(theta), np.sin(theta)])
theta -= np.pi/4
- # (7) 각 parent_id별 : 각 이동류별 진입/진출 엣지 id
+ # (6) 각 parent_id별 : 각 이동류별 진입/진출 엣지 id
p2move2inc_edge_id = dict() # parent id to move2inc_edge_id
p2move2out_edge_id = dict() # parent id to move2out_edge_id
for parent_id in self.parent_ids:
@@ -651,7 +659,7 @@ class DailyPreprocessor():
p2move2inc_edge_id[parent_id] = move2inc_edge_id
p2move2out_edge_id[parent_id] = move2out_edge_id
- # (8) 각 이동류별 진입/진출 방위
+ # (7) 각 이동류별 진입/진출 방위
m2inc_dire = dict()
m2out_dire = dict()
for move_no in range(1,17):
@@ -659,7 +667,7 @@ class DailyPreprocessor():
m2inc_dire[move_no] = row.inc_dire
m2out_dire[move_no] = row.out_dire
- # (9) 가능한 모든 이동류에 대하여 진입id, 진출id 배정 : matching
+ # (8) 가능한 모든 이동류에 대하여 진입id, 진출id 배정 : matching
self.matching = []
for parent_id in self.parent_ids:
inter_no = self.node2inter[parent_id]
@@ -673,9 +681,14 @@ class DailyPreprocessor():
else:
inc_edge_id = p2move2inc_edge_id[parent_id][move_no]
out_edge_id = p2move2out_edge_id[parent_id][move_no]
- new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],
+ if (inc_edge_id, out_edge_id) in self.n2io2turn[parent_id]:
+ turn_type = self.n2io2turn[parent_id][inc_edge_id, out_edge_id]
+ else:
+ turn_type = 'left' if move_no%2 else 'straight'
+ new_row = pd.DataFrame({'inter_no':[inter_no], 'node_id':[parent_id], 'move_no':[move_no],
'inc_dire':[inc_dire], 'out_dire':[out_dire],
- 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[parent_id]})
+ 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id],
+ 'turn_type': turn_type})
self.matching.append(new_row)
child_matching = self.match7[self.match7.node_id.isin(self.child_ids)]
child_matching = child_matching.drop(columns=['inc_angle', 'out_angle'])
@@ -701,22 +714,19 @@ class DailyPreprocessor():
self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]
self.node2init = {}
# 모든 노드들을 순회
- for node in self.nodes:
- node_id = node.getID()
+ for node_id in self.node_ids:
+ node = self.net.getNode(node_id)
# 모든 connection
conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]
conns = [c for c in conns if c[0] >= 0]
conns = sorted(conns, key=lambda x: x[0])
state = []
- # i번째 connection : ci
- for i, ci in conns:
+ for i, ci in conns: # i번째 connection : ci
if ci.getTLLinkIndex() < 0:
continue
are_foes = False
- # j번째 connection : cj
- # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)
- # 그외의 경우에는 are_foes = False (g)
- for j, cj in conns:
+ # 합류지점이 다르면서 상충되는 cj가 존재하면 r, 그외에는 g
+ for j, cj in conns: # j번째 connection : cj
# ci, cj의 합류지점이 같으면 통과
if ci.getTo() == cj.getTo():
continue
@@ -728,7 +738,7 @@ class DailyPreprocessor():
self.node2init[node_id] = state
# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여
- for _, row in self.matching.iterrows():
+ for _, row in self.match6.dropna(subset=['inc_edge_id', 'out_edge_id']).iterrows():
node_id = row.node_id
move_no = row.move_no
inc_edge_id = row.inc_edge_id
@@ -830,19 +840,6 @@ class DailyPreprocessor():
self.matching.to_csv(os.path.join(self.path_intermediates, 'matching.csv'), index=0)
print('2-3. 직진 및 좌회전(G)을 배정했습니다.')
- uid2uindex = {}
- for uid in self.u_turn_ids:
- states = self.match6[self.match6.node_id==uid].state.unique()
- for state in states:
- if 'G' in state:
- index = state.index('G')
- uid2uindex[uid] = index
- break
-
- # json 파일로 저장
- with open(os.path.join(self.path_intermediates, 'uid2uindex.json'), 'w') as file:
- json.dump(uid2uindex, file)
-
# 2-4 node2num_cycles : A dictionary that maps a node_id to the number of cycles
def get_node2num_cycles(self):
Aplan = self.plan.copy()[['inter_no'] + [f'dura_A{j}' for j in range(1,9)] + ['cycle']]