신호생성 repo (24. 1. 5 ~).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1701 lines
63 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import sumolib\n",
"import copy\n",
"from tqdm import tqdm\n",
"from datetime import datetime"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-01-05 08:25:00\n",
"2024-01-05 08:30:00\n",
"2024-01-05 08:35:00\n",
"2024-01-05 08:45:00\n"
]
}
],
"source": [
"midnight = int(datetime(2024, 1, 5, 0, 0, 0).timestamp())\n",
"next_day = int(datetime(2024, 1, 6, 0, 0, 0).timestamp())\n",
"fmins = range(midnight, next_day, 300)\n",
"m = 105 # m ranges from 26 to 287\n",
"# sigtable 시작시각 : 현재시각 - 1200 = 08:25\n",
"# 시뮬레이션 시작시각 : 현재시각 - 900 = 08:30\n",
"# 시뮬레이션 종료시각 : 현재시각 - 600 = 08:35\n",
"# 현재시각 : 08:45\n",
"present_time = fmins[m]\n",
"sigtable_start = fmins[m] - 1200\n",
"sim_start = fmins[m] - 900\n",
"sim_end = fmins[m] - 600\n",
"print(datetime.fromtimestamp(sigtable_start))\n",
"print(datetime.fromtimestamp(sim_start))\n",
"print(datetime.fromtimestamp(sim_end))\n",
"print(datetime.fromtimestamp(present_time))\n",
"net = sumolib.net.readNet('../../Data/networks/sn.net.xml')\n",
"inter_node = pd.read_csv('../../data/tables/inter_node.csv', index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n"
]
}
],
"source": [
"histid = pd.read_csv(f'../../Data/tables/histids/histids_{fmins[50]}.csv', index_col=0)\n",
"print(sorted(histid.node_id.unique()))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{175: 'u00', 176: 'i1', 177: 'u20', 178: 'c30', 210: 'u60', 206: 'i7', 201: 'i8', 202: 'i9'}\n",
"{'i0': 175, 'u00': 175, 'i1': 176, 'i2': 177, 'u20': 177, 'i3': 178, 'u30': 178, 'u31': 178, 'u32': 178, 'c30': 178, 'i6': 210, 'u60': 210, 'i7': 206, 'i8': 201, 'i9': 202}\n",
"{'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'c30': 'i3'}\n",
"{'i0': ['u00'], 'i1': [], 'i2': ['u20'], 'i3': ['c30', 'u30', 'u31', 'u32'], 'i6': [], 'i7': [], 'i8': [], 'i9': []}\n",
"['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
"['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n",
"['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n"
]
}
],
"source": [
"inter2node = dict(zip(inter_node['inter_no'], inter_node['node_id']))\n",
"node2inter = dict(zip(inter_node['node_id'], inter_node['inter_no']))\n",
"ch2pa = {'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'c30': 'i3'}\n",
"pa2ch = {'i0':['u00'], 'i1':[], 'i2':['u20'], 'i3':['c30', 'u30', 'u31', 'u32'], 'i6':[], 'i7':[], 'i8':[], 'i9':[]}\n",
"node_ids = sorted(inter_node.node_id.unique())\n",
"parent_ids = sorted(inter_node[inter_node.inter_type=='parent'].node_id.unique())\n",
"child_ids = sorted(inter_node[inter_node.inter_type=='child'].node_id.unique())\n",
"\n",
"print(inter2node)\n",
"print(node2inter)\n",
"print(ch2pa)\n",
"print(pa2ch)\n",
"print(node_ids)\n",
"print(parent_ids)\n",
"print(child_ids)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1704411900 2024-01-05 08:45:00\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>duration</th>\n",
" <th>inc_edge_A</th>\n",
" <th>out_edge_A</th>\n",
" <th>inc_edge_B</th>\n",
" <th>out_edge_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>24</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>19</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571511538_01</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571542115_01</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500585_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>571500585_02</td>\n",
" <td>571511538_01</td>\n",
" <td>571500585_02</td>\n",
" <td>571500535_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>215</th>\n",
" <td>i0</td>\n",
" <td>1704411630</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>216</th>\n",
" <td>i0</td>\n",
" <td>1704411630</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>33</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>217</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571542810_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>218</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>93</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>-571542810_01</td>\n",
" <td>571543469_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>219</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>571543469_02</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>220 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phas_A phas_B duration inc_edge_A \\\n",
"0 i6 1704410420 1 1 24 -571542115_01 \n",
"1 i6 1704410420 1 2 19 -571542115_01 \n",
"2 i6 1704410420 2 2 39 571500535_02.18 \n",
"3 i6 1704410420 3 3 65 571511538_02.121 \n",
"4 i6 1704410420 4 4 23 571500585_02 \n",
".. ... ... ... ... ... ... \n",
"215 i0 1704411630 3 4 26 571545870_02 \n",
"216 i0 1704411630 4 4 33 571510153_02 \n",
"217 i1 1704411670 1 1 37 -571542810_01 \n",
"218 i1 1704411670 2 2 93 -571542810_01 \n",
"219 i1 1704411670 3 3 40 571543469_02 \n",
"\n",
" out_edge_A inc_edge_B out_edge_B \n",
"0 571500535_01 NaN NaN \n",
"1 571500535_01 571500535_02.18 571542115_01 \n",
"2 571511538_01 571500535_02.18 571542115_01 \n",
"3 571542115_01 571511538_02.121 571500585_01 \n",
"4 571511538_01 571500585_02 571500535_01 \n",
".. ... ... ... \n",
"215 571510153_01 571510153_02 571545870_01 \n",
"216 571500487_01 571510153_02 571545870_01 \n",
"217 -571542797_02.99 571542797_02.99 571542810_01 \n",
"218 -571542797_02.99 -571542810_01 571543469_01 \n",
"219 -571542797_02.99 NaN NaN \n",
"\n",
"[220 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>phase_no</th>\n",
" <th>ring_type</th>\n",
" <th>inc_edge</th>\n",
" <th>out_edge</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>i0</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>i0</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>i0</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>i0</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>i0</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>111</th>\n",
" <td>u60</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>571500535_02</td>\n",
" <td>-571500535_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td>u60</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>u60</td>\n",
" <td>3</td>\n",
" <td>B</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>u60</td>\n",
" <td>4</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>u60</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>116 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" node_id phase_no ring_type inc_edge out_edge\n",
"0 i0 1 A -571542797_02 571500487_01\n",
"1 i0 1 B -571500487_01 571542797_02\n",
"2 i0 2 A -571500487_01 571545870_01\n",
"3 i0 2 B -571542797_02 571510153_01\n",
"4 i0 3 A 571545870_02 571510153_01\n",
".. ... ... ... ... ...\n",
"111 u60 2 B 571500535_02 -571500535_02\n",
"112 u60 3 A NaN NaN\n",
"113 u60 3 B NaN NaN\n",
"114 u60 4 A NaN NaN\n",
"115 u60 4 B NaN NaN\n",
"\n",
"[116 rows x 5 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(fmins[m], datetime.fromtimestamp(fmins[m]))\n",
"histid = pd.read_csv(f'../../Data/tables/histids/histids_{fmins[m]}.csv', index_col=0)\n",
"match6 = pd.read_csv('../../Data/tables/matching/match6.csv', index_col=0)\n",
"histid = histid.reset_index(drop=True)\n",
"histid = histid.drop(columns=['inter_no'])\n",
"match6 = match6[['node_id', 'phase_no', 'ring_type', 'inc_edge', 'out_edge']].reset_index(drop=True)\n",
"display(histid)\n",
"display(match6)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted(histid.node_id.unique())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>duration</th>\n",
" <th>inc_edge_A</th>\n",
" <th>out_edge_A</th>\n",
" <th>inc_edge_B</th>\n",
" <th>out_edge_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>24</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>19</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571511538_01</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571542115_01</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500585_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>i6</td>\n",
" <td>1704410420</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>571500585_02</td>\n",
" <td>571511538_01</td>\n",
" <td>571500585_02</td>\n",
" <td>571500535_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>411</th>\n",
" <td>u00</td>\n",
" <td>1704411630</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>412</th>\n",
" <td>u00</td>\n",
" <td>1704411630</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>33</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>413</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571542810_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>414</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>93</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>-571542810_01</td>\n",
" <td>571543469_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>415</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>571543469_02</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>416 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phas_A phas_B duration inc_edge_A \\\n",
"0 i6 1704410420 1 1 24 -571542115_01 \n",
"1 i6 1704410420 1 2 19 -571542115_01 \n",
"2 i6 1704410420 2 2 39 571500535_02.18 \n",
"3 i6 1704410420 3 3 65 571511538_02.121 \n",
"4 i6 1704410420 4 4 23 571500585_02 \n",
".. ... ... ... ... ... ... \n",
"411 u00 1704411630 3 4 26 NaN \n",
"412 u00 1704411630 4 4 33 NaN \n",
"413 i1 1704411670 1 1 37 -571542810_01 \n",
"414 i1 1704411670 2 2 93 -571542810_01 \n",
"415 i1 1704411670 3 3 40 571543469_02 \n",
"\n",
" out_edge_A inc_edge_B out_edge_B \n",
"0 571500535_01 NaN NaN \n",
"1 571500535_01 571500535_02.18 571542115_01 \n",
"2 571511538_01 571500535_02.18 571542115_01 \n",
"3 571542115_01 571511538_02.121 571500585_01 \n",
"4 571511538_01 571500585_02 571500535_01 \n",
".. ... ... ... \n",
"411 NaN NaN NaN \n",
"412 NaN NaN NaN \n",
"413 -571542797_02.99 571542797_02.99 571542810_01 \n",
"414 -571542797_02.99 -571542810_01 571543469_01 \n",
"415 -571542797_02.99 NaN NaN \n",
"\n",
"[416 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"new_histids = []\n",
"for parent_id in parent_ids:\n",
" for child_id in pa2ch[parent_id]:\n",
" new_histid = histid.copy()[histid.node_id==parent_id]\n",
" new_histid[['inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']] = np.nan\n",
" for i, row in new_histid.iterrows():\n",
" phas_A = row.phas_A\n",
" phas_B = row.phas_B\n",
" new_match = match6[match6.node_id==child_id]\n",
" Arow = new_match[(new_match.phase_no==phas_A) & (new_match.ring_type=='A')]\n",
" if ~ Arow[['inc_edge', 'out_edge']].isna().all().all():\n",
" inc_edge = Arow.iloc[0].inc_edge\n",
" out_edge = Arow.iloc[0].out_edge\n",
" new_histid.loc[i, ['inc_edge_A', 'out_edge_A']] = [inc_edge, out_edge]\n",
" Brow = new_match[(new_match.phase_no==phas_B) & (new_match.ring_type=='B')]\n",
" if ~ Brow[['inc_edge', 'out_edge']].isna().all().all():\n",
" inc_edge = Brow.iloc[0].inc_edge\n",
" out_edge = Brow.iloc[0].out_edge\n",
" new_histid.loc[i, ['inc_edge_B', 'out_edge_B']] = [inc_edge, out_edge]\n",
" new_histid.loc[i, 'node_id'] = child_id\n",
" new_histids.append(new_histid)\n",
"histid_child = pd.concat(new_histids)\n",
"histids = pd.concat([histid.copy(), histid_child])\n",
"histids = histids.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n",
"display(histids)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32']\n",
"[<junction id=\"c30\"/>, <junction id=\"i0\"/>, <junction id=\"i1\"/>, <junction id=\"i2\"/>, <junction id=\"i3\"/>, <junction id=\"i6\"/>, <junction id=\"i8\"/>, <junction id=\"i9\"/>, <junction id=\"u00\"/>, <junction id=\"u20\"/>, <junction id=\"u30\"/>, <junction id=\"u31\"/>, <junction id=\"u32\"/>]\n"
]
}
],
"source": [
"node_ids = sorted(histids.node_id.unique())\n",
"nodes = [net.getNode(node_id) for node_id in node_ids]\n",
"print(node_ids)\n",
"print(nodes)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"c30 rrrrrr\n",
"i0 grrrgrrrgrrrrrgrr\n",
"i1 grrrrrrgrr\n",
"i2 rrggrrr\n",
"i3 grrrrgrrrrgrrrrgrrrr\n",
"i6 grrrgrrrrgrrgrrr\n",
"i8 grrrrrrrgrrrgrrr\n",
"i9 rrrr\n",
"u00 ggggrgggg\n",
"u20 ggrggg\n",
"u30 ggggrggg\n",
"u31 ggggrggg\n",
"u32 gggggggr\n"
]
}
],
"source": [
"node2init = {}\n",
"for node in nodes:\n",
" node_id = node.getID()\n",
" conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
" conns = [c for c in conns if c[0] >= 0]\n",
" conns = sorted(conns, key=lambda x: x[0])\n",
" state = []\n",
" for i, ci in conns:\n",
" if ci.getTLLinkIndex() < 0:\n",
" continue\n",
" are_foes = False\n",
" for j, cj in conns:\n",
" if ci.getTo() == cj.getTo():\n",
" continue\n",
" if node.areFoes(i, j):\n",
" are_foes = True\n",
" break\n",
" state.append('r' if are_foes else 'g')\n",
" node2init[node_id] = state\n",
"\n",
"# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n",
"for _, row in histids.iterrows():\n",
" node_id = row['node_id']\n",
" inc_edge_A = row.inc_edge_A\n",
" inc_edge_B = row.inc_edge_B\n",
" out_edge_A = row.out_edge_A\n",
" out_edge_B = row.out_edge_B\n",
"\n",
" if pd.isna(inc_edge_A) or pd.isna(out_edge_A):\n",
" pass\n",
" else:\n",
" inc_edge_A = net.getEdge(inc_edge_A)\n",
" out_edge_A = net.getEdge(out_edge_A)\n",
" for conn in inc_edge_A.getConnections(out_edge_A):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" node2init[node_id][index] = 'r'\n",
"\n",
" if pd.isna(inc_edge_B) or pd.isna(out_edge_B):\n",
" pass\n",
" else:\n",
" inc_edge_B = net.getEdge(inc_edge_B)\n",
" out_edge_B = net.getEdge(out_edge_B)\n",
" for conn in inc_edge_B.getConnections(out_edge_B):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" node2init[node_id][index] = 'r'\n",
"for node_id in node_ids:\n",
" print(node_id, \"\".join(node2init[node_id]))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1704411900\n",
"2024-01-05 08:45:00\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase_sumo</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" <th>start_dt</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>i2</td>\n",
" <td>1704410739</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>GGggGGG</td>\n",
" <td>2024-01-05 08:25:39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>i2</td>\n",
" <td>1704410739</td>\n",
" <td>1</td>\n",
" <td>25</td>\n",
" <td>rrggrrr</td>\n",
" <td>2024-01-05 08:25:39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>i2</td>\n",
" <td>1704410739</td>\n",
" <td>2</td>\n",
" <td>71</td>\n",
" <td>rrggrrr</td>\n",
" <td>2024-01-05 08:25:39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>101</th>\n",
" <td>i2</td>\n",
" <td>1704410739</td>\n",
" <td>3</td>\n",
" <td>34</td>\n",
" <td>rrggGGG</td>\n",
" <td>2024-01-05 08:25:39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>102</th>\n",
" <td>u20</td>\n",
" <td>1704410739</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>ggrggg</td>\n",
" <td>2024-01-05 08:25:39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>411</th>\n",
" <td>u00</td>\n",
" <td>1704411630</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>ggggrgggg</td>\n",
" <td>2024-01-05 08:40:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>412</th>\n",
" <td>u00</td>\n",
" <td>1704411630</td>\n",
" <td>4</td>\n",
" <td>33</td>\n",
" <td>ggggrgggg</td>\n",
" <td>2024-01-05 08:40:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>413</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>gGGGGGrgrr</td>\n",
" <td>2024-01-05 08:41:10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>414</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>1</td>\n",
" <td>93</td>\n",
" <td>grrGGGGgrr</td>\n",
" <td>2024-01-05 08:41:10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>415</th>\n",
" <td>i1</td>\n",
" <td>1704411670</td>\n",
" <td>2</td>\n",
" <td>40</td>\n",
" <td>grrrrrrgGG</td>\n",
" <td>2024-01-05 08:41:10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>318 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase_sumo duration state start_dt\n",
"98 i2 1704410739 0 40 GGggGGG 2024-01-05 08:25:39\n",
"99 i2 1704410739 1 25 rrggrrr 2024-01-05 08:25:39\n",
"100 i2 1704410739 2 71 rrggrrr 2024-01-05 08:25:39\n",
"101 i2 1704410739 3 34 rrggGGG 2024-01-05 08:25:39\n",
"102 u20 1704410739 0 40 ggrggg 2024-01-05 08:25:39\n",
".. ... ... ... ... ... ...\n",
"411 u00 1704411630 3 26 ggggrgggg 2024-01-05 08:40:30\n",
"412 u00 1704411630 4 33 ggggrgggg 2024-01-05 08:40:30\n",
"413 i1 1704411670 0 37 gGGGGGrgrr 2024-01-05 08:41:10\n",
"414 i1 1704411670 1 93 grrGGGGgrr 2024-01-05 08:41:10\n",
"415 i1 1704411670 2 40 grrrrrrgGG 2024-01-05 08:41:10\n",
"\n",
"[318 rows x 6 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(present_time)\n",
"print(datetime.fromtimestamp(present_time))\n",
"sigtable = histids.copy()\n",
"sigtable['init_state'] = sigtable['node_id'].map(node2init)\n",
"sigtable['state'] = sigtable['init_state'].map(lambda x:''.join(x))\n",
"for i, row in sigtable.iterrows():\n",
" node_id = row.node_id\n",
" inc_edge_A = row.inc_edge_A\n",
" inc_edge_B = row.inc_edge_B\n",
" out_edge_A = row.out_edge_A\n",
" out_edge_B = row.out_edge_B\n",
" state = copy.deepcopy(node2init)[node_id]\n",
"\n",
" if pd.isna(inc_edge_A) or pd.isna(out_edge_A):\n",
" continue\n",
" else:\n",
" inc_edge_A = net.getEdge(inc_edge_A)\n",
" out_edge_A = net.getEdge(out_edge_A)\n",
" for conn in inc_edge_A.getConnections(out_edge_A):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" state[index] = 'G'\n",
" sigtable.at[i, 'state'] = ''.join(state)\n",
"\n",
" if pd.isna(inc_edge_B) or pd.isna(out_edge_B):\n",
" continue\n",
" else:\n",
" inc_edge_B = net.getEdge(inc_edge_B)\n",
" out_edge_B = net.getEdge(out_edge_B)\n",
" for conn in inc_edge_B.getConnections(out_edge_B):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" state[index] = 'G'\n",
" sigtable.at[i, 'state'] = ''.join(state)\n",
"sigtable = sigtable.dropna(subset='state')\n",
"sigtable = sigtable.reset_index(drop=True)\n",
"sigtable['phase_sumo'] = sigtable.groupby(['node_id', 'start_unix']).cumcount()\n",
"sigtable = sigtable[sigtable.start_unix >= sigtable_start]\n",
"sigtable = sigtable[['node_id', 'start_unix', 'phase_sumo', 'duration', 'state']]\n",
"sigtable = sigtable.sort_values(by=['start_unix', 'node_id'])\n",
"sigtable['start_dt'] = sigtable['start_unix'].apply(lambda x:datetime.fromtimestamp(x))\n",
"display(sigtable)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase_sumo</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" <th>start_dt</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>106</th>\n",
" <td>i6</td>\n",
" <td>1704410760</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:26:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>107</th>\n",
" <td>i6</td>\n",
" <td>1704410760</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:26:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>i6</td>\n",
" <td>1704410760</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:26:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>i6</td>\n",
" <td>1704410760</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:26:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>i6</td>\n",
" <td>1704410760</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:26:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>159</th>\n",
" <td>i6</td>\n",
" <td>1704410930</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:28:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>160</th>\n",
" <td>i6</td>\n",
" <td>1704410930</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:28:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>161</th>\n",
" <td>i6</td>\n",
" <td>1704410930</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:28:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>162</th>\n",
" <td>i6</td>\n",
" <td>1704410930</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:28:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>163</th>\n",
" <td>i6</td>\n",
" <td>1704410930</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:28:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>212</th>\n",
" <td>i6</td>\n",
" <td>1704411100</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:31:40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>213</th>\n",
" <td>i6</td>\n",
" <td>1704411100</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:31:40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>214</th>\n",
" <td>i6</td>\n",
" <td>1704411100</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:31:40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>215</th>\n",
" <td>i6</td>\n",
" <td>1704411100</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:31:40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>216</th>\n",
" <td>i6</td>\n",
" <td>1704411100</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:31:40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>273</th>\n",
" <td>i6</td>\n",
" <td>1704411270</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:34:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>274</th>\n",
" <td>i6</td>\n",
" <td>1704411270</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:34:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>275</th>\n",
" <td>i6</td>\n",
" <td>1704411270</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:34:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>276</th>\n",
" <td>i6</td>\n",
" <td>1704411270</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:34:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>277</th>\n",
" <td>i6</td>\n",
" <td>1704411270</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:34:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>338</th>\n",
" <td>i6</td>\n",
" <td>1704411440</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:37:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>339</th>\n",
" <td>i6</td>\n",
" <td>1704411440</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:37:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>340</th>\n",
" <td>i6</td>\n",
" <td>1704411440</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:37:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>341</th>\n",
" <td>i6</td>\n",
" <td>1704411440</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:37:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>342</th>\n",
" <td>i6</td>\n",
" <td>1704411440</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:37:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>393</th>\n",
" <td>i6</td>\n",
" <td>1704411609</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>grrrgGGGrgrrgrrr</td>\n",
" <td>2024-01-05 08:40:09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>394</th>\n",
" <td>i6</td>\n",
" <td>1704411609</td>\n",
" <td>1</td>\n",
" <td>19</td>\n",
" <td>grrrgGGGrgrrgGGr</td>\n",
" <td>2024-01-05 08:40:09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>395</th>\n",
" <td>i6</td>\n",
" <td>1704411609</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>grrrgrrrrgrrgGGG</td>\n",
" <td>2024-01-05 08:40:09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>396</th>\n",
" <td>i6</td>\n",
" <td>1704411609</td>\n",
" <td>3</td>\n",
" <td>65</td>\n",
" <td>gGGGgrrrrgrrgrrr</td>\n",
" <td>2024-01-05 08:40:09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>397</th>\n",
" <td>i6</td>\n",
" <td>1704411609</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" <td>grrrgrrrrgGGgrrr</td>\n",
" <td>2024-01-05 08:40:09</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase_sumo duration state \\\n",
"106 i6 1704410760 0 24 grrrgGGGrgrrgrrr \n",
"107 i6 1704410760 1 19 grrrgGGGrgrrgGGr \n",
"108 i6 1704410760 2 39 grrrgrrrrgrrgGGG \n",
"109 i6 1704410760 3 65 gGGGgrrrrgrrgrrr \n",
"110 i6 1704410760 4 23 grrrgrrrrgGGgrrr \n",
"159 i6 1704410930 0 24 grrrgGGGrgrrgrrr \n",
"160 i6 1704410930 1 19 grrrgGGGrgrrgGGr \n",
"161 i6 1704410930 2 39 grrrgrrrrgrrgGGG \n",
"162 i6 1704410930 3 65 gGGGgrrrrgrrgrrr \n",
"163 i6 1704410930 4 23 grrrgrrrrgGGgrrr \n",
"212 i6 1704411100 0 24 grrrgGGGrgrrgrrr \n",
"213 i6 1704411100 1 19 grrrgGGGrgrrgGGr \n",
"214 i6 1704411100 2 39 grrrgrrrrgrrgGGG \n",
"215 i6 1704411100 3 65 gGGGgrrrrgrrgrrr \n",
"216 i6 1704411100 4 23 grrrgrrrrgGGgrrr \n",
"273 i6 1704411270 0 24 grrrgGGGrgrrgrrr \n",
"274 i6 1704411270 1 19 grrrgGGGrgrrgGGr \n",
"275 i6 1704411270 2 39 grrrgrrrrgrrgGGG \n",
"276 i6 1704411270 3 65 gGGGgrrrrgrrgrrr \n",
"277 i6 1704411270 4 23 grrrgrrrrgGGgrrr \n",
"338 i6 1704411440 0 24 grrrgGGGrgrrgrrr \n",
"339 i6 1704411440 1 19 grrrgGGGrgrrgGGr \n",
"340 i6 1704411440 2 39 grrrgrrrrgrrgGGG \n",
"341 i6 1704411440 3 65 gGGGgrrrrgrrgrrr \n",
"342 i6 1704411440 4 23 grrrgrrrrgGGgrrr \n",
"393 i6 1704411609 0 24 grrrgGGGrgrrgrrr \n",
"394 i6 1704411609 1 19 grrrgGGGrgrrgGGr \n",
"395 i6 1704411609 2 39 grrrgrrrrgrrgGGG \n",
"396 i6 1704411609 3 65 gGGGgrrrrgrrgrrr \n",
"397 i6 1704411609 4 23 grrrgrrrrgGGgrrr \n",
"\n",
" start_dt \n",
"106 2024-01-05 08:26:00 \n",
"107 2024-01-05 08:26:00 \n",
"108 2024-01-05 08:26:00 \n",
"109 2024-01-05 08:26:00 \n",
"110 2024-01-05 08:26:00 \n",
"159 2024-01-05 08:28:50 \n",
"160 2024-01-05 08:28:50 \n",
"161 2024-01-05 08:28:50 \n",
"162 2024-01-05 08:28:50 \n",
"163 2024-01-05 08:28:50 \n",
"212 2024-01-05 08:31:40 \n",
"213 2024-01-05 08:31:40 \n",
"214 2024-01-05 08:31:40 \n",
"215 2024-01-05 08:31:40 \n",
"216 2024-01-05 08:31:40 \n",
"273 2024-01-05 08:34:30 \n",
"274 2024-01-05 08:34:30 \n",
"275 2024-01-05 08:34:30 \n",
"276 2024-01-05 08:34:30 \n",
"277 2024-01-05 08:34:30 \n",
"338 2024-01-05 08:37:20 \n",
"339 2024-01-05 08:37:20 \n",
"340 2024-01-05 08:37:20 \n",
"341 2024-01-05 08:37:20 \n",
"342 2024-01-05 08:37:20 \n",
"393 2024-01-05 08:40:09 \n",
"394 2024-01-05 08:40:09 \n",
"395 2024-01-05 08:40:09 \n",
"396 2024-01-05 08:40:09 \n",
"397 2024-01-05 08:40:09 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sigtable[sigtable.node_id=='i6']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-01-05 08:25:00\n",
"2024-01-05 08:30:00\n",
"2024-01-05 08:35:00\n",
"2024-01-05 08:45:00\n"
]
}
],
"source": [
"# sigtable 시작시각 : 현재시각 - 1200 = 08:25\n",
"# 시뮬레이션 시작시각 : 현재시각 - 900 = 08:30\n",
"# 시뮬레이션 종료시각 : 현재시각 - 600 = 08:35\n",
"# 현재시각 : 08:45\n",
"print(datetime.fromtimestamp(sigtable_start))\n",
"print(datetime.fromtimestamp(sim_start))\n",
"print(datetime.fromtimestamp(sim_end))\n",
"print(datetime.fromtimestamp(present_time))\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<additional>\n",
" <tlLogic id=\"c30\" type=\"static\" programID=\"c30_prog\" offset=\"-50\">\n",
" <phase duration=\"38\" state=\"rrrrrr\"/>\n",
" <phase duration=\"39\" state=\"GGGGGG\"/>\n",
" <phase duration=\"42\" state=\"GGGGGG\"/>\n",
" <phase duration=\"21\" state=\"GGGGGG\"/>\n",
" <phase duration=\"38\" state=\"rrrrrr\"/>\n",
" <phase duration=\"39\" state=\"GGGGGG\"/>\n",
" <phase duration=\"42\" state=\"GGGGGG\"/>\n",
" <phase duration=\"21\" state=\"GGGGGG\"/>\n",
" <phase duration=\"38\" state=\"rrrrrr\"/>\n",
" <phase duration=\"39\" state=\"GGGGGG\"/>\n",
" <phase duration=\"42\" state=\"GGGGGG\"/>\n",
" <phase duration=\"21\" state=\"GGGGGG\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i0\" type=\"static\" programID=\"i0_prog\" offset=\"-50\">\n",
" <phase duration=\"40\" state=\"gGGrgrrrgGGGGrgrr\"/>\n",
" <phase duration=\"42\" state=\"grrGgrrrgrrrrGgrr\"/>\n",
" <phase duration=\"29\" state=\"grrrgGGGgrrrrrgrr\"/>\n",
" <phase duration=\"26\" state=\"grrrgGGrgrrrrrgGr\"/>\n",
" <phase duration=\"33\" state=\"grrrgrrrgrrrrrgGG\"/>\n",
" <phase duration=\"40\" state=\"gGGrgrrrgGGGGrgrr\"/>\n",
" <phase duration=\"42\" state=\"grrGgrrrgrrrrGgrr\"/>\n",
" <phase duration=\"29\" state=\"grrrgGGGgrrrrrgrr\"/>\n",
" <phase duration=\"26\" state=\"grrrgGGrgrrrrrgGr\"/>\n",
" <phase duration=\"33\" state=\"grrrgrrrgrrrrrgGG\"/>\n",
" <phase duration=\"40\" state=\"gGGrgrrrgGGGGrgrr\"/>\n",
" <phase duration=\"42\" state=\"grrGgrrrgrrrrGgrr\"/>\n",
" <phase duration=\"29\" state=\"grrrgGGGgrrrrrgrr\"/>\n",
" <phase duration=\"26\" state=\"grrrgGGrgrrrrrgGr\"/>\n",
" <phase duration=\"33\" state=\"grrrgrrrgrrrrrgGG\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i1\" type=\"static\" programID=\"i1_prog\" offset=\"-10\">\n",
" <phase duration=\"37\" state=\"gGGGGGrgrr\"/>\n",
" <phase duration=\"93\" state=\"grrGGGGgrr\"/>\n",
" <phase duration=\"40\" state=\"grrrrrrgGG\"/>\n",
" <phase duration=\"37\" state=\"gGGGGGrgrr\"/>\n",
" <phase duration=\"93\" state=\"grrGGGGgrr\"/>\n",
" <phase duration=\"40\" state=\"grrrrrrgGG\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i2\" type=\"static\" programID=\"i2_prog\" offset=\"-90\">\n",
" <phase duration=\"40\" state=\"GGggGGG\"/>\n",
" <phase duration=\"25\" state=\"rrggrrr\"/>\n",
" <phase duration=\"71\" state=\"rrggrrr\"/>\n",
" <phase duration=\"34\" state=\"rrggGGG\"/>\n",
" <phase duration=\"40\" state=\"GGggGGG\"/>\n",
" <phase duration=\"25\" state=\"rrggrrr\"/>\n",
" <phase duration=\"71\" state=\"rrggrrr\"/>\n",
" <phase duration=\"34\" state=\"rrggGGG\"/>\n",
" <phase duration=\"40\" state=\"GGggGGG\"/>\n",
" <phase duration=\"25\" state=\"rrggrrr\"/>\n",
" <phase duration=\"71\" state=\"rrggrrr\"/>\n",
" <phase duration=\"34\" state=\"rrggGGG\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i3\" type=\"static\" programID=\"i3_prog\" offset=\"-50\">\n",
" <phase duration=\"38\" state=\"gGGGrgrrrrgGGGrgrrrr\"/>\n",
" <phase duration=\"39\" state=\"grrrGgrrrrgrrrGgrrrr\"/>\n",
" <phase duration=\"42\" state=\"grrrrgrrrrgrrrrgGGGG\"/>\n",
" <phase duration=\"21\" state=\"grrrrgGGGGgrrrrgrrrr\"/>\n",
" <phase duration=\"38\" state=\"gGGGrgrrrrgGGGrgrrrr\"/>\n",
" <phase duration=\"39\" state=\"grrrGgrrrrgrrrGgrrrr\"/>\n",
" <phase duration=\"42\" state=\"grrrrgrrrrgrrrrgGGGG\"/>\n",
" <phase duration=\"21\" state=\"grrrrgGGGGgrrrrgrrrr\"/>\n",
" <phase duration=\"38\" state=\"gGGGrgrrrrgGGGrgrrrr\"/>\n",
" <phase duration=\"39\" state=\"grrrGgrrrrgrrrGgrrrr\"/>\n",
" <phase duration=\"42\" state=\"grrrrgrrrrgrrrrgGGGG\"/>\n",
" <phase duration=\"21\" state=\"grrrrgGGGGgrrrrgrrrr\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i6\" type=\"static\" programID=\"i6_prog\" offset=\"-70\">\n",
" <phase duration=\"24\" state=\"grrrgGGGrgrrgrrr\"/>\n",
" <phase duration=\"19\" state=\"grrrgGGGrgrrgGGr\"/>\n",
" <phase duration=\"39\" state=\"grrrgrrrrgrrgGGG\"/>\n",
" <phase duration=\"65\" state=\"gGGGgrrrrgrrgrrr\"/>\n",
" <phase duration=\"23\" state=\"grrrgrrrrgGGgrrr\"/>\n",
" <phase duration=\"24\" state=\"grrrgGGGrgrrgrrr\"/>\n",
" <phase duration=\"19\" state=\"grrrgGGGrgrrgGGr\"/>\n",
" <phase duration=\"39\" state=\"grrrgrrrrgrrgGGG\"/>\n",
" <phase duration=\"65\" state=\"gGGGgrrrrgrrgrrr\"/>\n",
" <phase duration=\"23\" state=\"grrrgrrrrgGGgrrr\"/>\n",
" <phase duration=\"24\" state=\"grrrgGGGrgrrgrrr\"/>\n",
" <phase duration=\"19\" state=\"grrrgGGGrgrrgGGr\"/>\n",
" <phase duration=\"39\" state=\"grrrgrrrrgrrgGGG\"/>\n",
" <phase duration=\"65\" state=\"gGGGgrrrrgrrgrrr\"/>\n",
" <phase duration=\"23\" state=\"grrrgrrrrgGGgrrr\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i8\" type=\"static\" programID=\"i8_prog\" offset=\"-20\">\n",
" <phase duration=\"30\" state=\"grrrrrrrgGGGgrrr\"/>\n",
" <phase duration=\"36\" state=\"grrrrrrrgrrrgGGG\"/>\n",
" <phase duration=\"18\" state=\"grrrGGGrgrrrgGGr\"/>\n",
" <phase duration=\"58\" state=\"grrrGGGGgrrrgrrr\"/>\n",
" <phase duration=\"18\" state=\"gGGGrrrrgrrrgrrr\"/>\n",
" <phase duration=\"30\" state=\"grrrrrrrgGGGgrrr\"/>\n",
" <phase duration=\"36\" state=\"grrrrrrrgrrrgGGG\"/>\n",
" <phase duration=\"18\" state=\"grrrGGGrgrrrgGGr\"/>\n",
" <phase duration=\"58\" state=\"grrrGGGGgrrrgrrr\"/>\n",
" <phase duration=\"18\" state=\"gGGGrrrrgrrrgrrr\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"i9\" type=\"static\" programID=\"i9_prog\" offset=\"-40\">\n",
" <phase duration=\"46\" state=\"GGGG\"/>\n",
" <phase duration=\"114\" state=\"rrrr\"/>\n",
" <phase duration=\"46\" state=\"GGGG\"/>\n",
" <phase duration=\"114\" state=\"rrrr\"/>\n",
" <phase duration=\"46\" state=\"GGGG\"/>\n",
" <phase duration=\"113\" state=\"rrrr\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"u00\" type=\"static\" programID=\"u00_prog\" offset=\"-50\">\n",
" <phase duration=\"40\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"42\" state=\"ggggGgggg\"/>\n",
" <phase duration=\"29\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"26\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"33\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"40\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"42\" state=\"ggggGgggg\"/>\n",
" <phase duration=\"29\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"26\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"33\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"40\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"42\" state=\"ggggGgggg\"/>\n",
" <phase duration=\"29\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"26\" state=\"ggggrgggg\"/>\n",
" <phase duration=\"33\" state=\"ggggrgggg\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"u20\" type=\"static\" programID=\"u20_prog\" offset=\"-90\">\n",
" <phase duration=\"40\" state=\"ggrggg\"/>\n",
" <phase duration=\"25\" state=\"ggrggg\"/>\n",
" <phase duration=\"71\" state=\"ggGggg\"/>\n",
" <phase duration=\"34\" state=\"ggrggg\"/>\n",
" <phase duration=\"40\" state=\"ggrggg\"/>\n",
" <phase duration=\"25\" state=\"ggrggg\"/>\n",
" <phase duration=\"71\" state=\"ggGggg\"/>\n",
" <phase duration=\"34\" state=\"ggrggg\"/>\n",
" <phase duration=\"40\" state=\"ggrggg\"/>\n",
" <phase duration=\"25\" state=\"ggrggg\"/>\n",
" <phase duration=\"71\" state=\"ggGggg\"/>\n",
" <phase duration=\"34\" state=\"ggrggg\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"u30\" type=\"static\" programID=\"u30_prog\" offset=\"-50\">\n",
" <phase duration=\"38\" state=\"ggggrggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggGggg\"/>\n",
" <phase duration=\"38\" state=\"ggggrggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggGggg\"/>\n",
" <phase duration=\"38\" state=\"ggggrggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggGggg\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"u31\" type=\"static\" programID=\"u31_prog\" offset=\"-50\">\n",
" <phase duration=\"38\" state=\"ggggGggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggrggg\"/>\n",
" <phase duration=\"38\" state=\"ggggGggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggrggg\"/>\n",
" <phase duration=\"38\" state=\"ggggGggg\"/>\n",
" <phase duration=\"39\" state=\"ggggrggg\"/>\n",
" <phase duration=\"42\" state=\"ggggrggg\"/>\n",
" <phase duration=\"21\" state=\"ggggrggg\"/>\n",
" </tlLogic>\n",
" <tlLogic id=\"u32\" type=\"static\" programID=\"u32_prog\" offset=\"-50\">\n",
" <phase duration=\"38\" state=\"gggggggr\"/>\n",
" <phase duration=\"39\" state=\"gggggggr\"/>\n",
" <phase duration=\"42\" state=\"gggggggr\"/>\n",
" <phase duration=\"21\" state=\"gggggggr\"/>\n",
" <phase duration=\"38\" state=\"gggggggr\"/>\n",
" <phase duration=\"39\" state=\"gggggggr\"/>\n",
" <phase duration=\"42\" state=\"gggggggr\"/>\n",
" <phase duration=\"21\" state=\"gggggggr\"/>\n",
" <phase duration=\"38\" state=\"gggggggr\"/>\n",
" <phase duration=\"39\" state=\"gggggggr\"/>\n",
" <phase duration=\"42\" state=\"gggggggr\"/>\n",
" <phase duration=\"21\" state=\"gggggggr\"/>\n",
" </tlLogic>\n",
"</additional>\n"
]
}
],
"source": [
"offsets = {}\n",
"asigtable_list = []\n",
"for node_id in sorted(sigtable.node_id.unique()):\n",
" asigtable = sigtable.copy()[sigtable.node_id==node_id]\n",
" df = asigtable.copy()\n",
" lsbs = asigtable[asigtable['start_unix'] < sim_start]['start_unix'].max() # the last start_unix before sim_start\n",
" offsets[node_id] = lsbs - sim_start\n",
" asigtable = asigtable[(asigtable['start_unix'] < sim_end) & (asigtable['start_unix'] >= lsbs)]\n",
" asigtable_list.append(asigtable)\n",
"sigtable = pd.concat(asigtable_list)\n",
"\n",
"strings = ['<additional>\\n']\n",
"for node_id, group in sigtable.groupby('node_id'):\n",
" strings.append(f' <tlLogic id=\"{node_id}\" type=\"static\" programID=\"{node_id}_prog\" offset=\"{offsets[node_id]}\">\\n')\n",
" for i, row in group.iterrows():\n",
" duration = row.duration\n",
" state = row.state\n",
" strings.append(f' <phase duration=\"{duration}\" state=\"{state}\"/>\\n')\n",
" strings.append(' </tlLogic>\\n')\n",
"strings.append('</additional>')\n",
"strings = ''.join(strings)\n",
"# 저장\n",
"path_output = '../../Data/networks/sn.add.xml'\n",
"with open(path_output, 'w') as f:\n",
" f.write(strings)\n",
"\n",
"print(strings)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "rts",
"language": "python",
"name": "python3"
},
"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
}