From a1eb8009170109ba59e88321ee767c069153908f Mon Sep 17 00:00:00 2001 From: govin08 Date: Tue, 16 Apr 2024 13:22:51 +0900 Subject: [PATCH] last modification --- .../0411_match6.ipynb | 391 ++ .../0411_uturn.ipynb | 3860 ----------------- .../0415_matching.ipynb | 538 ++- .../0416_initialize_state.ipynb | 2471 +++++++++++ Intermediates/match6.csv | 128 +- Intermediates/matching.csv | 124 +- Intermediates/node2init.json | 2 +- Results/sn_1704417600.add.xml | 682 ++- .../preprocess_daily.cpython-38.pyc | Bin 26466 -> 27417 bytes Scripts/preprocess_daily.py | 81 +- 10 files changed, 3703 insertions(+), 4574 deletions(-) create mode 100644 Analysis/0411_unp-left_p-right-uturn/0411_match6.ipynb delete mode 100644 Analysis/0411_unp-left_p-right-uturn/0411_uturn.ipynb create mode 100644 Analysis/0411_unp-left_p-right-uturn/0416_initialize_state.ipynb 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
parent_idchild_idadj_inc_edge_idadj_out_edge_idinc_edge_idout_edge_id
0i0u00-571500487_01571500487_01571500487_02571500487_01.32
1i2u20571542811_02571542811_01571542810_01.51571542810_02
2i3u30571556450_02571556450_01571556452_01571556452_02
3i3u31-571500475_01571500475_01571500475_02571500475_01.26
4i3u32571540303_02.21571540303_01571540303_02-571540303_02
5i6u60571500535_02.18571500535_01571500535_02-571500535_02
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parent_idchild_idadj_inc_edge_idadj_out_edge_idinc_edge_idout_edge_id
0i0u00-571500487_01571500487_01571500487_02571500487_01.32
1i2u20571542811_02571542811_01571542810_01.51571542810_02
2i3u30571556450_02571556450_01571556452_01571556452_02
3i3u31-571500475_01571500475_01571500475_02571500475_01.26
4i3u32571540303_02.21571540303_01571540303_02-571540303_02
5i6u60571500535_02.18571500535_01571500535_02-571500535_02
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
........................
6721021571511538_02.121571500535_01i6
6821021571500535_02.18571500585_01i6
6921021571500585_02571542115_01i6
7021021-571542115_01571511538_01i6
712105571500535_02-571500535_02u60
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
51753B1090180571545870_02571542797_02i0left
61754A5270000571510153_02571500487_01i0left
71754B2270090571510153_02571545870_01i0straight
81752A7001090571500487_02571500487_01.32u00left
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
51756571545870_02571510153_01i0
61757-571500487_01571545870_01i0
71758-571542797_02571500487_01i0
817521-571500487_01571510153_01i0
917521571510153_02571542797_02i0
1017521-571542797_02571545870_01i0
1117521571545870_02571500487_01i0
121757571500487_02571500487_01.32u00
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
02022571510152_01571510152_01.65i9
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
02026571510152_02-571510152_01i9
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
261771A8179000NaNNaNu20straight
271771B4000180NaNNaNu20straight
281772A17NaNNaNNaNNaN571542810_01.51571542810_02u20NaN
291772B18NaNNaNNaNNaNNaNNaNu20NaN
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
81758NaNNaNu00
91754NaNNaNu00
101757571500487_02571500487_01.32u00
111753NaNNaNu00
121756NaNNaNu00
131751NaNNaNu00
141755NaNNaNu00
151752NaNNaNu00
261778NaNNaNu20
271774NaNNaNu20
2817717NaNNaN571542810_01.51571542810_02u20
2917718NaNNaNNaNNaNu20
3017820NaNNaNNaNNaNc30
3117820NaNNaNNaNNaNc30
3217820NaNNaN571542116_01-571542116_02.96c30
3317820NaNNaN571542116_02.96571542116_02.164c30
3417820NaNNaN571542116_01-571542116_02.96c30
3517820NaNNaN571542116_02.96571542116_02.164c30
3617820NaNNaN571542116_01-571542116_02.96c30
3717820NaNNaN571542116_02.96571542116_02.164c30
461788NaNNaNu30
471784NaNNaNu30
481787NaNNaNu30
491783NaNNaNu30
501785NaNNaNu30
511782NaNNaNu30
521786571556452_01571556452_02u30
531781NaNNaNu30
541788571500475_02571500475_01.26u31
551784NaNNaNu31
561787NaNNaNu31
571783NaNNaNu31
581785NaNNaNu31
591782NaNNaNu31
601786NaNNaNu31
611781NaNNaNu31
621788NaNNaNu32
631784571540303_02-571540303_02u32
641787NaNNaNu32
651783NaNNaNu32
661785NaNNaNu32
671782NaNNaNu32
681786NaNNaNu32
691781NaNNaNu32
1002106NaNNaNu60
10121018NaNNaNNaNNaNu60
1022105571500535_02-571500535_02u60
1032102NaNNaNu60
1042107NaNNaNu60
1052104NaNNaNu60
1062108NaNNaNu60
1072103NaNNaNu60
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
121757571500487_02571500487_01.32u00
2117717NaNNaN571542810_01.51571542810_02u20
2217820NaNNaN571542116_01-571542116_02.96c30
2317820NaNNaN571542116_02.96571542116_02.164c30
2417820NaNNaN571542116_01-571542116_02.96c30
2517820NaNNaN571542116_02.96571542116_02.164c30
2617820NaNNaN571542116_01-571542116_02.96c30
2717820NaNNaN571542116_02.96571542116_02.164c30
401786571556452_01571556452_02u30
411788571500475_02571500475_01.26u31
421784571540303_02-571540303_02u32
712105571500535_02-571500535_02u60
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
2117717NaNNaN571542810_01.51571542810_02u20
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
2117717NaNNaN571542810_01.51571542810_02u20
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
0175i01A8-571542797_02571500487_01grrrgrrrgGGGGrgrr
1175i01B4-571500487_01571542797_02gGGrgrrrgrrrrrgrr
2175i02A7-571500487_01571545870_01grrGgrrrgrrrrrgrr
3175i02B3-571542797_02571510153_01grrrgrrrgrrrrGgrr
4175i03A6571545870_02571510153_01grrrgGGrgrrrrrgrr
5175i03B1571545870_02571542797_02grrrgrrGgrrrrrgrr
6175i04A5571510153_02571500487_01grrrgrrrgrrrrrgrG
7175i04B2571510153_02571545870_01grrrgrrrgrrrrrgGr
8175u001A8NaNNaNggggrgggg
9175u001B4NaNNaNggggrgggg
10175u002A7571500487_02571500487_01.32ggggGgggg
11175u002B3NaNNaNggggrgggg
12175u003A6NaNNaNggggrgggg
13175u003B1NaNNaNggggrgggg
14175u004A5NaNNaNggggrgggg
15175u004B2NaNNaNggggrgggg
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
22177i21A8-571542809_01571542811_01rrggGGG
23177i21B4571542811_02571542809_01GGggrrr
24177i22A17NaNNaNrrggrrr
25177i22B18NaNNaNrrggrrr
26177u201A8NaNNaNgggggg
27177u201B4NaNNaNgggggg
28177u202A17571542810_01.51571542810_02ggGggg
29177u202B18NaNNaNgggggg
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
4217552A7571510153_02571500487_01001090-571500487_01571545870_01i0left
........................31752B3179270-571542797_02571510153_01i0left
13521013남서북서571500585_02571500535_01i641753A6090270571545870_02571510153_01i0straight
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", "
inter_nomove_noinc_direout_direinc_edge_idout_edge_idnode_id
13621014북동남서571511538_02.121571500585_01i601751571545870_02571542797_02i0
13721015북서북동571500535_02.18571511538_01i611752571510153_02571545870_01i0
13821016남동북서-571542115_01571500535_01i621753-571542797_02571510153_01i0
13921031754-571500487_01571542797_02i0
41755571500535_02-571500535_02u60571510153_02571500487_01i0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
0175i01571545870_02571542797_02left
1175i02571510153_02571545870_01straight
2175i03-571542797_02571510153_01left
3175i04-571500487_01571542797_02straight
4175i05571510153_02571500487_01left
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
8175u001A8NaNNaNggggrgggg
9175u001B4NaNNaNggggrgggg
10175u002A7571500487_02571500487_01.32ggggGgggg
11175u002B3NaNNaNggggrgggg
12175u003A6NaNNaNggggrgggg
13175u003B1NaNNaNggggrgggg
14175u004A5NaNNaNggggrgggg
15175u004B2NaNNaNggggrgggg
26177u201A8NaNNaNggrggg
27177u201B4NaNNaNggrggg
28177u202A17571542810_01.51571542810_02ggGggg
29177u202B18NaNNaNggrggg
46178u301A8NaNNaNggggrggg
47178u301B4NaNNaNggggrggg
48178u302A7NaNNaNggggrggg
49178u302B3NaNNaNggggrggg
50178u303A5NaNNaNggggrggg
51178u303B2NaNNaNggggrggg
52178u304A6571556452_01571556452_02ggggGggg
53178u304B1NaNNaNggggrggg
54178u311A8571500475_02571500475_01.26ggggGggg
55178u311B4NaNNaNggggrggg
56178u312A7NaNNaNggggrggg
57178u312B3NaNNaNggggrggg
58178u313A5NaNNaNggggrggg
59178u313B2NaNNaNggggrggg
60178u314A6NaNNaNggggrggg
61178u314B1NaNNaNggggrggg
62178u321A8NaNNaNgggggggr
63178u321B4571540303_02-571540303_02gggggggG
64178u322A7NaNNaNgggggggr
65178u322B3NaNNaNgggggggr
66178u323A5NaNNaNgggggggr
67178u323B2NaNNaNgggggggr
68178u324A6NaNNaNgggggggr
69178u324B1NaNNaNgggggggr
100210u601A6NaNNaNggggggggr
101210u601B18NaNNaNggggggggr
102210u602A5571500535_02-571500535_02ggggggggG
103210u602B2NaNNaNggggggggr
104210u603A7NaNNaNggggggggr
105210u603B4NaNNaNggggggggr
106210u604A8NaNNaNggggggggr
107210u604B3NaNNaNggggggggr
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
0175i01571545870_02571542797_02left
1175i02571510153_02571545870_01straight
2175i03-571542797_02571510153_01left
3175i04-571500487_01571542797_02straight
4175i05571510153_02571500487_01left
...........................
123210i612북서남동571500535_02.18571542115_01straight
124210i613남서북서571500585_02571500535_01left
125210i614북동남서571511538_02.121571500585_01straight
126210i615북서북동571500535_02.18571511538_01left
127210i616남동북서-571542115_01571500535_01straight
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
32177i21571542107_02571542809_01left
33177i22-571542809_01571542107_01straight
34177i23-571542809_01571542809_01left
35177i24571542811_02571542809_01straight
36177i25-571542809_01571542811_01straight
37177i26571542107_02571542809_01straight
38177i27571542811_02571542107_01left
39177i28-571542809_01571542811_01straight
40177i29북동남동571542107_02571542809_01left
41177i210남서북동-571542809_01571542107_01straight
42177i211남동남서-571542809_01571542809_01left
43177i212북서남동571542811_02571542809_01straight
44177i213남서북서-571542809_01571542811_01straight
45177i214북동남서571542107_02571542809_01straight
46177i215북서북동571542811_02571542107_01left
47177i216남동북서-571542809_01571542811_01straight
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_typestate
32177i21571542107_02571542809_01leftrrggrrr
33177i22-571542809_01571542107_01straightrrgGrrr
34177i23-571542809_01571542809_01leftrrggrrr
35177i24571542811_02571542809_01straightGGggrrr
36177i25-571542809_01571542811_01straightrrggGGG
37177i26571542107_02571542809_01straightrrggrrr
38177i27571542811_02571542107_01leftrrggrrr
39177i28-571542809_01571542811_01straightrrggGGG
40177i29북동남동571542107_02571542809_01leftrrggrrr
41177i210남서북동-571542809_01571542107_01straightrrgGrrr
42177i211남동남서-571542809_01571542809_01leftrrggrrr
43177i212북서남동571542811_02571542809_01straightGGggrrr
44177i213남서북서-571542809_01571542811_01straightrrggGGG
45177i214북동남서571542107_02571542809_01straightrrggrrr
46177i215북서북동571542811_02571542107_01leftrrggrrr
47177i216남동북서-571542809_01571542811_01straightrrggGGG
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
.......................................
1032102B2270090NaNNaNu60straight
1042103A7000090NaNNaNu60left
1052103B4000180NaNNaNu60straight
1062104A8180000NaNNaNu60straight
1072104B3180270NaNNaNu60left
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
0175i01A8-571542797_02571500487_01grrrgrrrgGGGGrgrr
1175i01B4-571500487_01571542797_02gGGrgrrrgrrrrrgrr
2175i02A7-571500487_01571545870_01grrGgrrrgrrrrrgrr
3175i02B3-571542797_02571510153_01grrrgrrrgrrrrGgrr
4175i03A6571545870_02571510153_01grrrgGGrgrrrrrgrr
...........................
103210u602B2NaNNaNggggggggr
104210u603A7NaNNaNggggggggr
105210u603B4NaNNaNggggggggr
106210u604A8NaNNaNggggggggr
107210u604B3NaNNaNggggggggr
\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 8ea041067b95b47187d0fbe9fd9302470d1eda45..dc0cb62eabc1abdc3c9c8e4039477acf5ef0df95 100644 GIT binary patch delta 6562 zcmZ`;4S1W?b^h)rS&}7Ll4V&xwq#5GcjAN~k~DuL144j2Aqgyhb(0#!S5YL}Qv6AV zhFu|wS=Y5sT0gtpI(TT2pxXj%X~6X7=>wGhrEAC7=on?{4+ZwDP3cNUw{+dsZST3C zY&nox&-Z@ko_p@Of9IZa?&sH@XZO9tJO|s_oErXOzlohV@WkVu^L^LOSx|oC3-6z^ zneR6~dY{R{Te0pryUe=h>=Nte_dcMc=q-c&UmSV>t&L9*93a>L7Wu@g0B!fD<50^F#Dpsb!^yXR>{iPR@axQ zE=F)}@tb3(*}GMpYOxL6x_zc_dwL>YFs>n)s|l3OXNkHN@Cd8x$4~DaZ8grLRJTqR zPMxmXCkxYaGx?&im&Cq7@E7vqYp-XIFaB`t4#u9Bv2`Ker-=U#1cyzDo$KQ4iN*A~ z-8!qvbIGpW=ZU|aV4UD%fVw50${XLK;tTRZ@D|_g{6JrwamhJhTbL zi;K@(b)8-j+C-1ga=kmXV>`~IB3FR1>&asWML+oz_xl*P;1^MKb z(L$YCtRnb6HPcUJ>z2tvv2H15^TxM`KSS^eRa$0Jr;Hb=_)UT;@mllAY#~V&ZYb-g zQ5s2tekBKtu*^I&!mg>R+_F!%Gs?wH~a!(bw^_jiY7(X##^LB zjaCg*smSJe`hBJfMK*hquWk(_o}(seKv7Uw;9nBs-wD(ydQt|r9SJ#@llhrn_c4#f z&ur=!W`22YS8r^?B!l$QA1$mK&vkf;ju!dVZ9l4%tn(Ud)tAxAE@flwWMd1KV{6N9 z;m-NXZNQGQ2N)=OfzGlI=qa}YJIj7x5ca3#Le;SF)mS;upxZ%ria<3YI%|yEV01wd ztajDVTh1pu+vshpR=O3#ma~gCbueJ|xhS`DM@HwZXIL)Ao!oVXl|#ZKLfnmJOtit0 z{ZJU@ZR(hXat`j{UbJXI3s==$YOAqoZw+={idPdNf}uo8eImkrVQrofHP1pCy(`=o z0xM*S_M4(O95@&lUr$JzYC%U`N==tJ5AF+UE#3{kLUo^r+CpRU2)=5`tNDwenIsE9Fi3j2T&N~5Egx24dp>q4lI|4O7Ywf z7T?0H866wo<(*Udg2fmUKGB{b#lxcCtR+{Hk3%A;B=)S37-&i?>56F8%1BMijq(r= zpJCNi*s)Xf@PF4#XQ(5mZ%3ufg~6poXi zBRrO|!1}Mmx<=97t zX7GGsq^2|Nu(mgv#mIHyqGQ-1GgL z5d_GyUZCuy=?V==#eX6AbAp!%{z;y{c1PvAAnOitwmfU3O=n8fg#gJ=Fuv0}m*vSh z%+x0u<0iuwmg_#i=*K)LzB&jgZK+}@e)?3} zj4kB+Re(V{wA`QZ19{JN8~T^S)%E1&3nZB$pb*!HHu7uN4UMaK@~6a9E?uP(KSZ%^ znJ!Ek|3ww^1QmiTfl9ajm#BvTb(@jSr)JWP6i0DX0Np5ShkI>j!5AHtJ9mC%RRHU6 zbP`wyY=CiBBaNFZz`4w>hZbu?%T8zkH$q9# z#&XN08kO#fU9^zPgLAYATh5VdM_Tw979{q*(|FeI!j*R%=zXSf(iz=z-FUL znXA;E^YgZD4Ix>}bzrv1a$Bjr8o<*j+%<-Gklq;`nq8s|-ovfhR6O0x$!3*j@^8FZa#s$N<=}yAa(mY&CQrg%xa$T0g}5j+`9}-hphufesNP z|5(G@fj4b&7*QWXDF-UNo%^wi0Sf$TCp&pZgM-MgI6Ch?JtK#xEif#Jb(>D z2v&3_=q{SAKmb;6#PcwPVElMnhgOZDMX*D|`gDs>wMTT5Ge*+9D^sD!98{_iPL(?B zKUABv_jjo75%|4Lb&rTbHNvk_U8RBik#>S1bouXfh!9Psk#zK`I)=J%MO8*uRK`Uo z#p-GtHl9GbA8*ioh{;%F>|CE{r#H5Y;+BUj0UR&A!TXZhsD6b5&Fz9kTyC=}G+VV> zqF*V;j)?)K-ZFc4Mnecln6_~2HD#!MbezhAD-@rHVzdRfg<9h65PmYyh&E+Is17Wh zCe$QE<0OFY%ZG)hLSm{>f@aX5X|8=I==Aq5t2wY#GV7pVDDM}r`k;nRj`K)f=UwHY z(m-`k3}$fZ@%Zty;Bnwd;OWCN#JeAG!1RWpFHx=Zh+(y3mf4pVEVIvo*>E~IdRlI% zMv2vk7|9JIu(lw9j3U(>K_?^BoQ|nlp9E4Aa%4J>A;DaQIIeR`#=?70T8;1=SHYE5 zGQlm_(6Q1Qb;J`+Zb3{>AY}F}?%LhWx+&zSz_lX&dC5upnEdh4h!mkVxqZ(jR+o3| z>1BK6$M@XOZu}IDE?B80W$wnyGO;Hi>j$0k%{IT=c$Ijs6D(iYJb$3Wk<-QBrs6dgzX4{42qm1au=YZy|d?oss7b z#+F1YO7!1I;8*Vy{Rs6(lcAxhh(GQqmW)(3bFwt*FmHg(RcfpaR4re^%<$=YmF|ZRm|8sZeB0nWd?jR*596*p2MZhequURDy8#=Qm-`sA&t~W`c$m1QjxwC z)U8>%NvhzjLiWd~=D!L4ia-VQ{~_wP1UCaJ>IQ3Er1Gx`{*&N01Ro$!v3>b!T6d^e zj0>%b^2Yy>$X zAoIz;-FG87CYeHui|Mn;Ahz1!&zq83$p9b;r6;?+jMH?I8SZ=E({LtQkD4-L!V2&74Zp&MuA zR}YV{=j6{04_>XDU9itmp(YP z;-S!0yhmTOz58z6#x*QWSo)7{zv4CUA7Ms2UdAAePw7*j^bLU*wtznj;?AVJWg;#g zJle5l48;S+*QnVlYKBLvvl|T3X9k9+h+0GNynN;8#*r&XY#qVx>gP(;kG%TWL}fH; zBuG?Uzg83V1JZQ4rB&ZD9Xy>rMc<=M=dV_}c^6c(dj$&WEjQ6OKhuvZ7q0eBZCi6s zzOBhC-y7UI>Q+wOP_FWFJ<}RA?|8;qDyof9U#Fd)MTec3Qt^oV@q6F1xNoA!*nau- z+cGYSo>|rUr*cDTzwIHK+kpIVD#;GXXHvJ>A0$SM$-(0{jne#7U^DIpRkx%v88iAs zsJ|-J)(GCSWJF&+9=}4x8LzV0{M^jMs{c{`CCKit%Z1>(=9i!nARY1Rf`Nf?$#0NrKN4kS90D zA`My#gSs-dQO{QsMAZlG@`?5Ku;VVr5yuw!r4yUis_FVka)e-tKqtUT;vWRmkV5T} Riub2GWHPh5W!eEx{r`}$UBLhV delta 5869 zcmb7Id2pM>72o|nS(0^ImUY>(V!giqh?2s$40eBK;a8wF|0=>(gp~j_$J9`9isy#1tiZ29?$@es zci*bhZ&q(!^oUNsE(gxp?0XC=9!Gcr;YoS#IbWs^%MUJHWHqZ~dFdMGBUl$h_+ItV zrF-ags!p}&18&VWp1(dll*{wWQRZRBSH#|Ml+B7YNiZS4XpxmL#VG$NBLhmDo zwaF`?tya-z2x!~7Ln}o}n$V0m=+%twQZryrDNyuQe4=@V9@h91Kri!&02T_jqM8U1 z%_1;@T}MR})fo{HVc`)?b#QC7dch*i`6`a{b%a0S;N+Vgi~QF`?KC4>SB*6#H2wjo ztJ$)-;i2o(!wGrYs!Z$Kz?!YePZd=St+{}dx33Dz-qlNY`~qaQ@<&ner2qqo1^o9| zr~%ZhkZ0+n6NnAD;rw_umr;dHQ^iak3-b8tMENCb zu>|3F*i4(q*7V_gp{5tIIsRkhk0bm6EA{cz1V4errxA`JsBMp?@m_=%5bi>_2w@dK zqLoLG-j8rIf|48pD%n`Z8A-EDx{z$dDKJTUeVz(6MIn=qfqYF*=NNwnTiWXr1|p~0 z@xP&RH6R>IvJtgpb1Z$MsauhAb|o8gz1cPSUOb^m3t~;n=99Lp$>PtTHZ`&~pkSf? zij2P_sB`#z+17V$)Jh%HPyL#Yx^zFas(+aJ=-!x2Wdriz^>%qzpU1lZnz`Uv2T$RM zMLyp5LODZ9PPILKxIGVRgYTAH!eum-+<^X)2e7&11$2~rfSytlV4&m&Y=Nyy3~MDg zL-1|bgj*esfCv~NW@WaF#_Wfv5oV3dafp@z!XpCA*+&EwZrIU&*v;h@<`QHm0!{49 z%{@qhLf7x{S^m5v>~moVpPx z*)EhMoYbgkM3{_H=%H0PD2?gas#~ zHN}aIYL}5xTwr|%14$@#0v%@{D>}Rc%3Z1)m@Rh~TMdw5Ik`N3Np#PX=n@@uiRb4@z&xQ$ zIiultg|o5{{VgSvufnET#3C@R#Xu!ys47Q62KdGjMwv59S?eL-4=qyDit=qNrnax8 zkFa*tqQh*#qIeQm$0-TylsPj_*#Fpm1F4)NoUpB&MWo;u2|SLAGCJ)3r7*D}P~cRD z$%2Oo8ZCqRWv31mmRbC2lIX1d?D9rRe=Sd}4X?vsY=+-?t{WZRNe9-drD$;F3IZqEJw1B=*4&B}OwBA1%yfnSnu ztP5JvAM%%Fuz#f!BS+nd%Uu7$9m->W7MaS|sVMyl>e9#Z!~CCEF^y10$Remr=08Z? z4N$Z4bS^cXu4fO5qvFy9i3PIxiXSw)VUXMdkhBh~3jUJ(*A*{qLa)jdD0li06pw;b z;Rq1K7Syep`YZqH)56p~?{VlB@Uf=1t)sknJ+tW!x@6Av2E9H|g>F}er*MrfUtS+C zXKZQ%Xt0)g#RBWx!0fDXKVc5$Jfu~uaExe{9K_9MgREioLEL^Qtr_+M1l_E;!z09K ztT;egV=m_2PlVPFz7X?^1M~ptBa<7mMCC82rT-v7ZiMug$>0Sg%jqhWa;LDMLjgzB zAQ}vp0WKK~)ejJ1!E-Ws`{XU4&Mh4#9_ z_Jic(pvMR?GkfY~>nYR94h!dh8dMk})zh-2|R-bx+TpG9Rc zSPY5AX*vzFGq?|ebEEKrc@})LXb2oo5Jzu=$YR^ARl??)tITp&eQ0IOB+oiF*71Lg zO`F^WqhAsXoBxTHwh~P%|Ms-4)dAePgNdT`YCU8Qp!-yeM2~Uf-O+uQjA5CdT&Eti}9Twoo*)cr$`rpBkG=7izYV zu~e~`&Y3HwmiMFBk6LX^>uYx9%;6%T!T?u>t83&>P)n$oY|j)+8GyP&VmQYcs^N znccT*46cs-n*iK@FJB+cXQro;dYThoW4x zorce#+Oz;fAs0ya=t6ko-$E?-5X-;qx^KDWr*>k;huDGP0zo^3uE1G@1GHUk-FhXx zLw<4VuP&=N)uok#`*eU`bQ&%QEl$G?zQYN30XLu*?+DC2s`D2PpxY9qaLP(9cS++ec%7|b02so zly3Q-o`Px|r+V_u_N4Lfyq;b;Yfs(VG`{+bzO>2J(AO))P%&&oDp6?H$~-d=#-_DT z1xn4uwn_|m8eH%-O16=eWDEHqxt0{$nQt0=Bx?fCa;GqXC*!AkY zgEwhq$OPavXtY6G+X$PB7KHsFSY8IKXGv_q!j5gw>tT(UBUu#Q^c7IRcsD;>-M z+YWD0F5&J2v*5eS0eFt$yBJr?f`K{8!mun6SQdZDTkNcKfxNfADDL{IFaoO)mFMrg zWXWq_-Z9FX;KjRftfxl_wI07z>miTqylB~C5ZTIqh|;(sDz&cB^&Hih-tkeS)EAQH zBu!ng_#6~litt|Q|7@xsN)46wdZ)6icS?Ojs4p?7OLTL!x+)u9h^k)3PSgjEGnPwz zv9YssdIG<^sgE>#5w^%umL|?aCFtCe=I9+t~QamJ5c_o2u=jdad`lt z1K}tFP6)paDfQ(ABQp0R+z(K9v-7^koMEnNJ-fwtVhL(fik^YyNypr5)O4V0)B2R1+F{3@h$J z*e-YWbZY#5IXM!4pNbt`byRax<3q!HhR4uklvA5)1-4c3;5)#JRUaN{qx4RBB6A0= z%A0mCqf6wyyURV_#Rh9oRvog__hrp8p33G{$}QRHE0y3kLAqwymCujy?_tB^2oE4U zi12*`y!>#CK^zY&$LZr}g4s)-{D~2gD~y#kk9~vvTKjsLH&)S_JZ8k47o!;w6h*0Z K4Xf=Ckp2t);HXmo 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']]