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",
+ " inter_no | \n",
+ " move_no | \n",
+ " inc_dire | \n",
+ " out_dire | \n",
+ " inc_edge_id | \n",
+ " out_edge_id | \n",
+ " node_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " 동 | \n",
+ " 남 | \n",
+ " 571545870_02 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " 571510153_02 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 5 | \n",
+ " 서 | \n",
+ " 북 | \n",
+ " 571510153_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 135 | \n",
+ " 210 | \n",
+ " 13 | \n",
+ " 남서 | \n",
+ " 북서 | \n",
+ " 571500585_02 | \n",
+ " 571500535_01 | \n",
+ " i6 | \n",
+ "
\n",
+ " \n",
+ " 136 | \n",
+ " 210 | \n",
+ " 14 | \n",
+ " 북동 | \n",
+ " 남서 | \n",
+ " 571511538_02.121 | \n",
+ " 571500585_01 | \n",
+ " i6 | \n",
+ "
\n",
+ " \n",
+ " 137 | \n",
+ " 210 | \n",
+ " 15 | \n",
+ " 북서 | \n",
+ " 북동 | \n",
+ " 571500535_02.18 | \n",
+ " 571511538_01 | \n",
+ " i6 | \n",
+ "
\n",
+ " \n",
+ " 138 | \n",
+ " 210 | \n",
+ " 16 | \n",
+ " 남동 | \n",
+ " 북서 | \n",
+ " -571542115_01 | \n",
+ " 571500535_01 | \n",
+ " i6 | \n",
+ "
\n",
+ " \n",
+ " 139 | \n",
+ " 210 | \n",
+ " 5 | \n",
+ " 서 | \n",
+ " 북 | \n",
+ " 571500535_02 | \n",
+ " -571500535_02 | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
140 rows × 7 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no move_no inc_dire out_dire inc_edge_id out_edge_id \\\n",
+ "0 175 1 동 남 571545870_02 571542797_02 \n",
+ "1 175 2 서 동 571510153_02 571545870_01 \n",
+ "2 175 3 남 서 -571542797_02 571510153_01 \n",
+ "3 175 4 북 남 -571500487_01 571542797_02 \n",
+ "4 175 5 서 북 571510153_02 571500487_01 \n",
+ ".. ... ... ... ... ... ... \n",
+ "135 210 13 남서 북서 571500585_02 571500535_01 \n",
+ "136 210 14 북동 남서 571511538_02.121 571500585_01 \n",
+ "137 210 15 북서 북동 571500535_02.18 571511538_01 \n",
+ "138 210 16 남동 북서 -571542115_01 571500535_01 \n",
+ "139 210 5 서 북 571500535_02 -571500535_02 \n",
+ "\n",
+ " node_id \n",
+ "0 i0 \n",
+ "1 i0 \n",
+ "2 i0 \n",
+ "3 i0 \n",
+ "4 i0 \n",
+ ".. ... \n",
+ "135 i6 \n",
+ "136 i6 \n",
+ "137 i6 \n",
+ "138 i6 \n",
+ "139 u60 \n",
+ "\n",
+ "[140 rows x 7 columns]"
+ ]
+ },
+ "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 176ac9501..8ea041067 100644
Binary files a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc and b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc differ
diff --git a/Scripts/preprocess_daily.py b/Scripts/preprocess_daily.py
index 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):