{ "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": "markdown", "metadata": {}, "source": [ "비보호좌회전, 신호우회전, 유턴\n", "\n", "줄임말 목록\n", "- `i` : 교차로번호, `inter_no`\n", "- `f` : 진입, from, `inc_edge_id`\n", "- `t` : 진출, to, `out_edge_id`\n", "- `vec` : 방향벡터, unit vector (`np.array([0.6, 0.8])`)\n", "- `dire` : 방위, direction (동, 서, 남, 북, 북동, 북서, 남동, 남서)\n", "- `rvec` : 정방향 방향벡터, unit vector to the right direction (`np.array([0,1])`)\n", "\n", "필요한 객체들 목록\n", "\n", "- `inter2dire2rvec` : `inter_no` $\\mapsto$ `dire2rvec`\n", " - `dire2rvec` : `dire` $\\mapsto$ `rvec`\n", "- `inter2incs` : `inter_no` $\\mapsto$ `inc_edge_ids`\n", "- `inter2outs` : `inter_no` $\\mapsto$ `out_edge_ids`\n", "- `inter2inc2dire` : `inter_no` $\\mapsto$ `int2dire`\n", " - `inc2dire` : `out_edge_id` $\\mapsto$ `dire`\n", "- `inter2out2dire` : `inter_no` $\\mapsto$ `out2dire`\n", " - `out2dire` : `inc_edge_id` $\\mapsto$ `dire`\n", "- `inter2inc2vec` : `inter_no` $\\mapsto$ `int2vec`\n", " - `inc2vec` : `out_edge_id` $\\mapsto$ `vec`\n", "- `inter2out2vec` : `inter_no` $\\mapsto$ `out2vec`\n", " - `out2vec` : `inc_edge_id` $\\mapsto$ `vec`\n", "\n", "좌회전 판단\n", "\n", "Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n", "Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n", "`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n", "Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n", "Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`." ] }, { "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. 중간산출물을 생성합니다.\n", "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n", "2-3. 직진 및 좌회전(G)을 배정했습니다.\n", "2-2. node2num_cycles.json를 저장했습니다.\n", "3. 이슈사항을 저장합니다.\n" ] } ], "source": [ "self = DailyPreprocessor()\n", "self.main()" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_direout_direinc_angleout_angleinc_edge_idout_edge_idnode_idturn_type
01751A8179000-571542797_02571500487_01i0straight
11751B4001180-571500487_01571542797_02i0straight
21752A7001090-571500487_01571545870_01i0left
31752B3179270-571542797_02571510153_01i0left
41753A6090270571545870_02571510153_01i0straight
51753B1090180571545870_02571542797_02i0left
61754A5270000571510153_02571500487_01i0left
71754B2270090571510153_02571545870_01i0straight
81761A8180356-571542810_01-571542797_02.99i1straight
91761B4359180571542797_02.99571542810_01i1straight
101762A8180356-571542810_01-571542797_02.99i1straight
111762B3180270-571542810_01571543469_01i1left
121763A5270356571543469_02-571542797_02.99i1left
131763B18NaNNaNNaNNaNNaNNaNi1NaN
141771A8179000-571542809_01571542811_01i2left
151771B4000180571542811_02571542809_01i2straight
161772A7000090571542811_02571542107_01i2left
171772B3179270-571542809_01571542809_01i2left
181773A17NaNNaNNaNNaNNaNNaNi2NaN
191773B18NaNNaNNaNNaNNaNNaNi2NaN
201774A5268000-571542809_01571542811_01i2left
211774B1090180571542107_02571542809_01i2left
221781A8180000571540304_02571556450_01i3straight
231781B4000180571556450_02571540304_01i3straight
241782A7000090571556450_02571500475_01i3left
251782B3180270571540304_02571540303_01i3left
261783A5270000571540303_02.21571556450_01i3left
271783B2270090571540303_02.21571500475_01i3straight
281784A6090270-571500475_01571540303_01i3straight
291784B1090180-571500475_01571540304_01i3left
302011A8180000-571500569_01571500583_02i8straight
312011B3180270-571500569_01571500618_01i8left
322012A5270000571500618_02571500583_02i8left
332012B2270090571500618_02571500617_01i8straight
342013A6090270571500617_02571500618_01i8straight
352013B2270090571500618_02571500617_01i8straight
362014A6090270571500617_02571500618_01i8straight
372014B1090180571500617_02571500569_01i8left
382015A7000090571500583_01571500617_01i8left
392015B4000180571500583_01571500569_01i8straight
402021A6090270571510152_02-571510152_01i9straight
412021B2270090571510152_01571510152_01.65i9straight
422022A17NaNNaNNaNNaNNaNNaNi9NaN
432022B18NaNNaNNaNNaNNaNNaNi9NaN
442061A8180000-571511538_02571542073_02i7straight
452061B4000180571542073_01571511538_02i7straight
462062A17NaNNaNNaNNaNNaNNaNi7NaN
472062B18NaNNaNNaNNaNNaNNaNi7NaN
482063A8180000-571511538_02571542073_02i7straight
492063B4000180571542073_01571511538_02i7straight
502064A17NaNNaNNaNNaNNaNNaNi7NaN
512064B18NaNNaNNaNNaNNaNNaNi7NaN
522101A6090270-571542115_01571500535_01i6straight
532101B18NaNNaNNaNNaNNaNNaNi6NaN
542102A5270000571500535_02.18571511538_01i6left
552102B2270090571500535_02.18571542115_01i6straight
562103A7000090571511538_02.121571542115_01i6left
572103B4000180571511538_02.121571500585_01i6straight
582104A8180000571500585_02571511538_01i6straight
592104B3180270571500585_02571500535_01i6left
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n", "0 175 1 A 8 남 북 179 \n", "1 175 1 B 4 북 남 001 \n", "2 175 2 A 7 북 동 001 \n", "3 175 2 B 3 남 서 179 \n", "4 175 3 A 6 동 서 090 \n", "5 175 3 B 1 동 남 090 \n", "6 175 4 A 5 서 북 270 \n", "7 175 4 B 2 서 동 270 \n", "8 176 1 A 8 남 북 180 \n", "9 176 1 B 4 북 남 359 \n", "10 176 2 A 8 남 북 180 \n", "11 176 2 B 3 남 서 180 \n", "12 176 3 A 5 서 북 270 \n", "13 176 3 B 18 NaN NaN NaN \n", "14 177 1 A 8 남 북 179 \n", "15 177 1 B 4 북 남 000 \n", "16 177 2 A 7 북 동 000 \n", "17 177 2 B 3 남 서 179 \n", "18 177 3 A 17 NaN NaN NaN \n", "19 177 3 B 18 NaN NaN NaN \n", "20 177 4 A 5 서 북 268 \n", "21 177 4 B 1 동 남 090 \n", "22 178 1 A 8 남 북 180 \n", "23 178 1 B 4 북 남 000 \n", "24 178 2 A 7 북 동 000 \n", "25 178 2 B 3 남 서 180 \n", "26 178 3 A 5 서 북 270 \n", "27 178 3 B 2 서 동 270 \n", "28 178 4 A 6 동 서 090 \n", "29 178 4 B 1 동 남 090 \n", "30 201 1 A 8 남 북 180 \n", "31 201 1 B 3 남 서 180 \n", "32 201 2 A 5 서 북 270 \n", "33 201 2 B 2 서 동 270 \n", "34 201 3 A 6 동 서 090 \n", "35 201 3 B 2 서 동 270 \n", "36 201 4 A 6 동 서 090 \n", "37 201 4 B 1 동 남 090 \n", "38 201 5 A 7 북 동 000 \n", "39 201 5 B 4 북 남 000 \n", "40 202 1 A 6 동 서 090 \n", "41 202 1 B 2 서 동 270 \n", "42 202 2 A 17 NaN NaN NaN \n", "43 202 2 B 18 NaN NaN NaN \n", "44 206 1 A 8 남 북 180 \n", "45 206 1 B 4 북 남 000 \n", "46 206 2 A 17 NaN NaN NaN \n", "47 206 2 B 18 NaN NaN NaN \n", "48 206 3 A 8 남 북 180 \n", "49 206 3 B 4 북 남 000 \n", "50 206 4 A 17 NaN NaN NaN \n", "51 206 4 B 18 NaN NaN NaN \n", "52 210 1 A 6 동 서 090 \n", "53 210 1 B 18 NaN NaN NaN \n", "54 210 2 A 5 서 북 270 \n", "55 210 2 B 2 서 동 270 \n", "56 210 3 A 7 북 동 000 \n", "57 210 3 B 4 북 남 000 \n", "58 210 4 A 8 남 북 180 \n", "59 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", "5 180 571545870_02 571542797_02 i0 left \n", "6 000 571510153_02 571500487_01 i0 left \n", "7 090 571510153_02 571545870_01 i0 straight \n", "8 356 -571542810_01 -571542797_02.99 i1 straight \n", "9 180 571542797_02.99 571542810_01 i1 straight \n", "10 356 -571542810_01 -571542797_02.99 i1 straight \n", "11 270 -571542810_01 571543469_01 i1 left \n", "12 356 571543469_02 -571542797_02.99 i1 left \n", "13 NaN NaN NaN i1 NaN \n", "14 000 -571542809_01 571542811_01 i2 left \n", "15 180 571542811_02 571542809_01 i2 straight \n", "16 090 571542811_02 571542107_01 i2 left \n", "17 270 -571542809_01 571542809_01 i2 left \n", "18 NaN NaN NaN i2 NaN \n", "19 NaN NaN NaN i2 NaN \n", "20 000 -571542809_01 571542811_01 i2 left \n", "21 180 571542107_02 571542809_01 i2 left \n", "22 000 571540304_02 571556450_01 i3 straight \n", "23 180 571556450_02 571540304_01 i3 straight \n", "24 090 571556450_02 571500475_01 i3 left \n", "25 270 571540304_02 571540303_01 i3 left \n", "26 000 571540303_02.21 571556450_01 i3 left \n", "27 090 571540303_02.21 571500475_01 i3 straight \n", "28 270 -571500475_01 571540303_01 i3 straight \n", "29 180 -571500475_01 571540304_01 i3 left \n", "30 000 -571500569_01 571500583_02 i8 straight \n", "31 270 -571500569_01 571500618_01 i8 left \n", "32 000 571500618_02 571500583_02 i8 left \n", "33 090 571500618_02 571500617_01 i8 straight \n", "34 270 571500617_02 571500618_01 i8 straight \n", "35 090 571500618_02 571500617_01 i8 straight \n", "36 270 571500617_02 571500618_01 i8 straight \n", "37 180 571500617_02 571500569_01 i8 left \n", "38 090 571500583_01 571500617_01 i8 left \n", "39 180 571500583_01 571500569_01 i8 straight \n", "40 270 571510152_02 -571510152_01 i9 straight \n", "41 090 571510152_01 571510152_01.65 i9 straight \n", "42 NaN NaN NaN i9 NaN \n", "43 NaN NaN NaN i9 NaN \n", "44 000 -571511538_02 571542073_02 i7 straight \n", "45 180 571542073_01 571511538_02 i7 straight \n", "46 NaN NaN NaN i7 NaN \n", "47 NaN NaN NaN i7 NaN \n", "48 000 -571511538_02 571542073_02 i7 straight \n", "49 180 571542073_01 571511538_02 i7 straight \n", "50 NaN NaN NaN i7 NaN \n", "51 NaN NaN NaN i7 NaN \n", "52 270 -571542115_01 571500535_01 i6 straight \n", "53 NaN NaN NaN i6 NaN \n", "54 000 571500535_02.18 571511538_01 i6 left \n", "55 090 571500535_02.18 571542115_01 i6 straight \n", "56 090 571511538_02.121 571542115_01 i6 left \n", "57 180 571511538_02.121 571500585_01 i6 straight \n", "58 000 571500585_02 571511538_01 i6 straight \n", "59 270 571500585_02 571500535_01 i6 left " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i, row in self.match5.iterrows():\n", " node_id = row.node_id\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", " if not (pd.isna(inc_edge_id) and pd.isna(out_edge_id)):\n", " turn_type = n2io2turn[node_id][(inc_edge_id, out_edge_id)]\n", " self.match5.at[i, 'turn_type']=turn_type\n", "display(self.match5)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "2\n", "1\n", "1\n", "2\n", "1\n", "1\n", "1\n", "3\n", "2\n", "3\n", "1\n", "2\n" ] }, { "ename": "KeyError", "evalue": "nan", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[15], line 4\u001b[0m\n\u001b[0;32m 2\u001b[0m inc_edge_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39minc_edge_id\n\u001b[0;32m 3\u001b[0m out_edge_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge_id\n\u001b[1;32m----> 4\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnet\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetEdge\u001b[49m\u001b[43m(\u001b[49m\u001b[43minc_edge_id\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5\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_id)\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mlen\u001b[39m(inc_edge\u001b[38;5;241m.\u001b[39mgetConnections(out_edge)))\n", "File \u001b[1;32mC:\\Program Files (x86)\\Eclipse\\Sumo\\tools\\sumolib\\net\\__init__.py:261\u001b[0m, in \u001b[0;36mNet.getEdge\u001b[1;34m(self, id)\u001b[0m\n\u001b[0;32m 260\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetEdge\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28mid\u001b[39m):\n\u001b[1;32m--> 261\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_id2edge\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[43m]\u001b[49m\n", "\u001b[1;31mKeyError\u001b[0m: nan" ] } ], "source": [ "for row in self.match5.itertuples():\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", " inc_edge = self.net.getEdge(inc_edge_id)\n", " out_edge = self.net.getEdge(out_edge_id)\n", " print(len(inc_edge.getConnections(out_edge)))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n" ] } ], "source": [ "self.load_data()\n", "self.make_match1()\n", "self.make_match2()\n", "self.make_match3()\n", "self.make_match4()\n", "self.make_match5()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
parent_idchild_iddirectionconditioninc_edge_idout_edge_id
0i0u00좌회전시571500487_02571500487_01.32
1i2u20보행신호시571542810_01.51571542810_02
2i3u30보행신호시571556452_01571556452_02
3i3u31보행신호시571500475_02571500475_01.26
4i3u32보행신호시571540303_02-571540303_02
5i6u60좌회전시571500535_02-571500535_02
\n", "
" ], "text/plain": [ " parent_id child_id direction condition inc_edge_id out_edge_id\n", "0 i0 u00 북 좌회전시 571500487_02 571500487_01.32\n", "1 i2 u20 북 보행신호시 571542810_01.51 571542810_02\n", "2 i3 u30 북 보행신호시 571556452_01 571556452_02\n", "3 i3 u31 동 보행신호시 571500475_02 571500475_01.26\n", "4 i3 u32 서 보행신호시 571540303_02 -571540303_02\n", "5 i6 u60 서 좌회전시 571500535_02 -571500535_02" ] }, "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", "
parent_idchild_idhead_edge_idinc_edge_idout_edge_id
0i0u00-571500487_01571500487_02571500487_01.32
1i2u20571542811_02571542810_01.51571542810_02
2i3u30571556450_02571556452_01571556452_02
3i3u31-571500475_01571500475_02571500475_01.26
4i3u32571540303_02.21571540303_02-571540303_02
5i6u60571500535_02.18571500535_02-571500535_02
\n", "
" ], "text/plain": [ " parent_id child_id head_edge_id inc_edge_id out_edge_id\n", "0 i0 u00 -571500487_01 571500487_02 571500487_01.32\n", "1 i2 u20 571542811_02 571542810_01.51 571542810_02\n", "2 i3 u30 571556450_02 571556452_01 571556452_02\n", "3 i3 u31 -571500475_01 571500475_02 571500475_01.26\n", "4 i3 u32 571540303_02.21 571540303_02 -571540303_02\n", "5 i6 u60 571500535_02.18 571500535_02 -571500535_02" ] }, "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", "
child_idcondition
0u00좌회전시
1u20보행신호시
2u30보행신호시
3u31보행신호시
4u32보행신호시
5u60좌회전시
\n", "
" ], "text/plain": [ " child_id condition\n", "0 u00 좌회전시\n", "1 u20 보행신호시\n", "2 u30 보행신호시\n", "3 u31 보행신호시\n", "4 u32 보행신호시\n", "5 u60 좌회전시" ] }, "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", "
parent_idchild_idhead_edge_idinc_edge_idout_edge_idcondition
0i0u00-571500487_01571500487_02571500487_01.32좌회전시
1i2u20571542811_02571542810_01.51571542810_02보행신호시
2i3u30571556450_02571556452_01571556452_02보행신호시
3i3u31-571500475_01571500475_02571500475_01.26보행신호시
4i3u32571540303_02.21571540303_02-571540303_02보행신호시
5i6u60571500535_02.18571500535_02-571500535_02좌회전시
\n", "
" ], "text/plain": [ " parent_id child_id head_edge_id inc_edge_id out_edge_id \\\n", "0 i0 u00 -571500487_01 571500487_02 571500487_01.32 \n", "1 i2 u20 571542811_02 571542810_01.51 571542810_02 \n", "2 i3 u30 571556450_02 571556452_01 571556452_02 \n", "3 i3 u31 -571500475_01 571500475_02 571500475_01.26 \n", "4 i3 u32 571540303_02.21 571540303_02 -571540303_02 \n", "5 i6 u60 571500535_02.18 571500535_02 -571500535_02 \n", "\n", " condition \n", "0 좌회전시 \n", "1 보행신호시 \n", "2 보행신호시 \n", "3 보행신호시 \n", "4 보행신호시 \n", "5 좌회전시 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "display(self.uturn)\n", "display(self.u_turn)\n", "display(self.u_condition)\n", "\n", "self.u_turn = pd.merge(self.u_turn, self.u_condition, on='child_id')\n", "self.u_turn" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "parent_id i0\n", "child_id u00\n", "head_edge_id -571500487_01\n", "inc_edge_id 571500487_02\n", "out_edge_id 571500487_01.32\n", "condition 좌회전시\n", "Name: 0, dtype: object\n" ] } ], "source": [ "cmatches = []\n", "i = 0\n", "row = self.u_turn.iloc[0]\n", "print(row)\n", "child_id = row.child_id\n", "parent_id = row.parent_id\n", "condition = row.condition\n", "inc_edge_id = row.inc_edge_id\n", "out_edge_id = row.out_edge_id\n", "cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n", "cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n", "cmatch['node_id'] = child_id" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n", "cmatches = []\n", "for _, row in self.uturn.iterrows():\n", " child_id = row.child_id\n", " parent_id = row.parent_id\n", " dire = row.direction\n", " condition = row.condition\n", " inc_edge_id = row.inc_edge_id\n", " out_edge_id = row.out_edge_id\n", "\n", " print(parent_id, condition)\n", "\n", " # match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n", " cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n", " cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n", " cmatch['node_id'] = child_id\n", " cmatch[['inc_edge_id', 'out_edge_id']] = np.nan\n", " display(cmatch)\n", "\n", " # 보행신호시/좌회전시 진입/진출방향\n", " ind = self.dires.index(dire)\n", " inc_dire_pedes = self.dires[(ind + 2) % len(self.dires)]\n", " out_dire_pedes = self.dires[(ind - 2) % len(self.dires)]\n", " inc_dire_right = dire\n", " out_dire_right = self.dires[(ind + 2) % len(self.dires)]\n", "\n", " if condition == '보행신호시':\n", " print(inc_dire_pedes, out_dire_pedes)\n", " else:\n", " print(inc_dire_right, out_dire_right)\n", "\n", " # 보행신호시/좌회전시 조건\n", " pedes_exists = (cmatch.inc_dire==inc_dire_pedes) & (cmatch.out_dire==out_dire_pedes)\n", " right_exists = (cmatch.inc_dire==inc_dire_right) & (cmatch.out_dire==out_dire_right)\n", "\n", " # 보행신호시/좌회전시 진입/진출 엣지id 배정\n", " ind = self.dires.index(dire)\n", " if condition == \"보행신호시\":\n", " cmatch.loc[pedes_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " elif condition == \"좌회전시\":\n", " cmatch.loc[right_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " display(cmatch)\n", "\n", " # 신호없음이동류발생시/보행신호이동류발생시 조건\n", " all_redsigns = cmatch.move_no == 18\n", " crosswalk_on = cmatch.move_no == 17\n", "\n", " # 만약 어떤 유턴신호도 배정되지 않았다면\n", " # 좌회전시 → 보행신호시 → 보행신호이동류발생시 → 신호없음이동류발생시 순으로 진입/진출 엣지id 배정\n", " uturn_not_assigned = cmatch[['inc_edge_id','out_edge_id']].isna().any(axis=1).all()\n", " if uturn_not_assigned:\n", " # 좌회전시\n", " if right_exists.any():\n", " cmatch.loc[right_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " # 보행신호시\n", " elif pedes_exists.any():\n", " cmatch.loc[pedes_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " # 보행신호이동류(17) 발생시\n", " elif crosswalk_on.any():\n", " cmatch.loc[crosswalk_on & (cmatch.out_dire!=dire), ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " # 신호없음이동류(18) 발생시\n", " elif all_redsigns.any():\n", " cmatch.loc[all_redsigns & (cmatch.out_dire!=dire), ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n", " display(cmatch)\n", "cmatches.append(cmatch)\n" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "u31\n", "5 5 s\n", "6 6 s\n", "7 7 s\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 t\n", "\n", "i3\n", "5 5 r\n", "6 6 s\n", "7 7 s\n", "8 8 s\n", "9 9 l\n", "15 15 r\n", "16 16 s\n", "17 17 s\n", "18 18 s\n", "19 19 l\n", "10 10 r\n", "11 11 s\n", "12 12 s\n", "13 13 s\n", "14 14 l\n", "0 0 r\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 l\n", "\n", "u00\n", "5 5 s\n", "6 6 s\n", "7 7 s\n", "8 8 s\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 t\n", "\n", "i0\n", "0 0 r\n", "1 1 s\n", "2 2 s\n", "3 3 l\n", "8 8 r\n", "9 9 s\n", "10 10 s\n", "11 11 s\n", "12 12 s\n", "13 13 l\n", "14 14 r\n", "15 15 s\n", "16 16 l\n", "4 4 r\n", "5 5 s\n", "6 6 s\n", "7 7 l\n", "\n", "u60\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "6 6 s\n", "7 7 s\n", "8 8 t\n", "\n", "d12\n", "\n", "n13\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "\n", "i8\n", "8 8 r\n", "9 9 s\n", "10 10 s\n", "11 11 l\n", "0 0 r\n", "1 1 s\n", "2 2 s\n", "3 3 l\n", "4 4 s\n", "5 5 s\n", "6 6 s\n", "7 7 l\n", "12 12 r\n", "13 13 s\n", "14 14 s\n", "15 15 l\n", "\n", "i9\n", "2 2 s\n", "3 3 s\n", "0 0 s\n", "1 1 s\n", "\n", "n14\n", "2 -1 r\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "6 -1 s\n", "7 -1 l\n", "0 -1 r\n", "1 -1 l\n", "\n", "n11\n", "3 -1 s\n", "4 -1 s\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "\n", "i7\n", "4 4 r\n", "5 5 s\n", "6 6 s\n", "3 3 r\n", "0 0 s\n", "1 1 s\n", "2 2 l\n", "\n", "u32\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "6 6 s\n", "7 7 t\n", "\n", "n06\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "6 -1 s\n", "\n", "n09\n", "4 -1 s\n", "5 -1 s\n", "6 -1 s\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "\n", "i6\n", "4 4 r\n", "5 5 s\n", "6 6 s\n", "7 7 s\n", "8 8 l\n", "12 12 r\n", "13 13 s\n", "14 14 s\n", "15 15 l\n", "9 9 r\n", "10 10 s\n", "11 11 s\n", "0 0 r\n", "1 1 s\n", "2 2 s\n", "3 3 l\n", "\n", "i5\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "\n", "n08\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 l\n", "7 -1 r\n", "8 -1 s\n", "9 -1 s\n", "10 -1 s\n", "4 -1 r\n", "5 -1 l\n", "6 -1 l\n", "\n", "c30\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "\n", "n00\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "0 -1 s\n", "1 -1 s\n", "\n", "i1\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "6 6 l\n", "0 0 r\n", "1 1 s\n", "2 2 s\n", "7 7 r\n", "8 8 l\n", "9 9 l\n", "\n", "n10\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "6 -1 s\n", "7 -1 t\n", "\n", "n04\n", "5 -1 r\n", "6 -1 s\n", "7 -1 s\n", "8 -1 s\n", "9 -1 l\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 l\n", "10 -1 r\n", "4 -1 r\n", "\n", "n03\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "\n", "i2\n", "3 3 r\n", "4 4 s\n", "5 5 s\n", "6 6 s\n", "2 2 r\n", "0 0 s\n", "1 1 s\n", "\n", "n01\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "0 -1 s\n", "1 -1 s\n", "\n", "n02\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "\n", "d07\n", "\n", "d00\n", "\n", "n12\n", "0 -1 s\n", "1 -1 s\n", "2 -1 r\n", "3 -1 l\n", "4 -1 r\n", "5 -1 s\n", "6 -1 s\n", "\n", "d16\n", "\n", "d11\n", "\n", "d15\n", "\n", "d17\n", "\n", "n15\n", "5 -1 s\n", "6 -1 s\n", "7 -1 s\n", "8 -1 l\n", "2 -1 r\n", "3 -1 s\n", "4 -1 s\n", "0 -1 r\n", "1 -1 l\n", "\n", "d18\n", "\n", "n07\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 l\n", "7 -1 s\n", "8 -1 s\n", "9 -1 s\n", "4 -1 r\n", "5 -1 l\n", "6 -1 l\n", "\n", "d08\n", "\n", "d14\n", "\n", "d13\n", "\n", "d04\n", "\n", "d09\n", "\n", "n05\n", "0 -1 s\n", "1 -1 s\n", "2 -1 s\n", "3 -1 s\n", "4 -1 s\n", "5 -1 s\n", "6 -1 s\n", "7 -1 s\n", "8 -1 s\n", "\n", "u20\n", "0 0 s\n", "1 1 s\n", "2 2 t\n", "3 3 s\n", "4 4 s\n", "5 5 s\n", "\n", "d10\n", "\n", "d03\n", "\n", "d06\n", "\n", "d01\n", "\n", "d05\n", "\n", "u30\n", "5 5 s\n", "6 6 s\n", "7 7 s\n", "0 0 s\n", "1 1 s\n", "2 2 s\n", "3 3 s\n", "4 4 t\n", "\n" ] } ], "source": [ "nodes = self.net.getNodes()\n", "for node in nodes:\n", " node_id = node.getID()\n", " print(node_id)\n", " conns = [con for con in node.getConnections()]\n", " for con in conns:\n", " print(con.getJunctionIndex(), con.getTLLinkIndex(), con.getDirection())\n", " print()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "'''Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n", "Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n", "`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n", "Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n", "Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`.'''" ] } ], "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 }