From 1217e8f037699fbbb804f62d58cd19e826ec13d7 Mon Sep 17 00:00:00 2001 From: govin08 Date: Tue, 16 Apr 2024 09:59:58 +0900 Subject: [PATCH] new logic for matching is applied --- .../0415_matching.ipynb | 624 ++++++++++------ Intermediates/match6.csv | 128 ++-- Intermediates/matching.csv | 148 ++-- Intermediates/node2init.json | 2 +- Results/sn_1704419700.add.xml | 682 ++++++++---------- .../preprocess_daily.cpython-38.pyc | Bin 26452 -> 26466 bytes Scripts/preprocess_daily.py | 140 ++-- 7 files changed, 966 insertions(+), 758 deletions(-) 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 fbb8e15b6..e212fa828 100644 --- a/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb +++ b/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ "[108 rows x 12 columns]" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -296,7 +296,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -321,209 +321,212 @@ " \n", " \n", " inter_no\n", - " phase_no\n", - " ring_type\n", " move_no\n", " inc_dire\n", " out_dire\n", - " inc_angle\n", - " out_angle\n", " inc_edge_id\n", " out_edge_id\n", " node_id\n", - " turn_type\n", " \n", " \n", " \n", " \n", - " 80\n", - " 202\n", + " 0\n", + " 175\n", " 1\n", - " A\n", - " 6\n", " 동\n", - " 서\n", - " 090\n", - " 270\n", - " 571510152_02\n", - " -571510152_01\n", - " i9\n", - " straight\n", + " 남\n", + " 571545870_02\n", + " 571542797_02\n", + " i0\n", " \n", " \n", - " 81\n", - " 202\n", - " 1\n", - " B\n", + " 1\n", + " 175\n", " 2\n", " 서\n", " 동\n", - " 270\n", - " 090\n", - " 571510152_01\n", - " 571510152_01.65\n", - " i9\n", - " straight\n", + " 571510153_02\n", + " 571545870_01\n", + " i0\n", + " \n", + " \n", + " 2\n", + " 175\n", + " 3\n", + " 남\n", + " 서\n", + " -571542797_02\n", + " 571510153_01\n", + " i0\n", + " \n", + " \n", + " 3\n", + " 175\n", + " 4\n", + " 북\n", + " 남\n", + " -571500487_01\n", + " 571542797_02\n", + " i0\n", + " \n", + " \n", + " 4\n", + " 175\n", + " 5\n", + " 서\n", + " 북\n", + " 571510153_02\n", + " 571500487_01\n", + " i0\n", + " \n", + " \n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " \n", + " \n", + " 123\n", + " 210\n", + " 12\n", + " 북서\n", + " 남동\n", + " 571500535_02.18\n", + " 571542115_01\n", + " i6\n", + " \n", + " \n", + " 124\n", + " 210\n", + " 13\n", + " 남서\n", + " 북서\n", + " 571500585_02\n", + " 571500535_01\n", + " i6\n", + " \n", + " \n", + " 125\n", + " 210\n", + " 14\n", + " 북동\n", + " 남서\n", + " 571511538_02.121\n", + " 571500585_01\n", + " i6\n", + " \n", + " \n", + " 126\n", + " 210\n", + " 15\n", + " 북서\n", + " 북동\n", + " 571500535_02.18\n", + " 571511538_01\n", + " i6\n", + " \n", + " \n", + " 127\n", + " 210\n", + " 16\n", + " 남동\n", + " 북서\n", + " -571542115_01\n", + " 571500535_01\n", + " i6\n", " \n", " \n", "\n", + "

128 rows × 7 columns

\n", "" ], "text/plain": [ - " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", - "80 202 1 A 6 동 서 090 \n", - "81 202 1 B 2 서 동 270 \n", + " 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", + "\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", "\n", - " out_angle inc_edge_id out_edge_id node_id turn_type \n", - "80 270 571510152_02 -571510152_01 i9 straight \n", - "81 090 571510152_01 571510152_01.65 i9 straight " + "[128 rows x 7 columns]" ] }, - "execution_count": 10, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], - "source": [ - "self.match6[self.match6.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], "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", - "# parent_id = self.parent_ids[1]\n", - "\n", - "for parent_id in self.parent_ids:\n", - " m7 = self.match7[self.match7.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n", - " m6 = self.match6[self.match6.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n", - " inc_angles = [int(angle) for angle in np.unique(m7.inc_angle.values)]\n", - " out_angles = [int(angle) for angle in np.unique(m7.out_angle.values)]\n", - " # print(parent_id)\n", - " # display(m6)\n", - " # display(m7)\n", - " # print(inc_angles)\n", - " # print(out_angles)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ "# (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", - "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", + "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", - " pdires[node_id] = dires\n", + " p2dires[parent_id] = dires\n", + "\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", + "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", "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])]" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "i0\n" - ] - }, - { - "data": { - "text/plain": [ - "{1: '571545870_02',\n", - " 2: '571510153_02',\n", - " 3: '-571542797_02',\n", - " 4: '-571500487_01',\n", - " 5: '571510153_02',\n", - " 6: '571545870_02',\n", - " 7: '-571500487_01',\n", - " 8: '-571542797_02',\n", - " 9: '-571500487_01',\n", - " 10: '571510153_02',\n", - " 11: '571545870_02',\n", - " 12: '-571500487_01',\n", - " 13: '571510153_02',\n", - " 14: '-571500487_01',\n", - " 15: '-571500487_01',\n", - " 16: '571545870_02'}" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{1: '571542797_02',\n", - " 2: '571545870_01',\n", - " 3: '571510153_01',\n", - " 4: '571542797_02',\n", - " 5: '571500487_01',\n", - " 6: '571510153_01',\n", - " 7: '571545870_01',\n", - " 8: '571500487_01',\n", - " 9: '571545870_01',\n", - " 10: '571500487_01',\n", - " 11: '571510153_01',\n", - " 12: '571545870_01',\n", - " 13: '571500487_01',\n", - " 14: '571510153_01',\n", - " 15: '571500487_01',\n", - " 16: '571500487_01'}" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "p2am = 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(pdires[parent_id]) & self.nema.out_dire.isin(pdires[parent_id])]\n", - " p2am[parent_id] = list(pnema.move_no)\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", + "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", "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", - "plain_move_nos = list(range(1,17)) # plain movement numbers\n", - "\n", - "p2pm2inc_edge_id = dict() # parent id to pm2inc_edge_id\n", - "p2pm2out_edge_id = dict() # parent id to pm2out_edge_id\n", + "# (7) 각 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", - " pm2inc_edge_id = dict() # plain movement to incoming edge id\n", - " pm2out_edge_id = dict() # plain movement to outgoing edge id\n", - " for pm in plain_move_nos:\n", - " row = self.nema[self.nema.move_no==pm].iloc[0]\n", + " move2inc_edge_id = dict() # plain movement to incoming edge id\n", + " move2out_edge_id = dict() # plain movement to outgoing edge id\n", + " for move_no in range(1,17):\n", + " row = self.nema[self.nema.move_no==move_no].iloc[0]\n", " inc_dire = row.inc_dire\n", " out_dire = row.out_dire\n", " inc_vec_true = dire2vec[inc_dire]\n", @@ -553,101 +556,270 @@ " out_index = np.array([np.dot(out_vec, out_vec_true) for out_vec in out_vecs]).argmax()\n", " inc_edge_id = inc_edges[inc_index].getID()\n", " out_edge_id = out_edges[out_index].getID()\n", - " pm2inc_edge_id[pm] = inc_edge_id\n", - " pm2out_edge_id[pm] = out_edge_id\n", - " p2pm2inc_edge_id[parent_id] = pm2inc_edge_id\n", - " p2pm2out_edge_id[parent_id] = pm2out_edge_id\n", + " move2inc_edge_id[move_no] = inc_edge_id\n", + " move2out_edge_id[move_no] = out_edge_id\n", + " p2move2inc_edge_id[parent_id] = move2inc_edge_id\n", + " p2move2out_edge_id[parent_id] = move2out_edge_id\n", + "\n", + "# (8) 각 이동류별 진입/진출 방위\n", + "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\n", "\n", - "parent_id = self.parent_ids[0]\n", - "print(parent_id)\n", - "display(p2pm2inc_edge_id[parent_id])\n", - "display(p2pm2out_edge_id[parent_id])" + "# (9) 가능한 모든 이동류에 대하여 진입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 = 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", + " '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", + "child_matching = self.match7[self.match7.node_id.isin(self.child_ids)]\n", + "child_matching = child_matching.drop(columns=['inc_angle', 'out_angle'])\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)" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ - "plain_move_nos = list(range(1,17)) # plain movement numbers\n", - "p2pm2inc_edge_id = dict() # parent id to pm2inc_edge_id\n", - "p2pm2out_edge_id = dict() # parent id to pm2out_edge_id\n", - "for parent_id in self.parent_ids:\n", - " pm2inc_angle = dict()\n", - " for pm in plain_move_nos:\n", - " row = self.nema[self.nema.move_no==pm].iloc[0]\n", - " # inc_dire = row.\n", - "# plain movement number(1-16) to (inc_angle, out_angle)\n" + "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" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 37, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북'), ('북동', '남동'), ('남서', '북동'), ('남동', '남서'), ('북서', '남동'), ('남서', '북서'), ('북동', '남서'), ('북서', '북동'), ('남동', '북서')]\n", - "{'i0': {'북', '남', '동', '서'}, 'i1': {'북', '남', '서'}, 'i2': {'북', '남'}, 'i3': {'북', '남', '동', '서'}, 'i6': {'북', '남', '동', '서'}, 'i7': {'북', '남'}, 'i8': {'북', '남', '서', '동'}, 'i9': {'동', '서'}}\n", - "{('i0', '북'): '-571500487_01', ('i0', '남'): '-571542797_02', ('i0', '동'): '571545870_02', ('i0', '서'): '571510153_02', ('i1', '북'): '571542797_02.99', ('i1', '남'): '-571542810_01', ('i1', '서'): '571543469_02', ('i2', '북'): '571542811_02', ('i2', '남'): '-571542809_01', ('i3', '북'): '571556450_02', ('i3', '남'): '571540304_02', ('i3', '동'): '-571500475_01', ('i3', '서'): '571540303_02.21', ('i6', '북'): '571511538_02.121', ('i6', '남'): '571500585_02', ('i6', '동'): '-571542115_01', ('i6', '서'): '571500535_02.18', ('i7', '북'): '571542073_01', ('i7', '남'): '-571511538_02', ('i8', '북'): '571500583_01', ('i8', '남'): '-571500569_01', ('i8', '서'): '571500618_02', ('i8', '동'): '571500617_02', ('i9', '동'): '571510152_02', ('i9', '서'): '571510152_01'}\n", - "{('i0', '북'): '571500487_01', ('i0', '남'): '571542797_02', ('i0', '동'): '571545870_01', ('i0', '서'): '571510153_01', ('i1', '북'): '-571542797_02.99', ('i1', '남'): '571542810_01', ('i1', '서'): '571543469_01', ('i2', '북'): '571542811_01', ('i2', '남'): '571542809_01', ('i3', '북'): '571556450_01', ('i3', '남'): '571540304_01', ('i3', '동'): '571500475_01', ('i3', '서'): '571540303_01', ('i6', '북'): '571511538_01', ('i6', '남'): '571500585_01', ('i6', '동'): '571542115_01', ('i6', '서'): '571500535_01', ('i7', '북'): '571542073_02', ('i7', '남'): '571511538_02', ('i8', '북'): '571500583_02', ('i8', '남'): '571500569_01', ('i8', '서'): '571500618_01', ('i8', '동'): '571500617_01', ('i9', '동'): '571510152_01.65', ('i9', '서'): '-571510152_01'}\n", - "{'i0': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i1': [('남', '서'), ('북', '남'), ('서', '북'), ('남', '북')], 'i2': [('북', '남'), ('남', '북')], 'i3': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i6': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i7': [('북', '남'), ('남', '북')], 'i8': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i9': [('서', '동'), ('동', '서')]}\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", + "
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
........................
13521013남서북서571500585_02571500535_01i6
13621014북동남서571511538_02.121571500585_01i6
13721015북서북동571500535_02.18571511538_01i6
13821016남동북서-571542115_01571500535_01i6
1392105571500535_02-571500535_02u60
\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]" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print(flows)\n", - "print(pdires)\n", - "print(inc2id)\n", - "print(out2id)\n", - "print(pflow)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", "# (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", + "for parent_id in self.parent_ids:\n", + " inter_no = self.node2inter[parent_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", + " 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':[node_id]})\n", + " 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[parent_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)):\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", - " 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" + "self.matching['move_no'] = self.matching['move_no'].astype(int)\n", + "display(self.matching)" ] } ], diff --git a/Intermediates/match6.csv b/Intermediates/match6.csv index c81cc4a94..efeac953e 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,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 +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 10,175,u00,2,A,7,571500487_02,571500487_01.32,ggggGgggg -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 +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 28,177,u20,2,A,17,571542810_01.51,571542810_02,ggGggg -29,177,u20,2,B,18,,,ggrggg +29,177,u20,2,B,18,,,gggggg 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,,,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 +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 52,178,u30,4,A,6,571556452_01,571556452_02,ggggGggg -53,178,u30,4,B,1,,,ggggrggg +53,178,u30,4,B,1,,,gggggggg 54,178,u31,1,A,8,571500475_02,571500475_01.26,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 +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 63,178,u32,1,B,4,571540303_02,-571540303_02,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 +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 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,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 +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 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,,,ggggggggr -101,210,u60,1,B,18,,,ggggggggr +100,210,u60,1,A,6,,,ggggggggg +101,210,u60,1,B,18,,,ggggggggg 102,210,u60,2,A,5,571500535_02,-571500535_02,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 +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 diff --git a/Intermediates/matching.csv b/Intermediates/matching.csv index abfaf047f..28abf6c3a 100644 --- a/Intermediates/matching.csv +++ b/Intermediates/matching.csv @@ -1,32 +1,52 @@ inter_no,node_id,move_no,inc_edge_id,out_edge_id,state -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,21,-571500487_01,571510153_01,grrrgrrrgrrrrrgrr -175,i0,21,571510153_02,571542797_02,grrrgrrrgrrrrrgrr -175,i0,21,-571542797_02,571545870_01,grrrgrrrgrrrrrgrr -175,i0,21,571545870_02,571500487_01,grrrgrrrgrrrrrgrr -175,u00,7,571500487_02,571500487_01.32,ggggGgggg -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,8,-571542810_01,-571542797_02.99,grrGGGrgrr -176,i1,21,571542797_02.99,571543469_01,grrrrrrgrr -176,i1,21,571543469_02,571542810_01,grrrrrrgrr -177,i2,4,571542811_02,571542809_01,GGggrrr -177,i2,8,-571542809_01,571542811_01,rrggGGG -177,u20,17,571542810_01.51,571542810_02,ggGggg -178,c30,20,571542116_01,-571542116_02.96,GGGrrr -178,c30,20,571542116_02.96,571542116_02.164,rrrGGG -178,c30,20,571542116_01,-571542116_02.96,GGGrrr -178,c30,20,571542116_02.96,571542116_02.164,rrrGGG -178,c30,20,571542116_01,-571542116_02.96,GGGrrr -178,c30,20,571542116_02.96,571542116_02.164,rrrGGG +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 +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,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 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 @@ -35,13 +55,14 @@ inter_no,node_id,move_no,inc_edge_id,out_edge_id,state 178,i3,6,-571500475_01,571540303_01,grrrrgGGGrgrrrrgrrrr 178,i3,7,571556450_02,571500475_01,grrrGgrrrrgrrrrgrrrr 178,i3,8,571540304_02,571556450_01,grrrrgrrrrgGGGrgrrrr -178,i3,21,571556450_02,571540303_01,grrrrgrrrrgrrrrgrrrr -178,i3,21,571540303_02.21,571540304_01,grrrrgrrrrgrrrrgrrrr -178,i3,21,571540304_02,571500475_01,grrrrgrrrrgrrrrgrrrr -178,i3,21,-571500475_01,571556450_01,grrrrgrrrrgrrrrgrrrr -178,u30,6,571556452_01,571556452_02,ggggGggg -178,u31,8,571500475_02,571500475_01.26,ggggGggg -178,u32,4,571540303_02,-571540303_02,gggggggG +178,i3,9,571556450_02,571500475_01,grrrGgrrrrgrrrrgrrrr +178,i3,10,571540304_02,571556450_01,grrrrgrrrrgGGGrgrrrr +178,i3,11,-571500475_01,571540304_01,grrrrgrrrGgrrrrgrrrr +178,i3,12,571540303_02.21,571500475_01,grrrrgrrrrgrrrrgGGGr +178,i3,13,571540304_02,571540303_01,grrrrgrrrrgrrrGgrrrr +178,i3,14,571556450_02,571540304_01,gGGGrgrrrrgrrrrgrrrr +178,i3,15,571540303_02.21,571556450_01,grrrrgrrrrgrrrrgrrrG +178,i3,16,-571500475_01,571540303_01,grrrrgGGGrgrrrrgrrrr 201,i8,1,571500617_02,571500569_01,grrrrrrGgrrrgrrr 201,i8,2,571500618_02,571500617_01,grrrrrrrgrrrgGGr 201,i8,3,-571500569_01,571500618_01,grrrrrrrgrrGgrrr @@ -50,14 +71,46 @@ inter_no,node_id,move_no,inc_edge_id,out_edge_id,state 201,i8,6,571500617_02,571500618_01,grrrGGGrgrrrgrrr 201,i8,7,571500583_01,571500617_01,grrGrrrrgrrrgrrr 201,i8,8,-571500569_01,571500583_02,grrrrrrrgGGrgrrr -201,i8,21,571500583_01,571500618_01,grrrrrrrgrrrgrrr -201,i8,21,571500618_02,571500569_01,grrrrrrrgrrrgrrr -201,i8,21,-571500569_01,571500617_01,grrrrrrrgrrrgrrr -201,i8,21,571500617_02,571500583_02,grrrrrrrgrrrgrrr +201,i8,9,571500583_01,571500617_01,grrGrrrrgrrrgrrr +201,i8,10,-571500569_01,571500583_02,grrrrrrrgGGrgrrr +201,i8,11,571500617_02,571500569_01,grrrrrrGgrrrgrrr +201,i8,12,571500618_02,571500617_01,grrrrrrrgrrrgGGr +201,i8,13,-571500569_01,571500618_01,grrrrrrrgrrGgrrr +201,i8,14,571500583_01,571500569_01,gGGrrrrrgrrrgrrr +201,i8,15,571500618_02,571500583_02,grrrrrrrgrrrgrrG +201,i8,16,571500617_02,571500618_01,grrrGGGrgrrrgrrr +202,i9,1,571510152_02,571510152_01.65,rrrr 202,i9,2,571510152_01,571510152_01.65,rrGG +202,i9,3,571510152_02,-571510152_01,GGrr +202,i9,4,571510152_01,571510152_01.65,rrGG +202,i9,5,571510152_01,-571510152_01,rrrr 202,i9,6,571510152_02,-571510152_01,GGrr -206,i7,4,571542073_01,571511538_02,GGrggrr -206,i7,8,-571511538_02,571542073_02,rrrggGG +202,i9,7,571510152_01,571510152_01.65,rrGG +202,i9,8,571510152_02,-571510152_01,GGrr +202,i9,9,571510152_02,571510152_01.65,rrrr +202,i9,10,571510152_01,571510152_01.65,rrGG +202,i9,11,571510152_02,-571510152_01,GGrr +202,i9,12,571510152_01,571510152_01.65,rrGG +202,i9,13,571510152_01,-571510152_01,rrrr +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 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 @@ -66,8 +119,11 @@ inter_no,node_id,move_no,inc_edge_id,out_edge_id,state 210,i6,6,-571542115_01,571500535_01,grrrgGGGrgrrgrrr 210,i6,7,571511538_02.121,571542115_01,grrGgrrrrgrrgrrr 210,i6,8,571500585_02,571511538_01,grrrgrrrrgGGgrrr -210,i6,21,571511538_02.121,571500535_01,grrrgrrrrgrrgrrr -210,i6,21,571500535_02.18,571500585_01,grrrgrrrrgrrgrrr -210,i6,21,571500585_02,571542115_01,grrrgrrrrgrrgrrr -210,i6,21,-571542115_01,571511538_01,grrrgrrrrgrrgrrr -210,u60,5,571500535_02,-571500535_02,ggggggggG +210,i6,9,571511538_02.121,571542115_01,grrGgrrrrgrrgrrr +210,i6,10,571500585_02,571511538_01,grrrgrrrrgGGgrrr +210,i6,11,-571542115_01,571500585_01,grrrgrrrGgrrgrrr +210,i6,12,571500535_02.18,571542115_01,grrrgrrrrgrrgGGr +210,i6,13,571500585_02,571500535_01,grrrgrrrrgrrgrrr +210,i6,14,571511538_02.121,571500585_01,gGGrgrrrrgrrgrrr +210,i6,15,571500535_02.18,571511538_01,grrrgrrrrgrrgrrG +210,i6,16,-571542115_01,571500535_01,grrrgGGGrgrrgrrr diff --git a/Intermediates/node2init.json b/Intermediates/node2init.json index 10176bfea..6bb22dc8f 100644 --- a/Intermediates/node2init.json +++ b/Intermediates/node2init.json @@ -1 +1 @@ -{"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 +{"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 diff --git a/Results/sn_1704419700.add.xml b/Results/sn_1704419700.add.xml index 9e4d97c92..66a241ab6 100644 --- a/Results/sn_1704419700.add.xml +++ b/Results/sn_1704419700.add.xml @@ -1,233 +1,188 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -286,51 +241,51 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -387,248 +342,223 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc index 176ac9501cf1fa72b20d7301c47a2d32643ad3c9..8ea041067b95b47187d0fbe9fd9302470d1eda45 100644 GIT binary patch delta 612 zcmZ`!T}V@582;Ylap<4NS>(F4{z`)RwQK8)u>5rgrMU-^zk{6Ze*dsT)*IkeyCV3nm2J8k@>rG=^N( zN}9D%kwKpKBBfju-^ZNzCA3957wTw)AKH_{;{v3yxiboBZM1V$6fA)8?k))8t?piF z^=5hV%1mkH@pSe297?Tz)b+fE4*bxw1YLMJ_6kyXqW1+$kmHxYj&pGY2L}3FP^ZQE z=Ih}K{u;R7a8)4Wj7SLXX|`j@(TIVVh;Ikm;Tjr~LwYN)6O*VmoJ{tEjL(u~@M3?e z3Kz9QLl)87!W62TeW3;(zH!&*n(Nfa0i%!60rd^P$hbI?^6lcD-5mbs{#kSH&73uO zxo(Y{x8uXiKG=cZGQ;4*XtvG5lU2e&;NZvEY&(3?-etc7Yx!vOC2YkDW38}FTO5mk zc|RAeH(X+Q9_`O~6~K=bIt^i*obZ5xGZW7ZVJ?esaO3fS6;J1aa18I}h7E1}QRZDD NXv`m}KiB{|_y^bcsC57U delta 609 zcmZ`zUr3Wt9KFBKP1=nPv?7xQXB6d#H81tDvc1fTQqff=b*s?xPNCHn7rW)=Om~~= z+Qyy2C#x;0U3C;1ROclsdem)dD>jt-7MI9Yr1?eFJrp~L!~ zJ>Eb!Dnlb=#GC%@un)haL-;gYr9oVay`U6kMxOCxNBlgsVkr)CAu=jcqm~-ItEbCo zNZg| z>nTo72QW76#my;Ov!BajrB}itV|i*~*Ip6cC*XfIzcxP)XHGTwgs&#Top_w-rrr3N zNs}M(Y}hKAOH6^-3@6r! zy0D>Mpa{yjHtNCk+|#Cru=NS>U~In)XY)ad;ZZ(qjfzW`*z)grA!kFN;Ma$@P$T^X D@TRF6 diff --git a/Scripts/preprocess_daily.py b/Scripts/preprocess_daily.py index 6b2291dbf..b1ffaaf99 100644 --- a/Scripts/preprocess_daily.py +++ b/Scripts/preprocess_daily.py @@ -571,68 +571,118 @@ class DailyPreprocessor(): ''' self.match7 = self.match6.copy() - self.match7 = self.match7[['inter_no', 'move_no', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id', 'node_id']] - + 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) - pdires = {} - for node_id in self.parent_ids: - dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten() + 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} - pdires[node_id] = dires + p2dires[parent_id] = dires + # (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id) inc2id = {} - for node_id in self.parent_ids: - for inc_dire in pdires[node_id]: - df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)] - inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0] + 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) out2id = {} - for node_id in self.parent_ids: - for out_dire in pdires[node_id]: - df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)] - out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0] - # (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows) - pflow = {} - for node_id in self.parent_ids: - pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])] - # (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching - dires_right = ['북', '북서', '서', '남서', '남', '남동', '동', '북동'] # ex (북, 서), (서, 남) 등은 우회전 flow + 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별 이동류번호 목록 + 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) 방위별 방향벡터 + 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 + 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: + move2inc_edge_id = dict() # plain movement to incoming edge id + move2out_edge_id = dict() # plain movement to outgoing edge id + for move_no in range(1,17): + row = self.nema[self.nema.move_no==move_no].iloc[0] + inc_dire = row.inc_dire + out_dire = row.out_dire + inc_vec_true = dire2vec[inc_dire] + out_vec_true = dire2vec[out_dire] + + node = self.net.getNode(parent_id) + # 교차로의 모든 (from / to) edges + inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges + out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges + # 교차로의 모든 (from / to) unit vector + inc_vecs = [] + for inc_edge in inc_edges: + start = inc_edge.getShape()[-1] + end = inc_edge.getShape()[-2] + inc_vec = np.array(end) - np.array(start) + inc_vec = inc_vec / (inc_vec ** 2).sum() ** 0.5 + inc_vecs.append(inc_vec) + out_vecs = [] + for out_edge in out_edges: + start = out_edge.getShape()[0] + end = out_edge.getShape()[1] + out_vec = np.array(end) - np.array(start) + out_vec = out_vec / (out_vec ** 2).sum() ** 0.5 + out_vecs.append(out_vec) + # 매칭 엣지 반환 + inc_index = np.array([np.dot(inc_vec, inc_vec_true) for inc_vec in inc_vecs]).argmax() + out_index = np.array([np.dot(out_vec, out_vec_true) for out_vec in out_vecs]).argmax() + inc_edge_id = inc_edges[inc_index].getID() + out_edge_id = out_edges[out_index].getID() + move2inc_edge_id[move_no] = inc_edge_id + move2out_edge_id[move_no] = out_edge_id + p2move2inc_edge_id[parent_id] = move2inc_edge_id + p2move2out_edge_id[parent_id] = move2out_edge_id + + # (8) 각 이동류별 진입/진출 방위 + m2inc_dire = dict() + m2out_dire = dict() + for move_no in range(1,17): + row = self.nema[self.nema.move_no==move_no].iloc[0] + m2inc_dire[move_no] = row.inc_dire + m2out_dire[move_no] = row.out_dire + + # (9) 가능한 모든 이동류에 대하여 진입id, 진출id 배정 : matching self.matching = [] - for node_id in self.parent_ids: - inter_no = self.node2inter[node_id] + for parent_id in self.parent_ids: + inter_no = self.node2inter[parent_id] # 좌회전과 직진(1 ~ 16) - for (inc_dire, out_dire) in pflow[node_id]: - move_no = self.nema[(self.nema.inc_dire==inc_dire) & (self.nema.out_dire==out_dire)].move_no.iloc[0] - inc_edge_id = inc2id[(node_id, inc_dire)] - out_edge_id = out2id[(node_id, out_dire)] + for move_no in range(1,17): + inc_dire = m2inc_dire[move_no] + out_dire = m2out_dire[move_no] + if move_no in p2move[parent_id]: + inc_edge_id = inc2id[(parent_id, inc_dire)] + out_edge_id = out2id[(parent_id, out_dire)] + 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], 'inc_dire':[inc_dire], 'out_dire':[out_dire], - 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]}) + 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[parent_id]}) self.matching.append(new_row) - # 보행신호(17), 전적색(18) - new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18], - 'inc_dire':[None]*2, 'out_dire':[None]*2, - 'inc_edge_id':[None]*2, 'out_edge_id':[None]*2, 'node_id':[node_id]*2}) - self.matching.append(new_row) - # 신호우회전(21) - for d in range(len(dires_right)): - inc_dire = dires_right[d] - out_dire = dires_right[(d+2)%8] - if {inc_dire, out_dire}.issubset(pdires[node_id]): - inc_edge_id = inc2id[(node_id, inc_dire)] - out_edge_id = out2id[(node_id, out_dire)] - new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21], - 'inc_dire':[inc_dire], 'out_dire':[out_dire], - 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]}) - self.matching.append(new_row) - self.matching.append(self.match7[self.match7.node_id.isin(self.child_ids)]) + child_matching = self.match7[self.match7.node_id.isin(self.child_ids)] + child_matching = child_matching.drop(columns=['inc_angle', 'out_angle']) self.matching = pd.concat(self.matching) self.matching = self.matching.dropna(subset=['inc_edge_id', 'out_edge_id'])\ .sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True) self.matching['move_no'] = self.matching['move_no'].astype(int) - # self.matching.to_csv(os.path.join(self.path_intermediates, 'matching.csv')) # 2-2 신호 초기화 def initialize_state(self):