{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np\n", "import sys\n", "sys.path.append('../../Scripts')\n", "from preprocess_daily import DailyPreprocessor\n", "from generate_signals import SignalGenerator" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n" ] } ], "source": [ "self = DailyPreprocessor()\n", "self.load_data() # 1. 데이터 불러오기\n", "self.get_matches() # 2-1 매칭테이블 생성" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'u00': 4, 'u20': 2, 'u30': 4, 'u31': 4, 'u32': 7, 'u60': 8}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.uid2uindex" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
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": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'u00': 4, 'u20': 2, 'u30': 4, 'u31': 4, 'u32': 7, 'u60': 8}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.uid2uindex" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n", "self.node2init = {}\n", "# 유턴노드를 제외한 모든 노드에 대하여 초기화 신호 지정\n", "for node_id in set(self.node_ids) - set(self.u_turn_ids):\n", " node = self.net.getNode(node_id)\n", " conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n", " conns = [c for c in conns if c[0] >= 0]\n", " conns = sorted(conns, key=lambda x: x[0])\n", " state = []\n", " for i, ci in conns: # i번째 connection : ci\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 r, 그외에는 g\n", " for j, cj in conns: # j번째 connection : cj\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", " self.node2init[node_id] = state\n", "\n", "# 유턴노드에 대하여 초기화 신호 지정\n", "for node_id in self.u_turn_ids:\n", " node = self.net.getNode(node_id)\n", " conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n", " conns = [c for c in conns if c[0] >= 0]\n", " conns = sorted(conns, key=lambda x: x[0])\n", " state = []\n", " for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " is_uturn = (i == self.uid2uindex[node_id])\n", " state.append('r' if is_uturn else 'G')\n", " self.node2init[node_id] = state" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-2. 비보호우회전(g)을 배정했습니다.\n", "c30 rrrrrr\n", "i0 grrrgrrrgrrrrrgrr\n", "i1 grrrrrrgrr\n", "i2 rrggrrr\n", "i3 grrrrgrrrrgrrrrgrrrr\n", "i6 grrrgrrrrgrrgrrr\n", "i7 rrrggrr\n", "i8 grrrrrrrgrrrgrrr\n", "i9 rrrr\n", "u00 ggggrgggg\n", "u20 ggrggg\n", "u30 ggggrggg\n", "u31 ggggrggg\n", "u32 gggggggr\n", "u60 ggggggggr\n" ] } ], "source": [ "self.initialize_state() # 2-2 신호 초기화\n", "for node_id in self.node_ids:\n", " print(node_id, ''.join(self.node2init[node_id]))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-2. 비보호우회전(g)을 배정했습니다.\n", "2-3. 직진 및 좌회전(G)을 배정했습니다.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idphase_noring_typemove_noinc_edge_idout_edge_idstate
8175u001A8NaNNaNggggrgggg
9175u001B4NaNNaNggggrgggg
10175u002A7571500487_02571500487_01.32ggggGgggg
11175u002B3NaNNaNggggrgggg
12175u003A6NaNNaNggggrgggg
13175u003B1NaNNaNggggrgggg
14175u004A5NaNNaNggggrgggg
15175u004B2NaNNaNggggrgggg
26177u201A8NaNNaNggrggg
27177u201B4NaNNaNggrggg
28177u202A17571542810_01.51571542810_02ggGggg
29177u202B18NaNNaNggrggg
46178u301A8NaNNaNggggrggg
47178u301B4NaNNaNggggrggg
48178u302A7NaNNaNggggrggg
49178u302B3NaNNaNggggrggg
50178u303A5NaNNaNggggrggg
51178u303B2NaNNaNggggrggg
52178u304A6571556452_01571556452_02ggggGggg
53178u304B1NaNNaNggggrggg
54178u311A8571500475_02571500475_01.26ggggGggg
55178u311B4NaNNaNggggrggg
56178u312A7NaNNaNggggrggg
57178u312B3NaNNaNggggrggg
58178u313A5NaNNaNggggrggg
59178u313B2NaNNaNggggrggg
60178u314A6NaNNaNggggrggg
61178u314B1NaNNaNggggrggg
62178u321A8NaNNaNgggggggr
63178u321B4571540303_02-571540303_02gggggggG
64178u322A7NaNNaNgggggggr
65178u322B3NaNNaNgggggggr
66178u323A5NaNNaNgggggggr
67178u323B2NaNNaNgggggggr
68178u324A6NaNNaNgggggggr
69178u324B1NaNNaNgggggggr
100210u601A6NaNNaNggggggggr
101210u601B18NaNNaNggggggggr
102210u602A5571500535_02-571500535_02ggggggggG
103210u602B2NaNNaNggggggggr
104210u603A7NaNNaNggggggggr
105210u603B4NaNNaNggggggggr
106210u604A8NaNNaNggggggggr
107210u604B3NaNNaNggggggggr
\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no inc_edge_id \\\n", "8 175 u00 1 A 8 NaN \n", "9 175 u00 1 B 4 NaN \n", "10 175 u00 2 A 7 571500487_02 \n", "11 175 u00 2 B 3 NaN \n", "12 175 u00 3 A 6 NaN \n", "13 175 u00 3 B 1 NaN \n", "14 175 u00 4 A 5 NaN \n", "15 175 u00 4 B 2 NaN \n", "26 177 u20 1 A 8 NaN \n", "27 177 u20 1 B 4 NaN \n", "28 177 u20 2 A 17 571542810_01.51 \n", "29 177 u20 2 B 18 NaN \n", "46 178 u30 1 A 8 NaN \n", "47 178 u30 1 B 4 NaN \n", "48 178 u30 2 A 7 NaN \n", "49 178 u30 2 B 3 NaN \n", "50 178 u30 3 A 5 NaN \n", "51 178 u30 3 B 2 NaN \n", "52 178 u30 4 A 6 571556452_01 \n", "53 178 u30 4 B 1 NaN \n", "54 178 u31 1 A 8 571500475_02 \n", "55 178 u31 1 B 4 NaN \n", "56 178 u31 2 A 7 NaN \n", "57 178 u31 2 B 3 NaN \n", "58 178 u31 3 A 5 NaN \n", "59 178 u31 3 B 2 NaN \n", "60 178 u31 4 A 6 NaN \n", "61 178 u31 4 B 1 NaN \n", "62 178 u32 1 A 8 NaN \n", "63 178 u32 1 B 4 571540303_02 \n", "64 178 u32 2 A 7 NaN \n", "65 178 u32 2 B 3 NaN \n", "66 178 u32 3 A 5 NaN \n", "67 178 u32 3 B 2 NaN \n", "68 178 u32 4 A 6 NaN \n", "69 178 u32 4 B 1 NaN \n", "100 210 u60 1 A 6 NaN \n", "101 210 u60 1 B 18 NaN \n", "102 210 u60 2 A 5 571500535_02 \n", "103 210 u60 2 B 2 NaN \n", "104 210 u60 3 A 7 NaN \n", "105 210 u60 3 B 4 NaN \n", "106 210 u60 4 A 8 NaN \n", "107 210 u60 4 B 3 NaN \n", "\n", " out_edge_id state \n", "8 NaN ggggrgggg \n", "9 NaN ggggrgggg \n", "10 571500487_01.32 ggggGgggg \n", "11 NaN ggggrgggg \n", "12 NaN ggggrgggg \n", "13 NaN ggggrgggg \n", "14 NaN ggggrgggg \n", "15 NaN ggggrgggg \n", "26 NaN ggrggg \n", "27 NaN ggrggg \n", "28 571542810_02 ggGggg \n", "29 NaN ggrggg \n", "46 NaN ggggrggg \n", "47 NaN ggggrggg \n", "48 NaN ggggrggg \n", "49 NaN ggggrggg \n", "50 NaN ggggrggg \n", "51 NaN ggggrggg \n", "52 571556452_02 ggggGggg \n", "53 NaN ggggrggg \n", "54 571500475_01.26 ggggGggg \n", "55 NaN ggggrggg \n", "56 NaN ggggrggg \n", "57 NaN ggggrggg \n", "58 NaN ggggrggg \n", "59 NaN ggggrggg \n", "60 NaN ggggrggg \n", "61 NaN ggggrggg \n", "62 NaN gggggggr \n", "63 -571540303_02 gggggggG \n", "64 NaN gggggggr \n", "65 NaN gggggggr \n", "66 NaN gggggggr \n", "67 NaN gggggggr \n", "68 NaN gggggggr \n", "69 NaN gggggggr \n", "100 NaN ggggggggr \n", "101 NaN ggggggggr \n", "102 -571500535_02 ggggggggG \n", "103 NaN ggggggggr \n", "104 NaN ggggggggr \n", "105 NaN ggggggggr \n", "106 NaN ggggggggr \n", "107 NaN ggggggggr " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.initialize_state() # 2-2 신호 초기화\n", "self.assign_signals() # 2-3 신호 배정\n", "self.match6[self.match6.node_id.isin(self.u_turn_ids)]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n", "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n", "['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n", "15\n", "8\n", "7\n", "\n", "['u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n", "['c30']\n" ] } ], "source": [ "print(self.node_ids)\n", "print(self.parent_ids)\n", "print(self.child_ids)\n", "print(len(self.node_ids))\n", "print(len(self.parent_ids))\n", "print(len(self.child_ids))\n", "print()\n", "print(self.u_turn_ids)\n", "print(self.coord_ids)\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c30 rrrrrr\n", "u00 ggggrgggg\n", "u20 ggrggg\n", "u30 ggggrggg\n", "u31 ggggrggg\n", "u32 gggggggr\n", "u60 ggggggggr\n" ] } ], "source": [ "for node_id in self.child_ids:\n", " state = ''.join(self.node2init[node_id])\n", " print(node_id, state)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
0175i01571545870_02571542797_02left
1175i02571510153_02571545870_01straight
2175i03-571542797_02571510153_01left
3175i04-571500487_01571542797_02straight
4175i05571510153_02571500487_01left
...........................
123210i612북서남동571500535_02.18571542115_01straight
124210i613남서북서571500585_02571500535_01left
125210i614북동남서571511538_02.121571500585_01straight
126210i615북서북동571500535_02.18571511538_01left
127210i616남동북서-571542115_01571500535_01straight
\n", "

128 rows × 8 columns

\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id \\\n", "0 175 i0 1 동 남 571545870_02 \n", "1 175 i0 2 서 동 571510153_02 \n", "2 175 i0 3 남 서 -571542797_02 \n", "3 175 i0 4 북 남 -571500487_01 \n", "4 175 i0 5 서 북 571510153_02 \n", ".. ... ... ... ... ... ... \n", "123 210 i6 12 북서 남동 571500535_02.18 \n", "124 210 i6 13 남서 북서 571500585_02 \n", "125 210 i6 14 북동 남서 571511538_02.121 \n", "126 210 i6 15 북서 북동 571500535_02.18 \n", "127 210 i6 16 남동 북서 -571542115_01 \n", "\n", " out_edge_id turn_type \n", "0 571542797_02 left \n", "1 571545870_01 straight \n", "2 571510153_01 left \n", "3 571542797_02 straight \n", "4 571500487_01 left \n", ".. ... ... \n", "123 571542115_01 straight \n", "124 571500535_01 left \n", "125 571500585_01 straight \n", "126 571511538_01 left \n", "127 571500535_01 straight \n", "\n", "[128 rows x 8 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.matching" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_type
32177i21571542107_02571542809_01left
33177i22-571542809_01571542107_01straight
34177i23-571542809_01571542809_01left
35177i24571542811_02571542809_01straight
36177i25-571542809_01571542811_01straight
37177i26571542107_02571542809_01straight
38177i27571542811_02571542107_01left
39177i28-571542809_01571542811_01straight
40177i29북동남동571542107_02571542809_01left
41177i210남서북동-571542809_01571542107_01straight
42177i211남동남서-571542809_01571542809_01left
43177i212북서남동571542811_02571542809_01straight
44177i213남서북서-571542809_01571542811_01straight
45177i214북동남서571542107_02571542809_01straight
46177i215북서북동571542811_02571542107_01left
47177i216남동북서-571542809_01571542811_01straight
\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n", "32 177 i2 1 동 남 571542107_02 571542809_01 \n", "33 177 i2 2 서 동 -571542809_01 571542107_01 \n", "34 177 i2 3 남 서 -571542809_01 571542809_01 \n", "35 177 i2 4 북 남 571542811_02 571542809_01 \n", "36 177 i2 5 서 북 -571542809_01 571542811_01 \n", "37 177 i2 6 동 서 571542107_02 571542809_01 \n", "38 177 i2 7 북 동 571542811_02 571542107_01 \n", "39 177 i2 8 남 북 -571542809_01 571542811_01 \n", "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n", "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n", "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n", "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n", "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n", "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n", "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n", "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n", "\n", " turn_type \n", "32 left \n", "33 straight \n", "34 left \n", "35 straight \n", "36 straight \n", "37 straight \n", "38 left \n", "39 straight \n", "40 left \n", "41 straight \n", "42 left \n", "43 straight \n", "44 straight \n", "45 straight \n", "46 left \n", "47 straight " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_noinc_direout_direinc_edge_idout_edge_idturn_typestate
32177i21571542107_02571542809_01leftrrggrrr
33177i22-571542809_01571542107_01straightrrgGrrr
34177i23-571542809_01571542809_01leftrrggrrr
35177i24571542811_02571542809_01straightGGggrrr
36177i25-571542809_01571542811_01straightrrggGGG
37177i26571542107_02571542809_01straightrrggrrr
38177i27571542811_02571542107_01leftrrggrrr
39177i28-571542809_01571542811_01straightrrggGGG
40177i29북동남동571542107_02571542809_01leftrrggrrr
41177i210남서북동-571542809_01571542107_01straightrrgGrrr
42177i211남동남서-571542809_01571542809_01leftrrggrrr
43177i212북서남동571542811_02571542809_01straightGGggrrr
44177i213남서북서-571542809_01571542811_01straightrrggGGG
45177i214북동남서571542107_02571542809_01straightrrggrrr
46177i215북서북동571542811_02571542107_01leftrrggrrr
47177i216남동북서-571542809_01571542811_01straightrrggGGG
\n", "
" ], "text/plain": [ " inter_no node_id move_no inc_dire out_dire inc_edge_id out_edge_id \\\n", "32 177 i2 1 동 남 571542107_02 571542809_01 \n", "33 177 i2 2 서 동 -571542809_01 571542107_01 \n", "34 177 i2 3 남 서 -571542809_01 571542809_01 \n", "35 177 i2 4 북 남 571542811_02 571542809_01 \n", "36 177 i2 5 서 북 -571542809_01 571542811_01 \n", "37 177 i2 6 동 서 571542107_02 571542809_01 \n", "38 177 i2 7 북 동 571542811_02 571542107_01 \n", "39 177 i2 8 남 북 -571542809_01 571542811_01 \n", "40 177 i2 9 북동 남동 571542107_02 571542809_01 \n", "41 177 i2 10 남서 북동 -571542809_01 571542107_01 \n", "42 177 i2 11 남동 남서 -571542809_01 571542809_01 \n", "43 177 i2 12 북서 남동 571542811_02 571542809_01 \n", "44 177 i2 13 남서 북서 -571542809_01 571542811_01 \n", "45 177 i2 14 북동 남서 571542107_02 571542809_01 \n", "46 177 i2 15 북서 북동 571542811_02 571542107_01 \n", "47 177 i2 16 남동 북서 -571542809_01 571542811_01 \n", "\n", " turn_type state \n", "32 left rrggrrr \n", "33 straight rrgGrrr \n", "34 left rrggrrr \n", "35 straight GGggrrr \n", "36 straight rrggGGG \n", "37 straight rrggrrr \n", "38 left rrggrrr \n", "39 straight rrggGGG \n", "40 left rrggrrr \n", "41 straight rrgGrrr \n", "42 left rrggrrr \n", "43 straight GGggrrr \n", "44 straight rrggGGG \n", "45 straight rrggrrr \n", "46 left rrggrrr \n", "47 straight rrggGGG " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import copy\n", "self = DailyPreprocessor()\n", "self.load_data() # 1. 데이터 불러오기\n", "self.get_matches() # 2-1 매칭테이블 생성\n", "self.initialize_state() # 2-2 신호 초기화\n", "display(self.matching[self.matching.node_id=='i2'])\n", "# matching에 신호 배정\n", "for i, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = self.net.getEdge(row.inc_edge_id)\n", " out_edge = self.net.getEdge(row.out_edge_id)\n", " state = copy.deepcopy(self.node2init[node_id])\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[i, 'state'] = ''.join(state)\n", "\n", "display(self.matching[self.matching.node_id=='i2'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# matching의 각 행을 순회\n", "for row in self.matching.itertuples(index=True):\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", " state = copy.deepcopy(self.node2init)[node_id]\n", "\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge_id)\n", " out_edge = self.net.getEdge(out_edge_id)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[row.Index, 'state'] = ''.join(state)\n", "\n", "self.matching = self.matching.dropna(subset='state')\n", "self.matching = self.matching.reset_index(drop=True)\n", "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'inc_edge_id', 'out_edge_id', 'state']]\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
.......................................
1032102B2270090NaNNaNu60straight
1042103A7000090NaNNaNu60left
1052103B4000180NaNNaNu60straight
1062104A8180000NaNNaNu60straight
1072104B3180270NaNNaNu60left
\n", "

108 rows × 12 columns

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

108 rows × 8 columns

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