{ "cells": [ { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "\n", "import sys, copy\n", "from datetime import datetime\n", "sys.path.append('../../Scripts')\n", "\n", "from preprocess_daily import DailyPreprocessor\n", "\n", "from generate_signals import SignalGenerator" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "self = DailyPreprocessor()" ] }, { "cell_type": "code", "execution_count": 12, "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" ] } ], "source": [ "self.load_data()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 0%| | 0/17280 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_nophas_Aphas_Bmove_Amove_B
01751184
11752273
21753361
31753462
41754452
\n", "" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B\n", "0 175 1 1 8 4\n", "1 175 2 2 7 3\n", "2 175 3 3 6 1\n", "3 175 3 4 6 2\n", "4 175 4 4 5 2" ] }, "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", "
inter_nophase_noring_typemove_no
01751A8
01751B4
11752A7
11752B3
21753A6
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no\n", "0 175 1 A 8\n", "0 175 1 B 4\n", "1 175 2 A 7\n", "1 175 2 B 3\n", "2 175 3 A 6" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dir
01751A8
11751B4
21752A7
31752B3
41753A6
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir\n", "0 175 1 A 8 남 북\n", "1 175 1 B 4 북 남\n", "2 175 2 A 7 북 동\n", "3 175 2 B 3 남 서\n", "4 175 3 A 6 동 서" ] }, "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_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179004
11751B4003176
21752A7001095
31752B3179270
41753A6090270
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "0 175 1 A 8 남 북 179 004\n", "1 175 1 B 4 북 남 003 176\n", "2 175 2 A 7 북 동 001 095\n", "3 175 2 B 3 남 서 179 270\n", "4 175 3 A 6 동 서 090 270" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_idinc_edge_idout_edge_id
01751A8179004-571542797_02571500487_01i0NaNNaN
11751B4003176-571500487_01571542797_02i0NaNNaN
21752A7001095-571500487_01571545870_01i0NaNNaN
31752B3179270-571542797_02571510153_01i0NaNNaN
41753A6090270571545870_02571510153_01i0NaNNaN
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 7 북 동 001 095 \n", "3 175 2 B 3 남 서 179 270 \n", "4 175 3 A 6 동 서 090 270 \n", "\n", " inc_edge out_edge node_id inc_edge_id out_edge_id \n", "0 -571542797_02 571500487_01 i0 NaN NaN \n", "1 -571500487_01 571542797_02 i0 NaN NaN \n", "2 -571500487_01 571545870_01 i0 NaN NaN \n", "3 -571542797_02 571510153_01 i0 NaN NaN \n", "4 571545870_02 571510153_01 i0 NaN NaN " ] }, "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", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n", "0 175 1 동 남 571545870_02 571542797_02 i0\n", "1 175 2 서 동 571510153_02 571545870_01 i0\n", "2 175 3 남 서 -571542797_02 571510153_01 i0\n", "3 175 4 북 남 -571500487_01 571542797_02 i0\n", "4 175 5 서 북 571510153_02 571500487_01 i0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(self.match1.head())\n", "display(self.match2.head())\n", "display(self.match3.head())\n", "display(self.match4.head())\n", "display(self.match6.head())\n", "display(self.matching.head())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "self.match7 = self.match6.copy()\n", "self.match7 = self.match7[['inter_no', 'move_no', 'inc_dir', 'out_dir', 'inc_edge', 'out_edge', 'node_id']]\n", "\n", "# parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n", "# child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n", "\n", "# (1) 가능한 (진입방향, 진출방향) 목록 \n", "flows = self.nema.dropna().apply(lambda row: (row['inc_dir'], row['out_dir']), axis=1).tolist()\n", "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n", "pdires = {}\n", "for node_id in self.parent_ids:\n", " dires = self.match7[self.match7.node_id == node_id][['inc_dir','out_dir']].values.flatten()\n", " dires = {dire for dire in dires if type(dire)==str}\n", " pdires[node_id] = dires\n", "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n", "inc2id = {}\n", "for node_id in self.parent_ids:\n", " for inc_dir in pdires[node_id]:\n", " df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dir==inc_dir)]\n", " inc2id[(node_id, inc_dir)] = df.inc_edge.iloc[0]\n", "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n", "out2id = {}\n", "for node_id in self.parent_ids:\n", " for out_dir in pdires[node_id]:\n", " df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dir==out_dir)]\n", " out2id[(node_id, out_dir)] = df.out_edge.iloc[0]\n", "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n", "pflow = {}\n", "for node_id in self.parent_ids:\n", " pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n", "# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n", "# node2inter = dict(zip(self.match7['node_id'], self.match7['inter_no']))\n", "dires_right = ['북', '서', '남', '동', '북'] # ex (북, 서), (서, 남) 등은 우회전 flow\n", "self.matching = []\n", "for node_id in self.parent_ids:\n", " inter_no = self.node2inter[node_id]\n", " print()\n", " # 좌회전과 직진(1 ~ 16)\n", " for (inc_dir, out_dir) in pflow[node_id]:\n", " move_no = self.nema[(self.nema.inc_dir==inc_dir) & (self.nema.out_dir==out_dir)].move_no.iloc[0]\n", " inc_edge = inc2id[(node_id, inc_dir)]\n", " out_edge = out2id[(node_id, out_dir)]\n", " print(node_id, inter_no, inc_dir, out_dir, move_no, inc_edge, out_edge)\n", " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n", " 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n", " 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n", " self.matching.append(new_row)\n", " display(new_row)\n", " # 보행신호(17), 전적색(18)\n", " new_row = pd.DataFrame({'inter_no':[inter_no]*2, 'move_no':[17, 18],\n", " 'inc_dir':[None]*2, 'out_dir':[None]*2,\n", " 'inc_edge':[None]*2, 'out_edge':[None]*2, 'node_id':[node_id]*2})\n", " display(new_row)\n", " self.matching.append(new_row)\n", " # 신호우회전(21)\n", " for d in range(len(dires_right)-1):\n", " inc_dir = dires_right[d]\n", " out_dir = dires_right[d+1]\n", " if {inc_dir, out_dir}.issubset(pdires[node_id]):\n", " inc_edge = inc2id[(node_id, inc_dir)]\n", " out_edge = out2id[(node_id, out_dir)]\n", " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n", " 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n", " 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n", " display(new_row)\n", " self.matching.append(new_row)\n", "self.matching.append(self.match7[self.match7.node_id.isin(self.child_ids)])\n", "self.matching = pd.concat(self.matching)\n", "self.matching = self.matching.dropna().sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n", "self.matching['move_no'] = self.matching['move_no'].astype(int)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'i0': {'남', '동', '북', '서'},\n", " 'i1': {'남', '북', '서'},\n", " 'i2': {'남', '동', '북', '서'},\n", " 'i3': {'남', '동', '북', '서'},\n", " 'i6': {'남', '동', '북', '서'},\n", " 'i7': {'남', '북'},\n", " 'i8': {'남', '동', '북', '서'},\n", " 'i9': {'동', '서'}}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(pdires)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{175: {'남': '179', '북': '001', '동': '090', '서': '270'},\n", " 176: {'남': '180', '북': '359', '서': '270'},\n", " 177: {'남': '179', '북': '000', '서': '268', '동': '090'},\n", " 178: {'남': '180', '북': '000', '서': '270', '동': '090'},\n", " 201: {'남': '180', '서': '270', '동': '090', '북': '000'},\n", " 202: {'동': '090', '서': '270'},\n", " 206: {'남': '180', '북': '000'},\n", " 210: {'동': '090', '서': '270', '북': '000', '남': '180'}}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{175: {'북': '000', '남': '180', '동': '090', '서': '270'},\n", " 176: {'북': '356', '남': '180', '서': '270'},\n", " 177: {'북': '000', '남': '180', '동': '090', '서': '270'},\n", " 178: {'북': '000', '남': '180', '동': '090', '서': '270'},\n", " 201: {'북': '000', '서': '270', '동': '090', '남': '180'},\n", " 202: {'서': '270', '동': '090'},\n", " 206: {'북': '000', '남': '180'},\n", " 210: {'서': '270', '북': '000', '동': '090', '남': '180'}}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inc_dir2angles = dict()\n", "out_dir2angles = dict()\n", "for inter_no in self.match4.inter_no.unique():\n", " df = self.match4[self.match4.inter_no==inter_no].dropna()\n", " inc_dir2angle = dict(zip(df['inc_dir'], df['inc_angle']))\n", " out_dir2angle = dict(zip(df['out_dir'], df['out_angle']))\n", " inc_dir2angles[inter_no] = inc_dir2angle\n", " out_dir2angles[inter_no] = out_dir2angle\n", "display(inc_dir2angles)\n", "display(out_dir2angles)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'남'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'북'" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(inc_dire, out_dire)" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nomove_noangle_code
01751090180
01752270090
01753179270
01754001180
01755270000
01756090270
01757001090
01758179000
01763180270
01764359180
01765270356
01768180356
01771090180
01772268090
01773179270
01774000180
01775268000
01776090270
01777000090
01778179000
01781090180
01782270090
01783180270
01784000180
01785270000
01786090270
01787000090
01788180000
02011090180
02012270090
02013180270
02014000180
02015270000
02016090270
02017000090
02018180000
02022270090
02026090270
02064000180
02068180000
02101090180
02102270090
02103180270
02104000180
02105270000
02106090270
02107000090
02108180000
\n", "
" ], "text/plain": [ " inter_no move_no angle_code\n", "0 175 1 090180\n", "0 175 2 270090\n", "0 175 3 179270\n", "0 175 4 001180\n", "0 175 5 270000\n", "0 175 6 090270\n", "0 175 7 001090\n", "0 175 8 179000\n", "0 176 3 180270\n", "0 176 4 359180\n", "0 176 5 270356\n", "0 176 8 180356\n", "0 177 1 090180\n", "0 177 2 268090\n", "0 177 3 179270\n", "0 177 4 000180\n", "0 177 5 268000\n", "0 177 6 090270\n", "0 177 7 000090\n", "0 177 8 179000\n", "0 178 1 090180\n", "0 178 2 270090\n", "0 178 3 180270\n", "0 178 4 000180\n", "0 178 5 270000\n", "0 178 6 090270\n", "0 178 7 000090\n", "0 178 8 180000\n", "0 201 1 090180\n", "0 201 2 270090\n", "0 201 3 180270\n", "0 201 4 000180\n", "0 201 5 270000\n", "0 201 6 090270\n", "0 201 7 000090\n", "0 201 8 180000\n", "0 202 2 270090\n", "0 202 6 090270\n", "0 206 4 000180\n", "0 206 8 180000\n", "0 210 1 090180\n", "0 210 2 270090\n", "0 210 3 180270\n", "0 210 4 000180\n", "0 210 5 270000\n", "0 210 6 090270\n", "0 210 7 000090\n", "0 210 8 180000" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "angles = []\n", "for inter_no in self.inter_nos:\n", " node_id = self.inter2node[inter_no]\n", " flows = pflow[node_id]\n", " inc_dir2angle = inc_dir2angles[inter_no]\n", " out_dir2angle = out_dir2angles[inter_no]\n", " for (inc_dire, out_dire) in flows:\n", " inc_angle = inc_dir2angle[inc_dire]\n", " out_angle = out_dir2angle[out_dire]\n", " angle_code = inc_angle + out_angle\n", " nema_row = self.nema[(self.nema.inc_dir==inc_dire)&(self.nema.out_dir==out_dire)]\n", " move_no = nema_row.iloc[0].move_no\n", " angle = pd.DataFrame({'inter_no':[inter_no],'move_no':[move_no], 'angle_code':[angle_code]})\n", " angles.append(angle)\n", "angles = pd.concat(angles)\n", "angles" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'i0': [('동', '남'),\n", " ('서', '동'),\n", " ('남', '서'),\n", " ('북', '남'),\n", " ('서', '북'),\n", " ('동', '서'),\n", " ('북', '동'),\n", " ('남', '북')],\n", " 'i1': [('남', '서'), ('북', '남'), ('서', '북'), ('남', '북')],\n", " 'i2': [('동', '남'),\n", " ('서', '동'),\n", " ('남', '서'),\n", " ('북', '남'),\n", " ('서', '북'),\n", " ('동', '서'),\n", " ('북', '동'),\n", " ('남', '북')],\n", " 'i3': [('동', '남'),\n", " ('서', '동'),\n", " ('남', '서'),\n", " ('북', '남'),\n", " ('서', '북'),\n", " ('동', '서'),\n", " ('북', '동'),\n", " ('남', '북')],\n", " 'i6': [('동', '남'),\n", " ('서', '동'),\n", " ('남', '서'),\n", " ('북', '남'),\n", " ('서', '북'),\n", " ('동', '서'),\n", " ('북', '동'),\n", " ('남', '북')],\n", " 'i7': [('북', '남'), ('남', '북')],\n", " 'i8': [('동', '남'),\n", " ('서', '동'),\n", " ('남', '서'),\n", " ('북', '남'),\n", " ('서', '북'),\n", " ('동', '서'),\n", " ('북', '동'),\n", " ('남', '북')],\n", " 'i9': [('서', '동'), ('동', '서')]}" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pflow" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_idinc_edge_idout_edge_id
01751A8179004-571542797_02571500487_01i0NaNNaN
11751B4003176-571500487_01571542797_02i0NaNNaN
21752A7001095-571500487_01571545870_01i0NaNNaN
31752B3179270-571542797_02571510153_01i0NaNNaN
41753A6090270571545870_02571510153_01i0NaNNaN
..........................................
32102B2270090NaNNaNu60NaNNaN
42103A7359090NaNNaNu60NaNNaN
52103B4000180NaNNaNu60NaNNaN
62104A8180000NaNNaNu60NaNNaN
72104B3180270NaNNaNu60NaNNaN
\n", "

116 rows × 13 columns

\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 7 북 동 001 095 \n", "3 175 2 B 3 남 서 179 270 \n", "4 175 3 A 6 동 서 090 270 \n", ".. ... ... ... ... ... ... ... ... \n", "3 210 2 B 2 서 동 270 090 \n", "4 210 3 A 7 북 동 359 090 \n", "5 210 3 B 4 북 남 000 180 \n", "6 210 4 A 8 남 북 180 000 \n", "7 210 4 B 3 남 서 180 270 \n", "\n", " inc_edge out_edge node_id inc_edge_id out_edge_id \n", "0 -571542797_02 571500487_01 i0 NaN NaN \n", "1 -571500487_01 571542797_02 i0 NaN NaN \n", "2 -571500487_01 571545870_01 i0 NaN NaN \n", "3 -571542797_02 571510153_01 i0 NaN NaN \n", "4 571545870_02 571510153_01 i0 NaN NaN \n", ".. ... ... ... ... ... \n", "3 NaN NaN u60 NaN NaN \n", "4 NaN NaN u60 NaN NaN \n", "5 NaN NaN u60 NaN NaN \n", "6 NaN NaN u60 NaN NaN \n", "7 NaN NaN u60 NaN NaN \n", "\n", "[116 rows x 13 columns]" ] }, "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", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
........................
7121021571511538_02.121571500535_01i6
7221021571500535_02.18571500585_01i6
7321021571500585_02571542115_01i6
7421021-571542115_01571511538_01i6
752105571500535_02-571500535_02u60
\n", "

76 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n", "0 175 1 동 남 571545870_02 571542797_02 i0\n", "1 175 2 서 동 571510153_02 571545870_01 i0\n", "2 175 3 남 서 -571542797_02 571510153_01 i0\n", "3 175 4 북 남 -571500487_01 571542797_02 i0\n", "4 175 5 서 북 571510153_02 571500487_01 i0\n", ".. ... ... ... ... ... ... ...\n", "71 210 21 북 서 571511538_02.121 571500535_01 i6\n", "72 210 21 서 남 571500535_02.18 571500585_01 i6\n", "73 210 21 남 동 571500585_02 571542115_01 i6\n", "74 210 21 동 북 -571542115_01 571511538_01 i6\n", "75 210 5 서 북 571500535_02 -571500535_02 u60\n", "\n", "[76 rows x 7 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(self.match6)\n", "display(self.matching)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\n", "5. 신호를 생성합니다.\n", "6. 이슈사항을 저장합니다.\n", "(1) 0:00:00.141398\n", "(1-1) 0:00:00.025139\n", "(1-2) 0:00:00.061132\n", "(1-3) 0:00:00\n", "(1-4) 0:00:00\n", "(1-5) 0:00:00.055127\n", "(2) 0:00:00.294164\n", "(2-1) 0:00:00.064693\n", "(2-2) 0:00:00.196721\n", "(2-3) 0:00:00.032750\n", "(3) 0:00:00.461845\n", "(3-1) 0:00:00.437385\n", "(3-2) 0:00:00.024460\n", "(4) 0:00:00.188478\n", "(4-1) 0:00:00.006985\n", "(4-2) 0:00:00.015015\n", "(4-2) 0:00:00.166478\n", "(5) 0:00:00.787933\n", "(5-1) 0:00:00.016678\n", "(5-2) 0:00:00.770144\n", "(5-3) 0:00:00.001111\n", "(6) 0:00:00\n", "total time : 0:00:01.873818\n" ] } ], "source": [ "sg = SignalGenerator()\n", "sg.main()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nostart_unixphas_Aphas_Bmove_Amove_Bduration
02011704418940118333
12011704418940225236
22011704418940336225
32011704418940446158
42011704418940557418
........................
2531771704419870445140
2541771704420050118443
2551771704420050227327
256177170442005033171870
2571771704420050445140
\n", "

258 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B move_A move_B duration\n", "0 201 1704418940 1 1 8 3 33\n", "1 201 1704418940 2 2 5 2 36\n", "2 201 1704418940 3 3 6 2 25\n", "3 201 1704418940 4 4 6 1 58\n", "4 201 1704418940 5 5 7 4 18\n", ".. ... ... ... ... ... ... ...\n", "253 177 1704419870 4 4 5 1 40\n", "254 177 1704420050 1 1 8 4 43\n", "255 177 1704420050 2 2 7 3 27\n", "256 177 1704420050 3 3 17 18 70\n", "257 177 1704420050 4 4 5 1 40\n", "\n", "[258 rows x 7 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sg.movedur" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "60\n", "116\n" ] } ], "source": [ "print(len(self.match5))\n", "print(len(self.match6))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['북', '북동', '동', '남동', '남', '남서', '서', '북서']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.directions" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'북': array([6.123234e-17, 1.000000e+00]),\n", " '북동': array([0.70710678, 0.70710678]),\n", " '동': array([1., 0.]),\n", " '남동': array([ 0.70710678, -0.70710678]),\n", " '남': array([ 6.123234e-17, -1.000000e+00]),\n", " '남서': array([-0.70710678, -0.70710678]),\n", " '서': array([-1.0000000e+00, -1.2246468e-16]),\n", " '북서': array([-0.70710678, 0.70710678])}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "# dictionary that maps dire(북) to dir(np.array([0,1]))\n", "self.dire2dir = dict()\n", "theta = np.pi/2\n", "for dire in self.directions:\n", " self.dire2dir[dire] = np.array([np.cos(theta), np.sin(theta)])\n", " theta -= np.pi/4\n", "self.dire2dir" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(10315.19, 11460.86),\n", " (10314.85, 11439.86),\n", " (10314.54, 11439.86),\n", " (10314.9, 11460.86)]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "node_id = 'i5'\n", "node = self.net.getNode(node_id)\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", "inc_edge = inc_edges[0]\n", "loc_inc_edge = inc_edge.getShape()[-1]\n", "node.getShape()" ] }, { "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": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-2. 비보호우회전(g)을 배정했습니다.\n" ] } ], "source": [ "self.initialize_state()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c30\n", "571542116_01\n", "571542116_02.96\n", "i0\n", "-571500487_01\n", "-571542797_02\n", "571510153_02\n", "571545870_02\n", "i1\n", "-571542810_01\n", "571542797_02.99\n", "571543469_02\n", "i2\n", "-571542809_01\n", "571542107_02\n", "571542811_02\n", "i3\n", "-571500475_01\n", "571540303_02.21\n", "571540304_02\n", "571556450_02\n", "i6\n", "-571542115_01\n", "571500535_02.18\n", "571500585_02\n", "571511538_02.121\n", "i7\n", "-571511538_02\n", "571542071_02\n", "571542073_01\n", "i8\n", "-571500569_01\n", "571500583_01\n", "571500617_02\n", "571500618_02\n", "i9\n", "571510152_01\n", "571510152_02\n", "u00\n", "571500487_01\n", "571500487_02\n", "u20\n", "571542810_01.51\n", "571542811_01\n", "u30\n", "571556450_01\n", "571556452_01\n", "u31\n", "571500475_01\n", "571500475_02\n", "u32\n", "571540303_01\n", "571540303_02\n", "u60\n", "571500535_01\n", "571500535_02\n" ] } ], "source": [ "for node_id in self.node_ids:\n", " print(node_id)\n", " node = self.net.getNode(node_id)\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", " inc_edge_ids = [edge.getID() for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edge ids\n", " out_edge_ids = [edge.getID() for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edge ids\n", " # print(node)\n", " for inc_edge_id in inc_edge_ids:\n", " print(inc_edge_id)" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
........................
7121021571511538_02.121571500535_01i6
7221021571500535_02.18571500585_01i6
7321021571500585_02571542115_01i6
7421021-571542115_01571511538_01i6
752105571500535_02-571500535_02u60
\n", "

76 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n", "0 175 1 동 남 571545870_02 571542797_02 i0\n", "1 175 2 서 동 571510153_02 571545870_01 i0\n", "2 175 3 남 서 -571542797_02 571510153_01 i0\n", "3 175 4 북 남 -571500487_01 571542797_02 i0\n", "4 175 5 서 북 571510153_02 571500487_01 i0\n", ".. ... ... ... ... ... ... ...\n", "71 210 21 북 서 571511538_02.121 571500535_01 i6\n", "72 210 21 서 남 571500535_02.18 571500585_01 i6\n", "73 210 21 남 동 571500585_02 571542115_01 i6\n", "74 210 21 동 북 -571542115_01 571511538_01 i6\n", "75 210 5 서 북 571500535_02 -571500535_02 u60\n", "\n", "[76 rows x 7 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.matching" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['북', '북동', '동', '남동', '남', '남서', '서', '북서']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.directions" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'-571542797_02'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(self.node_id2inc_edge2dir['i0'])[1]" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'-571500487_01': array([-0.00936558, -0.99995614]),\n", " '-571542797_02': array([0.00318883, 0.99999492]),\n", " '571510153_02': array([0.99927006, 0.03820147]),\n", " '571545870_02': array([-0.99951221, 0.03123044])}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.node_id2inc_edge2dir['i0']" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'북': array([6.123234e-17, 1.000000e+00]),\n", " '북동': array([0.70710678, 0.70710678]),\n", " '동': array([1., 0.]),\n", " '남동': array([ 0.70710678, -0.70710678]),\n", " '남': array([ 6.123234e-17, -1.000000e+00]),\n", " '남서': array([-0.70710678, -0.70710678]),\n", " '서': array([-1.0000000e+00, -1.2246468e-16]),\n", " '북서': array([-0.70710678, 0.70710678])}" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.dire2dir" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'-571500487_01': array([-0.00936558, -0.99995614]),\n", " '-571542797_02': array([0.00318883, 0.99999492]),\n", " '571510153_02': array([0.99927006, 0.03820147]),\n", " '571545870_02': array([-0.99951221, 0.03123044])}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.node_id2inc_edge2dir['i0']" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.00936558 -0.99995614]\n", "-0.999956141961442\n", "\n", "[0.70710678 0.70710678]\n", "[-0.00936558 -0.99995614]\n", "-0.7136982364459966\n", "\n", "[1. 0.]\n", "[-0.00936558 -0.99995614]\n", "-0.00936558346224636\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.00936558 -0.99995614]\n", "0.7004533012941507\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.00936558 -0.99995614]\n", "0.999956141961442\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.00936558 -0.99995614]\n", "0.7136982364459966\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.00936558 -0.99995614]\n", "0.009365583462246483\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.00936558 -0.99995614]\n", "-0.7004533012941506\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.00318883 0.99999492]\n", "0.9999949156539597\n", "\n", "[0.70710678 0.70710678]\n", "[0.00318883 0.99999492]\n", "0.7093580325944496\n", "\n", "[1. 0.]\n", "[0.00318883 0.99999492]\n", "0.0031888346194069504\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.00318883 0.99999492]\n", "-0.7048483394275195\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.00318883 0.99999492]\n", "-0.9999949156539597\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.00318883 0.99999492]\n", "-0.7093580325944496\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.00318883 0.99999492]\n", "-0.0031888346194070727\n", "\n", "[-0.70710678 0.70710678]\n", "[0.00318883 0.99999492]\n", "0.7048483394275193\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[0.99927006 0.03820147]\n", "0.03820147100728745\n", "\n", "[0.70710678 0.70710678]\n", "[0.99927006 0.03820147]\n", "0.7336031530235902\n", "\n", "[1. 0.]\n", "[0.99927006 0.03820147]\n", "0.9992700573983387\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.99927006 0.03820147]\n", "0.6795781146224817\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.99927006 0.03820147]\n", "-0.038201471007287324\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.99927006 0.03820147]\n", "-0.7336031530235901\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.99927006 0.03820147]\n", "-0.9992700573983387\n", "\n", "[-0.70710678 0.70710678]\n", "[0.99927006 0.03820147]\n", "-0.6795781146224819\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99951221 0.03123044]\n", "0.031230438222358273\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99951221 0.03123044]\n", "-0.6846786075562368\n", "\n", "[1. 0.]\n", "[-0.99951221 0.03123044]\n", "-0.9995122108951142\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99951221 0.03123044]\n", "-0.728845116849151\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99951221 0.03123044]\n", "-0.0312304382223584\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99951221 0.03123044]\n", "0.6846786075562367\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99951221 0.03123044]\n", "0.9995122108951142\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99951221 0.03123044]\n", "0.7288451168491511\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.01954731 0.99980893]\n", "0.9998089329965109\n", "\n", "[0.70710678 0.70710678]\n", "[0.01954731 0.99980893]\n", "0.7207937149812274\n", "\n", "[1. 0.]\n", "[0.01954731 0.99980893]\n", "0.019547314403227895\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.01954731 0.99980893]\n", "-0.6931496378442115\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.01954731 0.99980893]\n", "-0.9998089329965109\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.01954731 0.99980893]\n", "-0.7207937149812274\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.01954731 0.99980893]\n", "-0.019547314403228017\n", "\n", "[-0.70710678 0.70710678]\n", "[0.01954731 0.99980893]\n", "0.6931496378442114\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.00324512 -0.99999473]\n", "-0.9999947345997597\n", "\n", "[0.70710678 0.70710678]\n", "[-0.00324512 -0.99999473]\n", "-0.7093977009603124\n", "\n", "[1. 0.]\n", "[-0.00324512 -0.99999473]\n", "-0.0032451152146071934\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.00324512 -0.99999473]\n", "0.7048084150123516\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.00324512 -0.99999473]\n", "0.9999947345997597\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.00324512 -0.99999473]\n", "0.7093977009603124\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.00324512 -0.99999473]\n", "0.0032451152146073157\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.00324512 -0.99999473]\n", "-0.7048084150123515\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[ 0.99974606 -0.02253478]\n", "-0.02253477852193767\n", "\n", "[0.70710678 0.70710678]\n", "[ 0.99974606 -0.02253478]\n", "0.690992723527485\n", "\n", "[1. 0.]\n", "[ 0.99974606 -0.02253478]\n", "0.9997460596356292\n", "\n", "[ 0.70710678 -0.70710678]\n", "[ 0.99974606 -0.02253478]\n", "0.7228617129382832\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[ 0.99974606 -0.02253478]\n", "0.022534778521937793\n", "\n", "[-0.70710678 -0.70710678]\n", "[ 0.99974606 -0.02253478]\n", "-0.6909927235274849\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[ 0.99974606 -0.02253478]\n", "-0.9997460596356292\n", "\n", "[-0.70710678 0.70710678]\n", "[ 0.99974606 -0.02253478]\n", "-0.7228617129382833\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.0188774 0.99982181]\n", "0.9998218060534435\n", "\n", "[0.70710678 0.70710678]\n", "[0.0188774 0.99982181]\n", "0.7203291148904717\n", "\n", "[1. 0.]\n", "[0.0188774 0.99982181]\n", "0.018877397596868892\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.0188774 0.99982181]\n", "-0.6936324431866705\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.0188774 0.99982181]\n", "-0.9998218060534435\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.0188774 0.99982181]\n", "-0.7203291148904717\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.0188774 0.99982181]\n", "-0.018877397596869013\n", "\n", "[-0.70710678 0.70710678]\n", "[0.0188774 0.99982181]\n", "0.6936324431866704\n", "\n", "5\n", "남서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.71131147 -0.70287694]\n", "-0.7028769433114078\n", "\n", "[0.70710678 0.70710678]\n", "[-0.71131147 -0.70287694]\n", "-0.9999822145459303\n", "\n", "[1. 0.]\n", "[-0.71131147 -0.70287694]\n", "-0.7113114666313288\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.71131147 -0.70287694]\n", "-0.0059641086355921675\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.71131147 -0.70287694]\n", "0.7028769433114078\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.71131147 -0.70287694]\n", "0.9999822145459303\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.71131147 -0.70287694]\n", "0.7113114666313289\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.71131147 -0.70287694]\n", "0.005964108635592357\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.00514794 -0.99998675]\n", "-0.9999867492848744\n", "\n", "[0.70710678 0.70710678]\n", "[-0.00514794 -0.99998675]\n", "-0.7107375526307316\n", "\n", "[1. 0.]\n", "[-0.00514794 -0.99998675]\n", "-0.005147936933367546\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.00514794 -0.99998675]\n", "0.7034572704013218\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.00514794 -0.99998675]\n", "0.9999867492848744\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.00514794 -0.99998675]\n", "0.7107375526307316\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.00514794 -0.99998675]\n", "0.005147936933367668\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.00514794 -0.99998675]\n", "-0.7034572704013217\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99937585 0.03532571]\n", "0.035325714272748256\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99937585 0.03532571]\n", "-0.6816863899147254\n", "\n", "[1. 0.]\n", "[-0.99937585 0.03532571]\n", "-0.9993758521753067\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99937585 0.03532571]\n", "-0.7316444941397628\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99937585 0.03532571]\n", "-0.03532571427274838\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99937585 0.03532571]\n", "0.6816863899147253\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99937585 0.03532571]\n", "0.9993758521753067\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99937585 0.03532571]\n", "0.731644494139763\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[ 0.99959605 -0.02842068]\n", "-0.028420683815972996\n", "\n", "[0.70710678 0.70710678]\n", "[ 0.99959605 -0.02842068]\n", "0.6867246877003452\n", "\n", "[1. 0.]\n", "[ 0.99959605 -0.02842068]\n", "0.9995960507782293\n", "\n", "[ 0.70710678 -0.70710678]\n", "[ 0.99959605 -0.02842068]\n", "0.7269176042048118\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[ 0.99959605 -0.02842068]\n", "0.02842068381597312\n", "\n", "[-0.70710678 -0.70710678]\n", "[ 0.99959605 -0.02842068]\n", "-0.6867246877003451\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[ 0.99959605 -0.02842068]\n", "-0.9995960507782293\n", "\n", "[-0.70710678 0.70710678]\n", "[ 0.99959605 -0.02842068]\n", "-0.7269176042048119\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.00401066 0.99999196]\n", "0.9999919572590873\n", "\n", "[0.70710678 0.70710678]\n", "[0.00401066 0.99999196]\n", "0.7099370610648998\n", "\n", "[1. 0.]\n", "[0.00401066 0.99999196]\n", "0.004010662930190224\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.00401066 0.99999196]\n", "-0.7042651271549178\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.00401066 0.99999196]\n", "-0.9999919572590873\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.00401066 0.99999196]\n", "-0.7099370610648998\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.00401066 0.99999196]\n", "-0.0040106629301903465\n", "\n", "[-0.70710678 0.70710678]\n", "[0.00401066 0.99999196]\n", "0.7042651271549177\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.02221674 -0.99975318]\n", "-0.99975317783161\n", "\n", "[0.70710678 0.70710678]\n", "[-0.02221674 -0.99975318]\n", "-0.7226418571477022\n", "\n", "[1. 0.]\n", "[-0.02221674 -0.99975318]\n", "-0.022216737285151163\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.02221674 -0.99975318]\n", "0.6912226459673614\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.02221674 -0.99975318]\n", "0.99975317783161\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.02221674 -0.99975318]\n", "0.7226418571477022\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.02221674 -0.99975318]\n", "0.022216737285151285\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.02221674 -0.99975318]\n", "-0.6912226459673613\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99990726 0.01361849]\n", "0.013618485596221176\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99990726 0.01361849]\n", "-0.69741148350594\n", "\n", "[1. 0.]\n", "[-0.99990726 0.01361849]\n", "-0.9999072641250615\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99990726 0.01361849]\n", "-0.7166709305350987\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99990726 0.01361849]\n", "-0.013618485596221298\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99990726 0.01361849]\n", "0.6974114835059398\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99990726 0.01361849]\n", "0.9999072641250615\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99990726 0.01361849]\n", "0.7166709305350988\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[ 0.99979737 -0.02013015]\n", "-0.020130148349706223\n", "\n", "[0.70710678 0.70710678]\n", "[ 0.99979737 -0.02013015]\n", "0.692729334344831\n", "\n", "[1. 0.]\n", "[ 0.99979737 -0.02013015]\n", "0.9997973680338526\n", "\n", "[ 0.70710678 -0.70710678]\n", "[ 0.99979737 -0.02013015]\n", "0.721197663153568\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[ 0.99979737 -0.02013015]\n", "0.020130148349706348\n", "\n", "[-0.70710678 -0.70710678]\n", "[ 0.99979737 -0.02013015]\n", "-0.6927293343448309\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[ 0.99979737 -0.02013015]\n", "-0.9997973680338526\n", "\n", "[-0.70710678 0.70710678]\n", "[ 0.99979737 -0.02013015]\n", "-0.7211976631535681\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.02097793 0.99977994]\n", "0.9997799391161097\n", "\n", "[0.70710678 0.70710678]\n", "[0.02097793 0.99977994]\n", "0.7217848077280572\n", "\n", "[1. 0.]\n", "[0.02097793 0.99977994]\n", "0.02097792508776536\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.02097793 0.99977994]\n", "-0.6921175415584926\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.02097793 0.99977994]\n", "-0.9997799391161097\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.02097793 0.99977994]\n", "-0.7217848077280572\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.02097793 0.99977994]\n", "-0.02097792508776548\n", "\n", "[-0.70710678 0.70710678]\n", "[0.02097793 0.99977994]\n", "0.6921175415584925\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.0178916 -0.99983993]\n", "-0.9998399325579537\n", "\n", "[0.70710678 0.70710678]\n", "[-0.0178916 -0.99983993]\n", "-0.7196448663590954\n", "\n", "[1. 0.]\n", "[-0.0178916 -0.99983993]\n", "-0.017891597539252523\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.0178916 -0.99983993]\n", "0.6943423264665635\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.0178916 -0.99983993]\n", "0.9998399325579537\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.0178916 -0.99983993]\n", "0.7196448663590954\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.0178916 -0.99983993]\n", "0.017891597539252645\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.0178916 -0.99983993]\n", "-0.6943423264665634\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.03173005 0.99949648]\n", "0.9994964752953672\n", "\n", "[0.70710678 0.70710678]\n", "[0.03173005 0.99949648]\n", "0.7291872667376466\n", "\n", "[1. 0.]\n", "[0.03173005 0.99949648]\n", "0.031730046834780104\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.03173005 0.99949648]\n", "-0.684314204169167\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.03173005 0.99949648]\n", "-0.9994964752953672\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.03173005 0.99949648]\n", "-0.7291872667376466\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.03173005 0.99949648]\n", "-0.03173004683478023\n", "\n", "[-0.70710678 0.70710678]\n", "[0.03173005 0.99949648]\n", "0.6843142041691669\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99996279 0.00862609]\n", "0.00862608913718171\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99996279 0.00862609]\n", "-0.7009809068725814\n", "\n", "[1. 0.]\n", "[-0.99996279 0.00862609]\n", "-0.9999627946009778\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99996279 0.00862609]\n", "-0.7131800391206231\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99996279 0.00862609]\n", "-0.008626089137181832\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99996279 0.00862609]\n", "0.7009809068725813\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99996279 0.00862609]\n", "0.9999627946009778\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99996279 0.00862609]\n", "0.7131800391206232\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.01269051 -0.99991947]\n", "-0.9999194722128006\n", "\n", "[0.70710678 0.70710678]\n", "[-0.01269051 -0.99991947]\n", "-0.7160233863906494\n", "\n", "[1. 0.]\n", "[-0.01269051 -0.99991947]\n", "-0.012690511797166758\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.01269051 -0.99991947]\n", "0.6980762924936404\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.01269051 -0.99991947]\n", "0.9999194722128006\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.01269051 -0.99991947]\n", "0.7160233863906494\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.01269051 -0.99991947]\n", "0.012690511797166881\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.01269051 -0.99991947]\n", "-0.6980762924936403\n", "\n", "0\n", "북\n", "[6.123234e-17 1.000000e+00]\n", "[0.01501082 0.99988733]\n", "0.9998873313095755\n", "\n", "[0.70710678 0.70710678]\n", "[0.01501082 0.99988733]\n", "0.7176413642873244\n", "\n", "[1. 0.]\n", "[0.01501082 0.99988733]\n", "0.015010818985489397\n", "\n", "[ 0.70710678 -0.70710678]\n", "[0.01501082 0.99988733]\n", "-0.6964128604957177\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[0.01501082 0.99988733]\n", "-0.9998873313095755\n", "\n", "[-0.70710678 -0.70710678]\n", "[0.01501082 0.99988733]\n", "-0.7176413642873244\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[0.01501082 0.99988733]\n", "-0.01501081898548952\n", "\n", "[-0.70710678 0.70710678]\n", "[0.01501082 0.99988733]\n", "0.6964128604957176\n", "\n", "4\n", "남\n", "[6.123234e-17 1.000000e+00]\n", "[-0.01245578 -0.99992242]\n", "-0.9999224237500915\n", "\n", "[0.70710678 0.70710678]\n", "[-0.01245578 -0.99992242]\n", "-0.7158594937446279\n", "\n", "[1. 0.]\n", "[-0.01245578 -0.99992242]\n", "-0.012455781057098932\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.01245578 -0.99992242]\n", "0.6982443592437287\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.01245578 -0.99992242]\n", "0.9999224237500915\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.01245578 -0.99992242]\n", "0.7158594937446279\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.01245578 -0.99992242]\n", "0.012455781057099055\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.01245578 -0.99992242]\n", "-0.6982443592437285\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99986689 0.01631585]\n", "0.016315849579498894\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99986689 0.01631585]\n", "-0.695475608674601\n", "\n", "[1. 0.]\n", "[-0.99986689 0.01631585]\n", "-0.9998668876668031\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99986689 0.01631585]\n", "-0.7185497044315678\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99986689 0.01631585]\n", "-0.01631584957949902\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99986689 0.01631585]\n", "0.6954756086746009\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99986689 0.01631585]\n", "0.9998668876668031\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99986689 0.01631585]\n", "0.718549704431568\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[ 0.99992218 -0.01247524]\n", "-0.012475239731228712\n", "\n", "[0.70710678 0.70710678]\n", "[ 0.99992218 -0.01247524]\n", "0.6982304283525206\n", "\n", "[1. 0.]\n", "[ 0.99992218 -0.01247524]\n", "0.999922181168939\n", "\n", "[ 0.70710678 -0.70710678]\n", "[ 0.99992218 -0.01247524]\n", "0.7158730815742801\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[ 0.99992218 -0.01247524]\n", "0.012475239731228834\n", "\n", "[-0.70710678 -0.70710678]\n", "[ 0.99992218 -0.01247524]\n", "-0.6982304283525205\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[ 0.99992218 -0.01247524]\n", "-0.999922181168939\n", "\n", "[-0.70710678 0.70710678]\n", "[ 0.99992218 -0.01247524]\n", "-0.7158730815742802\n", "\n", "2\n", "동\n", "[6.123234e-17 1.000000e+00]\n", "[ 0.99986806 -0.01624397]\n", "-0.016243967759571678\n", "\n", "[0.70710678 0.70710678]\n", "[ 0.99986806 -0.01624397]\n", "0.6955272643837823\n", "\n", "[1. 0.]\n", "[ 0.99986806 -0.01624397]\n", "0.999868058051374\n", "\n", "[ 0.70710678 -0.70710678]\n", "[ 0.99986806 -0.01624397]\n", "0.71849970389612\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[ 0.99986806 -0.01624397]\n", "0.016243967759571803\n", "\n", "[-0.70710678 -0.70710678]\n", "[ 0.99986806 -0.01624397]\n", "-0.6955272643837822\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[ 0.99986806 -0.01624397]\n", "-0.999868058051374\n", "\n", "[-0.70710678 0.70710678]\n", "[ 0.99986806 -0.01624397]\n", "-0.7184997038961201\n", "\n", "6\n", "서\n", "[6.123234e-17 1.000000e+00]\n", "[-0.99986809 0.01624217]\n", "0.016242171657398802\n", "\n", "[0.70710678 0.70710678]\n", "[-0.99986809 0.01624217]\n", "-0.6955285550518142\n", "\n", "[1. 0.]\n", "[-0.99986809 0.01624217]\n", "-0.9998680872294363\n", "\n", "[ 0.70710678 -0.70710678]\n", "[-0.99986809 0.01624217]\n", "-0.7184984544920996\n", "\n", "[ 6.123234e-17 -1.000000e+00]\n", "[-0.99986809 0.01624217]\n", "-0.016242171657398927\n", "\n", "[-0.70710678 -0.70710678]\n", "[-0.99986809 0.01624217]\n", "0.6955285550518141\n", "\n", "[-1.0000000e+00 -1.2246468e-16]\n", "[-0.99986809 0.01624217]\n", "0.9998680872294363\n", "\n", "[-0.70710678 0.70710678]\n", "[-0.99986809 0.01624217]\n", "0.7184984544920997\n", "\n" ] }, { "data": { "text/plain": [ "{'-571500487_01': '남',\n", " '-571542797_02': '북',\n", " '571510153_02': '동',\n", " '571545870_02': '서'}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "# dictionary that maps dire(북) to dir(np.array([0,1]))\n", "self.dire2dir = dict()\n", "theta = np.pi/2\n", "for dire in self.directions:\n", " self.dire2dir[dire] = np.array([np.cos(theta), np.sin(theta)])\n", " theta -= np.pi/4\n", "\n", "# dictionary that maps node_id and inc_edge_id to direction(북)\n", "self.node_id2inc_edge2dire = dict()\n", "for node_id in self.parent_ids:\n", " inc_edge2dire = dict()\n", " node = self.net.getNode(node_id)\n", " inc_edges = [inc_edge.getID() for inc_edge in node.getIncoming()]\n", " out_edges = [out_edge.getID() for out_edge in node.getOutgoing()]\n", "\n", " for inc_edge in inc_edges:\n", " inc_dir_true = self.node_id2inc_edge2dir[node_id][inc_edge]\n", " inc_dirs = [self.dire2dir[inc_dire] for inc_dire in self.directions]\n", " inc_index = np.array([np.dot(inc_dir, inc_dir_true) for inc_dir in inc_dirs]).argmax()\n", " print(inc_index)\n", " print(self.directions[inc_index])\n", " for inc_dir in inc_dirs:\n", " print(inc_dir)\n", " print(inc_dir_true)\n", " print(np.dot(inc_dir, inc_dir_true))\n", " print()\n", " inc_edge2dire[inc_edge] = self.directions[inc_index]\n", " self.node_id2inc_edge2dire[node_id] = inc_edge2dire\n", "self.node_id2inc_edge2dire['i0']" ] }, { "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": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-2. 비보호우회전(g)을 배정했습니다.\n" ] } ], "source": [ "match6 = self.match6.copy()\n", "matching = self.matching.copy()\n", "self.initialize_state()" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [], "source": [ "self.match6 = match6\n", "self.matching=matching" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-2. 비보호우회전(g)을 배정했습니다.\n" ] } ], "source": [ "self.initialize_state()" ] }, { "cell_type": "code", "execution_count": 101, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
01751A8179004-571542797_02571500487_01i0
11751B4003176-571500487_01571542797_02i0
21752A7001095-571500487_01571545870_01i0
31752B3179270-571542797_02571510153_01i0
41753A6090270571545870_02571510153_01i0
....................................
32102B2270090NaNNaNu60
42103A7359090NaNNaNu60
52103B4000180NaNNaNu60
62104A8180000NaNNaNu60
72104B3180270NaNNaNu60
\n", "

116 rows × 11 columns

\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 7 북 동 001 095 \n", "3 175 2 B 3 남 서 179 270 \n", "4 175 3 A 6 동 서 090 270 \n", ".. ... ... ... ... ... ... ... ... \n", "3 210 2 B 2 서 동 270 090 \n", "4 210 3 A 7 북 동 359 090 \n", "5 210 3 B 4 북 남 000 180 \n", "6 210 4 A 8 남 북 180 000 \n", "7 210 4 B 3 남 서 180 270 \n", "\n", " inc_edge out_edge node_id \n", "0 -571542797_02 571500487_01 i0 \n", "1 -571500487_01 571542797_02 i0 \n", "2 -571500487_01 571545870_01 i0 \n", "3 -571542797_02 571510153_01 i0 \n", "4 571545870_02 571510153_01 i0 \n", ".. ... ... ... \n", "3 NaN NaN u60 \n", "4 NaN NaN u60 \n", "5 NaN NaN u60 \n", "6 NaN NaN u60 \n", "7 NaN NaN u60 \n", "\n", "[116 rows x 11 columns]" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.match6" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "# node = self.net.getNode(node_id)\n", "# conns = list(node.getConnections())\n", "# print(node_id)\n", "# for con in node.getConnections():\n", "# print(con)\n", "# print()\n", "# for con in conns:\n", "# print(con)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i0\n", "['g', 'r', 'r', 'r', 'g', 'r', 'r', 'r', 'g', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r']\n", "571545870_02\n", "571542797_02\n", "\n", "['g', 'r', 'r', 'r', 'g', 'r', 'r', 'G', 'g', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r']\n", "[, , , , , , , , , , , , , , , , ]\n" ] } ], "source": [ "all_conns = list(node.getConnections())\n", "allocated_conns = []\n", "# display(matching)\n", "row = self.matching.iloc[0]\n", "node_id = row.node_id\n", "move_no = row.move_no\n", "inc_edge = row.inc_edge\n", "out_edge = row.out_edge\n", "state = copy.deepcopy(self.node2init)[node_id]\n", "\n", "node = self.net.getNode(node_id)\n", "\n", "print(node_id)\n", "print(state)\n", "print(inc_edge)\n", "print(out_edge)\n", "inc_edge = self.net.getEdge(inc_edge)\n", "out_edge = self.net.getEdge(out_edge)\n", "# incoming edge, outgoing edge가 지정된 이동류에 대하여\n", "for conn in inc_edge.getConnections(out_edge):\n", " allocated_conns.append(conns)\n", " print(conn)\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " # 신호를 G로 지정\n", " state[index] = 'G'\n", "print(state)\n", "for conn in allocated_conns:\n", " print(conn)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "node_id = self.node_ids[0]\n", "node = self.net.getNode(node_id)\n", "node" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [], "source": [ "node2conns = dict()\n", "node2allocated_conns = dict()\n", "for node_id in self.node_ids:\n", " node = self.net.getNode(node_id)\n", " node2conns[node_id] = list(node.getConnections())\n", " node2allocated_conns[node_id] = []" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [], "source": [ "self.match6 = match6\n", "self.matching=matching" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "'i0'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[122], line 17\u001b[0m\n\u001b[0;32m 15\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnet\u001b[38;5;241m.\u001b[39mgetEdge(out_edge)\n\u001b[0;32m 16\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m conn \u001b[38;5;129;01min\u001b[39;00m inc_edge\u001b[38;5;241m.\u001b[39mgetConnections(out_edge):\n\u001b[1;32m---> 17\u001b[0m \u001b[43mnode2allocated_conns\u001b[49m\u001b[43m[\u001b[49m\u001b[43mnode_id\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241m.\u001b[39mappend(conn)\n\u001b[0;32m 18\u001b[0m index \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mgetTLLinkIndex()\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", "\u001b[1;31mKeyError\u001b[0m: 'i0'" ] } ], "source": [ "self.matching['init_state'] = self.matching['node_id'].map(self.node2init)\n", "self.matching['state'] = self.matching['init_state'].map(lambda x:''.join(x))\n", " \n", "node2allocated_conns = dict()\n", "# 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 = row.inc_edge\n", " out_edge = row.out_edge\n", " state = copy.deepcopy(self.node2init)[node_id]\n", "\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " node2allocated_conns[node_id].append(conn)\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', 'state']]\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "node2allocated_conns" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2-3. 직진 및 좌회전(G)을 배정했습니다.\n" ] } ], "source": [ "self.assign_signals()" ] }, { "cell_type": "code", "execution_count": 62, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
01751A8179004-571542797_02571500487_01i0
11751B4003176-571500487_01571542797_02i0
21752A7001095-571500487_01571545870_01i0
31752B3179270-571542797_02571510153_01i0
41753A6090270571545870_02571510153_01i0
....................................
32102B2270090NaNNaNu60
42103A7359090NaNNaNu60
52103B4000180NaNNaNu60
62104A8180000NaNNaNu60
72104B3180270NaNNaNu60
\n", "

116 rows × 11 columns

\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 7 북 동 001 095 \n", "3 175 2 B 3 남 서 179 270 \n", "4 175 3 A 6 동 서 090 270 \n", ".. ... ... ... ... ... ... ... ... \n", "3 210 2 B 2 서 동 270 090 \n", "4 210 3 A 7 북 동 359 090 \n", "5 210 3 B 4 북 남 000 180 \n", "6 210 4 A 8 남 북 180 000 \n", "7 210 4 B 3 남 서 180 270 \n", "\n", " inc_edge out_edge node_id \n", "0 -571542797_02 571500487_01 i0 \n", "1 -571500487_01 571542797_02 i0 \n", "2 -571500487_01 571545870_01 i0 \n", "3 -571542797_02 571510153_01 i0 \n", "4 571545870_02 571510153_01 i0 \n", ".. ... ... ... \n", "3 NaN NaN u60 \n", "4 NaN NaN u60 \n", "5 NaN NaN u60 \n", "6 NaN NaN u60 \n", "7 NaN NaN u60 \n", "\n", "[116 rows x 11 columns]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "match6" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_nostate
0175i01A8grrrgrrrgGGGGrgrr
1175i01B4gGGrgrrrgrrrrrgrr
2175i02A7grrGgrrrgrrrrrgrr
3175i02B3grrrgrrrgrrrrGgrr
4175i03A6grrrgGGrgrrrrrgrr
.....................
111210u602B2ggggggggr
112210u603A7ggggggggr
113210u603B4ggggggggr
114210u604A8ggggggggr
115210u604B3ggggggggr
\n", "

116 rows × 6 columns

\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no state\n", "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n", "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n", "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n", "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n", "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr\n", ".. ... ... ... ... ... ...\n", "111 210 u60 2 B 2 ggggggggr\n", "112 210 u60 3 A 7 ggggggggr\n", "113 210 u60 3 B 4 ggggggggr\n", "114 210 u60 4 A 8 ggggggggr\n", "115 210 u60 4 B 3 ggggggggr\n", "\n", "[116 rows x 6 columns]" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.match6" ] }, { "cell_type": "code", "execution_count": 25, "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", "
inter_nonode_idphase_noring_typemove_nostate
0175i01A8grrrgrrrgGGGGrgrr
1175i01B4gGGrgrrrgrrrrrgrr
2175i02A7grrGgrrrgrrrrrgrr
3175i02B3grrrgrrrgrrrrGgrr
4175i03A6grrrgGGrgrrrrrgrr
.....................
111210u602B2ggggggggr
112210u603A7ggggggggr
113210u603B4ggggggggr
114210u604A8ggggggggr
115210u604B3ggggggggr
\n", "

116 rows × 6 columns

\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no state\n", "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n", "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n", "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n", "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n", "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr\n", ".. ... ... ... ... ... ...\n", "111 210 u60 2 B 2 ggggggggr\n", "112 210 u60 3 A 7 ggggggggr\n", "113 210 u60 3 B 4 ggggggggr\n", "114 210 u60 4 A 8 ggggggggr\n", "115 210 u60 4 B 3 ggggggggr\n", "\n", "[116 rows x 6 columns]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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 }