{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np\n", "import sys\n", "sys.path.append('../../Scripts')\n", "from preprocess_daily import DailyPreprocessor\n", "from generate_signals import SignalGenerator" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n" ] } ], "source": [ "self = DailyPreprocessor()\n", "self.load_data() # 1. 데이터 불러오기\n", "self.make_match1() # 2-1-1\n", "self.make_match2() # 2-1-2\n", "self.make_match3() # 2-1-3\n", "self.make_match4() # 2-1-4\n", "self.make_match5() # 2-1-5" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node_idinc_edge_idout_edge_idturn_type
23i8-571500569_01571500583_02straight
24i8-571500569_01571500618_01left
25i8571500618_02571500583_02left
26i8571500618_02571500617_01straight
27i8571500617_02571500618_01straight
28i8571500618_02571500617_01straight
29i8571500617_02571500618_01straight
30i8571500617_02571500569_01left
31i8571500583_01571500617_01left
32i8571500583_01571500569_01straight
\n", "
" ], "text/plain": [ " node_id inc_edge_id out_edge_id turn_type\n", "23 i8 -571500569_01 571500583_02 straight\n", "24 i8 -571500569_01 571500618_01 left\n", "25 i8 571500618_02 571500583_02 left\n", "26 i8 571500618_02 571500617_01 straight\n", "27 i8 571500617_02 571500618_01 straight\n", "28 i8 571500618_02 571500617_01 straight\n", "29 i8 571500617_02 571500618_01 straight\n", "30 i8 571500617_02 571500569_01 left\n", "31 i8 571500583_01 571500617_01 left\n", "32 i8 571500583_01 571500569_01 straight" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.turn_type[self.turn_type.node_id=='i8']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "self.match5 = self.match4.copy()\n", "# 진입진출ID 매칭\n", "for index, row in self.match5.iterrows():\n", " node_id = self.inter2node[row.inter_no]\n", " node = self.net.getNode(node_id)\n", " # 교차로의 모든 (from / to) edges\n", " inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges\n", " out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges\n", " # 교차로의 모든 (from / to) unit vector\n", " inc_vecs = []\n", " for inc_edge in inc_edges:\n", " start = inc_edge.getShape()[-1]\n", " end = inc_edge.getShape()[-2]\n", " inc_vec = np.array(end) - np.array(start)\n", " inc_vec = inc_vec / (inc_vec ** 2).sum() ** 0.5\n", " inc_vecs.append(inc_vec)\n", " out_vecs = []\n", " for out_edge in out_edges:\n", " start = out_edge.getShape()[0]\n", " end = out_edge.getShape()[1]\n", " out_vec = np.array(end) - np.array(start)\n", " out_vec = out_vec / (out_vec ** 2).sum() ** 0.5\n", " out_vecs.append(out_vec)\n", " # 진입각, 진출각 불러오기\n", " if not pd.isna(row.inc_angle):\n", " inc_angle = int(row.inc_angle)\n", " out_angle = int(row.out_angle)\n", " # 방위각을 일반각으로 가공, 라디안 변환, 단위벡터로 변환\n", " inc_angle = (90 - inc_angle) % 360\n", " inc_angle = inc_angle * np.pi / 180.\n", " inc_vec_true = np.array([np.cos(inc_angle), np.sin(inc_angle)])\n", " out_angle = (90 - out_angle) % 360\n", " out_angle = out_angle * np.pi / 180.\n", " out_vec_true = np.array([np.cos(out_angle), np.sin(out_angle)])\n", " # 매칭 엣지 반환\n", " inc_index = np.array([np.dot(inc_vec, inc_vec_true) for inc_vec in inc_vecs]).argmax()\n", " 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", " self.match5.at[index, 'inc_edge_id'] = inc_edge_id\n", " self.match5.at[index, 'out_edge_id'] = out_edge_id\n", "self.match5['node_id'] = self.match5['inter_no'].map(self.inter2node)\n", "self.match5 = self.match5.sort_values(by=['inter_no','phase_no','ring_type']).reset_index(drop=True)\n", "\n", "# n2io2turn : dictionary that maps node_id to io2turn\n", "self.n2io2turn = dict()\n", "for node_id in self.parent_ids:\n", " turn = self.turn_type[self.turn_type.node_id==node_id]\n", " io = list(zip(turn.inc_edge_id, turn.out_edge_id))\n", " # io2turn : dictionary that maps (inc_edge_id, out_edge_id) to turn_type\n", " io2turn = dict(zip(io, turn.turn_type))\n", " self.n2io2turn[node_id] = io2turn\n", "\n", "# turn_type 지정\n", "for i, row in self.match5.iterrows():\n", " node_id = row.node_id\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", " if not (pd.isna(inc_edge_id) and pd.isna(out_edge_id)):\n", " turn_type = self.n2io2turn[node_id][(inc_edge_id, out_edge_id)]\n", " self.match5.at[i, 'turn_type'] = turn_type\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n" ] } ], "source": [ "self = DailyPreprocessor() \n", "self.load_data() # 1\n", "self.get_matches() # 2\n", "self.initialize_state() # 2-1" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
51753B1090180571545870_02571542797_02i0left
61754A5270000571510153_02571500487_01i0left
71754B2270090571510153_02571545870_01i0straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", "5 175 3 B 1 동 남 090 \n", "6 175 4 A 5 서 북 270 \n", "7 175 4 B 2 서 동 270 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "0 000 -571542797_02 571500487_01 i0 straight \n", "1 180 -571500487_01 571542797_02 i0 straight \n", "2 090 -571500487_01 571545870_01 i0 left \n", "3 270 -571542797_02 571510153_01 i0 left \n", "4 270 571545870_02 571510153_01 i0 straight \n", "5 180 571545870_02 571542797_02 i0 left \n", "6 000 571510153_02 571500487_01 i0 left \n", "7 090 571510153_02 571545870_01 i0 straight " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m5 = self.match5[(self.match5.node_id=='i0')]\n", "display(m5)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "0 000 -571542797_02 571500487_01 i0 straight \n", "1 180 -571500487_01 571542797_02 i0 straight \n", "2 090 -571500487_01 571545870_01 i0 left \n", "3 270 -571542797_02 571510153_01 i0 left \n", "4 270 571545870_02 571510153_01 i0 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "0 000 -571542797_02 571500487_01 i0 straight \n", "1 180 -571500487_01 571542797_02 i0 straight \n", "2 090 -571500487_01 571545870_01 i0 left \n", "3 270 -571542797_02 571510153_01 i0 left \n", "4 270 571545870_02 571510153_01 i0 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
0175i01571545870_02571542797_02left
1175i02571510153_02571545870_01straight
2175i03-571542797_02571510153_01left
3175i04-571500487_01571542797_02straight
4175i05571510153_02571500487_01left
\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n", "0 175 i0 1 동 남 571545870_02 571542797_02 \n", "1 175 i0 2 서 동 571510153_02 571545870_01 \n", "2 175 i0 3 남 서 -571542797_02 571510153_01 \n", "3 175 i0 4 북 남 -571500487_01 571542797_02 \n", "4 175 i0 5 서 북 571510153_02 571500487_01 \n", "\n", " turn_type \n", "0 left \n", "1 straight \n", "2 left \n", "3 straight \n", "4 left " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(self.match5.head())\n", "display(self.match6.head())\n", "display(self.matching.head())" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n" ] } ], "source": [ "import copy\n", "self = DailyPreprocessor()\n", "self.load_data() # 1. 데이터 불러오기\n", "self.get_matches() # 2-1 매칭테이블 생성\n", "self.initialize_state() # 2-2 신호 초기화" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i0\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
51753B1090180571545870_02571542797_02i0left
61754A5270000571510153_02571500487_01i0left
71754B2270090571510153_02571545870_01i0straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", "5 175 3 B 1 동 남 090 \n", "6 175 4 A 5 서 북 270 \n", "7 175 4 B 2 서 동 270 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "0 000 -571542797_02 571500487_01 i0 straight \n", "1 180 -571500487_01 571542797_02 i0 straight \n", "2 090 -571500487_01 571545870_01 i0 left \n", "3 270 -571542797_02 571510153_01 i0 left \n", "4 270 571545870_02 571510153_01 i0 straight \n", "5 180 571545870_02 571542797_02 i0 left \n", "6 000 571510153_02 571500487_01 i0 left \n", "7 090 571510153_02 571545870_01 i0 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "i1\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", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
81761A8180356-571542810_01-571542797_02.99i1straight
91761B4359180571542797_02.99571542810_01i1straight
101762A8180356-571542810_01-571542797_02.99i1straight
111762B3180270-571542810_01571543469_01i1left
121763A5270356571543469_02-571542797_02.99i1left
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "8 176 1 A 8 남 북 180 \n", "9 176 1 B 4 북 남 359 \n", "10 176 2 A 8 남 북 180 \n", "11 176 2 B 3 남 서 180 \n", "12 176 3 A 5 서 북 270 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "8 356 -571542810_01 -571542797_02.99 i1 straight \n", "9 180 571542797_02.99 571542810_01 i1 straight \n", "10 356 -571542810_01 -571542797_02.99 i1 straight \n", "11 270 -571542810_01 571543469_01 i1 left \n", "12 356 571543469_02 -571542797_02.99 i1 left " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "i2\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", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
141771A8179000-571542809_01571542811_01i2straight
151771B4000180571542811_02571542809_01i2straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "14 177 1 A 8 남 북 179 \n", "15 177 1 B 4 북 남 000 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "14 000 -571542809_01 571542811_01 i2 straight \n", "15 180 571542811_02 571542809_01 i2 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "i3\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
181781A8180000571540304_02571556450_01i3straight
191781B4000180571556450_02571540304_01i3straight
201782A7000090571556450_02571500475_01i3left
211782B3180270571540304_02571540303_01i3left
221783A5270000571540303_02.21571556450_01i3left
231783B2270090571540303_02.21571500475_01i3straight
241784A6090270-571500475_01571540303_01i3straight
251784B1090180-571500475_01571540304_01i3left
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "18 178 1 A 8 남 북 180 \n", "19 178 1 B 4 북 남 000 \n", "20 178 2 A 7 북 동 000 \n", "21 178 2 B 3 남 서 180 \n", "22 178 3 A 5 서 북 270 \n", "23 178 3 B 2 서 동 270 \n", "24 178 4 A 6 동 서 090 \n", "25 178 4 B 1 동 남 090 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "18 000 571540304_02 571556450_01 i3 straight \n", "19 180 571556450_02 571540304_01 i3 straight \n", "20 090 571556450_02 571500475_01 i3 left \n", "21 270 571540304_02 571540303_01 i3 left \n", "22 000 571540303_02.21 571556450_01 i3 left \n", "23 090 571540303_02.21 571500475_01 i3 straight \n", "24 270 -571500475_01 571540303_01 i3 straight \n", "25 180 -571500475_01 571540304_01 i3 left " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "i6\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_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
482101A6090270-571542115_01571500535_01i6straight
502102A5270000571500535_02.18571511538_01i6left
512102B2270090571500535_02.18571542115_01i6straight
522103A7000090571511538_02.121571542115_01i6left
532103B4000180571511538_02.121571500585_01i6straight
542104A8180000571500585_02571511538_01i6straight
552104B3180270571500585_02571500535_01i6left
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "48 210 1 A 6 동 서 090 \n", "50 210 2 A 5 서 북 270 \n", "51 210 2 B 2 서 동 270 \n", "52 210 3 A 7 북 동 000 \n", "53 210 3 B 4 북 남 000 \n", "54 210 4 A 8 남 북 180 \n", "55 210 4 B 3 남 서 180 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "48 270 -571542115_01 571500535_01 i6 straight \n", "50 000 571500535_02.18 571511538_01 i6 left \n", "51 090 571500535_02.18 571542115_01 i6 straight \n", "52 090 571511538_02.121 571542115_01 i6 left \n", "53 180 571511538_02.121 571500585_01 i6 straight \n", "54 000 571500585_02 571511538_01 i6 straight \n", "55 270 571500585_02 571500535_01 i6 left " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[8]\n", "i7\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", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
402061A8180000-571511538_02571542073_02i7straight
412061B4000180571542073_01571511538_02i7straight
442063A8180000-571511538_02571542073_02i7straight
452063B4000180571542073_01571511538_02i7straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "40 206 1 A 8 남 북 180 \n", "41 206 1 B 4 북 남 000 \n", "44 206 3 A 8 남 북 180 \n", "45 206 3 B 4 북 남 000 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "40 000 -571511538_02 571542073_02 i7 straight \n", "41 180 571542073_01 571511538_02 i7 straight \n", "44 000 -571511538_02 571542073_02 i7 straight \n", "45 180 571542073_01 571511538_02 i7 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[2]\n", "i8\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
262011A8180000-571500569_01571500583_02i8straight
272011B3180270-571500569_01571500618_01i8left
282012A5270000571500618_02571500583_02i8left
292012B2270090571500618_02571500617_01i8straight
302013A6090270571500617_02571500618_01i8straight
312013B2270090571500618_02571500617_01i8straight
322014A6090270571500617_02571500618_01i8straight
332014B1090180571500617_02571500569_01i8left
342015A7000090571500583_01571500617_01i8left
352015B4000180571500583_01571500569_01i8straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "26 201 1 A 8 남 북 180 \n", "27 201 1 B 3 남 서 180 \n", "28 201 2 A 5 서 북 270 \n", "29 201 2 B 2 서 동 270 \n", "30 201 3 A 6 동 서 090 \n", "31 201 3 B 2 서 동 270 \n", "32 201 4 A 6 동 서 090 \n", "33 201 4 B 1 동 남 090 \n", "34 201 5 A 7 북 동 000 \n", "35 201 5 B 4 북 남 000 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "26 000 -571500569_01 571500583_02 i8 straight \n", "27 270 -571500569_01 571500618_01 i8 left \n", "28 000 571500618_02 571500583_02 i8 left \n", "29 090 571500618_02 571500617_01 i8 straight \n", "30 270 571500617_02 571500618_01 i8 straight \n", "31 090 571500618_02 571500617_01 i8 straight \n", "32 270 571500617_02 571500618_01 i8 straight \n", "33 180 571500617_02 571500569_01 i8 left \n", "34 090 571500583_01 571500617_01 i8 left \n", "35 180 571500583_01 571500569_01 i8 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "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", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
362021A6090270571510152_02-571510152_01i9straight
372021B2270090571510152_01571510152_01.65i9straight
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "36 202 1 A 6 동 서 090 \n", "37 202 1 B 2 서 동 270 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "36 270 571510152_02 -571510152_01 i9 straight \n", "37 090 571510152_01 571510152_01.65 i9 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[]\n" ] } ], "source": [ "self.p2PLindices = dict() # parent id to protected left index\n", "for parent_id in self.parent_ids:\n", " print(parent_id)\n", " init_state = self.node2init[parent_id]\n", " # 우회전 이동류 인덱스\n", " indices_right = [i for i in range(len(init_state)) if init_state[i]=='g']\n", " # from-to가 지정된 이동류 인덱스\n", " indices_assigned = []\n", " m5 = self.match5[(self.match5.node_id==parent_id)].dropna(subset=['inc_edge_id', 'out_edge_id'])\n", " display(m5)\n", " for row in m5.itertuples():\n", " inc_edge = self.net.getEdge(row.inc_edge_id)\n", " out_edge = self.net.getEdge(row.out_edge_id)\n", " conns = inc_edge.getConnections(out_edge)\n", " indices = [conn for conn in conns if conn.getTLLinkIndex()>=0]\n", " indices = [conn for conn in conns if conn.getJunctionIndex()>=0]\n", " indices = [conn.getTLLinkIndex() for conn in conns]\n", " indices_assigned.extend(indices)\n", " # 좌회전 이동류 인덱스\n", " indices_left = []\n", " for row in self.turn_type[self.turn_type.turn_type=='left'].itertuples():\n", " inc_edge = self.net.getEdge(row.inc_edge_id)\n", " out_edge = self.net.getEdge(row.out_edge_id)\n", " conns = inc_edge.getConnections(out_edge)\n", " indices = [conn for conn in conns if conn.getTLLinkIndex()>=0]\n", " indices = [conn for conn in conns if conn.getJunctionIndex()>=0]\n", " indices = [conn.getTLLinkIndex() for conn in conns]\n", " indices_left.extend(indices)\n", "\n", " PLindices = list((set(range(len(init_state))) - set(indices_right) - set(indices_assigned)).intersection(indices_left))\n", " self.p2PLindices[parent_id] = PLindices\n", " print(PLindices)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
141771A8179000-571542809_01571542811_01i2straight
151771B4000180571542811_02571542809_01i2straight
161772A17NaNNaNNaNNaNNaNNaNi2NaN
171772B18NaNNaNNaNNaNNaNNaNi2NaN
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "14 177 1 A 8 남 북 179 \n", "15 177 1 B 4 북 남 000 \n", "16 177 2 A 17 NaN NaN NaN \n", "17 177 2 B 18 NaN NaN NaN \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "14 000 -571542809_01 571542811_01 i2 straight \n", "15 180 571542811_02 571542809_01 i2 straight \n", "16 NaN NaN NaN i2 NaN \n", "17 NaN NaN NaN i2 NaN " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.match5[(self.match5.node_id=='i2')]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
32177i21571542107_02571542809_01left
33177i22-571542809_01571542107_01straight
34177i23-571542809_01571542809_01left
35177i24571542811_02571542809_01straight
36177i25-571542809_01571542811_01straight
37177i26571542107_02571542809_01straight
38177i27571542811_02571542107_01left
39177i28-571542809_01571542811_01straight
40177i29북동남동571542107_02571542809_01left
41177i210남서북동-571542809_01571542107_01straight
42177i211남동남서-571542809_01571542809_01left
43177i212북서남동571542811_02571542809_01straight
44177i213남서북서-571542809_01571542811_01straight
45177i214북동남서571542107_02571542809_01straight
46177i215북서북동571542811_02571542107_01left
47177i216남동북서-571542809_01571542811_01straight
\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n", "32 177 i2 1 동 남 571542107_02 571542809_01 \n", "33 177 i2 2 서 동 -571542809_01 571542107_01 \n", "34 177 i2 3 남 서 -571542809_01 571542809_01 \n", "35 177 i2 4 북 남 571542811_02 571542809_01 \n", "36 177 i2 5 서 북 -571542809_01 571542811_01 \n", "37 177 i2 6 동 서 571542107_02 571542809_01 \n", "38 177 i2 7 북 동 571542811_02 571542107_01 \n", "39 177 i2 8 남 북 -571542809_01 571542811_01 \n", "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n", "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n", "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n", "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n", "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n", "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n", "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n", "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n", "\n", " turn_type \n", "32 left \n", "33 straight \n", "34 left \n", "35 straight \n", "36 straight \n", "37 straight \n", "38 left \n", "39 straight \n", "40 left \n", "41 straight \n", "42 left \n", "43 straight \n", "44 straight \n", "45 straight \n", "46 left \n", "47 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_typestate
32177i21571542107_02571542809_01leftrrggrrr
33177i22-571542809_01571542107_01straightrrgGrrr
34177i23-571542809_01571542809_01leftrrggrrr
35177i24571542811_02571542809_01straightGGggrrr
36177i25-571542809_01571542811_01straightrrggGGG
37177i26571542107_02571542809_01straightrrggrrr
38177i27571542811_02571542107_01leftrrggrrr
39177i28-571542809_01571542811_01straightrrggGGG
40177i29북동남동571542107_02571542809_01leftrrggrrr
41177i210남서북동-571542809_01571542107_01straightrrgGrrr
42177i211남동남서-571542809_01571542809_01leftrrggrrr
43177i212북서남동571542811_02571542809_01straightGGggrrr
44177i213남서북서-571542809_01571542811_01straightrrggGGG
45177i214북동남서571542107_02571542809_01straightrrggrrr
46177i215북서북동571542811_02571542107_01leftrrggrrr
47177i216남동북서-571542809_01571542811_01straightrrggGGG
\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n", "32 177 i2 1 동 남 571542107_02 571542809_01 \n", "33 177 i2 2 서 동 -571542809_01 571542107_01 \n", "34 177 i2 3 남 서 -571542809_01 571542809_01 \n", "35 177 i2 4 북 남 571542811_02 571542809_01 \n", "36 177 i2 5 서 북 -571542809_01 571542811_01 \n", "37 177 i2 6 동 서 571542107_02 571542809_01 \n", "38 177 i2 7 북 동 571542811_02 571542107_01 \n", "39 177 i2 8 남 북 -571542809_01 571542811_01 \n", "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n", "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n", "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n", "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n", "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n", "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n", "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n", "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n", "\n", " turn_type state \n", "32 left rrggrrr \n", "33 straight rrgGrrr \n", "34 left rrggrrr \n", "35 straight GGggrrr \n", "36 straight rrggGGG \n", "37 straight rrggrrr \n", "38 left rrggrrr \n", "39 straight rrggGGG \n", "40 left rrggrrr \n", "41 straight rrgGrrr \n", "42 left rrggrrr \n", "43 straight GGggrrr \n", "44 straight rrggGGG \n", "45 straight rrggrrr \n", "46 left rrggrrr \n", "47 straight rrggGGG " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import copy\n", "self = DailyPreprocessor()\n", "self.load_data() # 1. 데이터 불러오기\n", "self.get_matches() # 2-1 매칭테이블 생성\n", "self.initialize_state() # 2-2 신호 초기화\n", "display(self.matching[self.matching.node_id=='i2'])\n", "# matching에 신호 배정\n", "for i, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = self.net.getEdge(row.inc_edge_id)\n", " out_edge = self.net.getEdge(row.out_edge_id)\n", " state = copy.deepcopy(self.node2init[node_id])\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[i, 'state'] = ''.join(state)\n", "\n", "display(self.matching[self.matching.node_id=='i2'])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# matching의 각 행을 순회\n", "for row in self.matching.itertuples(index=True):\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", " state = copy.deepcopy(self.node2init)[node_id]\n", "\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge_id)\n", " out_edge = self.net.getEdge(out_edge_id)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[row.Index, 'state'] = ''.join(state)\n", "\n", "self.matching = self.matching.dropna(subset='state')\n", "self.matching = self.matching.reset_index(drop=True)\n", "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'inc_edge_id', 'out_edge_id', 'state']]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
.......................................
1032102B2270090NaNNaNu60straight
1042103A7000090NaNNaNu60left
1052103B4000180NaNNaNu60straight
1062104A8180000NaNNaNu60straight
1072104B3180270NaNNaNu60left
\n", "

108 rows × 12 columns

\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", ".. ... ... ... ... ... ... ... \n", "103 210 2 B 2 서 동 270 \n", "104 210 3 A 7 북 동 000 \n", "105 210 3 B 4 북 남 000 \n", "106 210 4 A 8 남 북 180 \n", "107 210 4 B 3 남 서 180 \n", "\n", " out_angle inc_edge_id out_edge_id node_id turn_type \n", "0 000 -571542797_02 571500487_01 i0 straight \n", "1 180 -571500487_01 571542797_02 i0 straight \n", "2 090 -571500487_01 571545870_01 i0 left \n", "3 270 -571542797_02 571510153_01 i0 left \n", "4 270 571545870_02 571510153_01 i0 straight \n", ".. ... ... ... ... ... \n", "103 090 NaN NaN u60 straight \n", "104 090 NaN NaN u60 left \n", "105 180 NaN NaN u60 straight \n", "106 000 NaN NaN u60 straight \n", "107 270 NaN NaN u60 left \n", "\n", "[108 rows x 12 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "2-3. 직진 및 좌회전(G)을 배정했습니다.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
0175i01A8-571542797_02571500487_01grrrgrrrgGGGGrgrr
1175i01B4-571500487_01571542797_02gGGrgrrrgrrrrrgrr
2175i02A7-571500487_01571545870_01grrGgrrrgrrrrrgrr
3175i02B3-571542797_02571510153_01grrrgrrrgrrrrGgrr
4175i03A6571545870_02571510153_01grrrgGGrgrrrrrgrr
...........................
103210u602B2NaNNaNGGGGGGGGr
104210u603A7NaNNaNGGGGGGGGr
105210u603B4NaNNaNGGGGGGGGr
106210u604A8NaNNaNGGGGGGGGr
107210u604B3NaNNaNGGGGGGGGr
\n", "

108 rows × 8 columns

\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n", "0 175 i0 1 A 8 -571542797_02 \n", "1 175 i0 1 B 4 -571500487_01 \n", "2 175 i0 2 A 7 -571500487_01 \n", "3 175 i0 2 B 3 -571542797_02 \n", "4 175 i0 3 A 6 571545870_02 \n", ".. ... ... ... ... ... ... \n", "103 210 u60 2 B 2 NaN \n", "104 210 u60 3 A 7 NaN \n", "105 210 u60 3 B 4 NaN \n", "106 210 u60 4 A 8 NaN \n", "107 210 u60 4 B 3 NaN \n", "\n", " out_edge_id state \n", "0 571500487_01 grrrgrrrgGGGGrgrr \n", "1 571542797_02 gGGrgrrrgrrrrrgrr \n", "2 571545870_01 grrGgrrrgrrrrrgrr \n", "3 571510153_01 grrrgrrrgrrrrGgrr \n", "4 571510153_01 grrrgGGrgrrrrrgrr \n", ".. ... ... \n", "103 NaN GGGGGGGGr \n", "104 NaN GGGGGGGGr \n", "105 NaN GGGGGGGGr \n", "106 NaN GGGGGGGGr \n", "107 NaN GGGGGGGGr \n", "\n", "[108 rows x 8 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(self.match6)\n", "self.assign_signals() # 2-3 신호배정\n", "display(self.match6)" ] } ], "metadata": { "kernelspec": { "display_name": "sts", "language": "python", "name": "sts" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }