신호생성 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.
 
 

443 lines
13 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"from datetime import datetime\n",
"os.listdir()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"now = int(datetime.now().timestamp())\n",
"oml = int(datetime.now().timestamp()) + 60 # one minute later"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>start_unix</th>\n",
" <th>node_id</th>\n",
" <th>dphase</th>\n",
" <th>dura</th>\n",
" <th>signal</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>1</td>\n",
" <td>32</td>\n",
" <td>gGGgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>gyygrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>4</td>\n",
" <td>34</td>\n",
" <td>grrgGGGgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>grrgyyygrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>grrgrrrgGGgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>grrgrrrgyygrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>9</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>10</td>\n",
" <td>29</td>\n",
" <td>grrgrrrgrrgGGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>11</td>\n",
" <td>4</td>\n",
" <td>grrgrrrgrrgyyy</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_unix node_id dphase dura signal\n",
"0 1704384400 i0 0 1 grrgrrrgrrgrrr\n",
"1 1704384400 i0 1 32 gGGgrrrgrrgrrr\n",
"2 1704384400 i0 2 4 gyygrrrgrrgrrr\n",
"3 1704384400 i0 3 1 grrgrrrgrrgrrr\n",
"4 1704384400 i0 4 34 grrgGGGgrrgrrr\n",
"5 1704384400 i0 5 4 grrgyyygrrgrrr\n",
"6 1704384400 i0 6 1 grrgrrrgrrgrrr\n",
"7 1704384400 i0 7 25 grrgrrrgGGgrrr\n",
"8 1704384400 i0 8 4 grrgrrrgyygrrr\n",
"9 1704384400 i0 9 1 grrgrrrgrrgrrr\n",
"10 1704384400 i0 10 29 grrgrrrgrrgGGG\n",
"11 1704384400 i0 11 4 grrgrrrgrrgyyy"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"one_cycle"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"now = int(datetime.now().timestamp()) // 10 * 10\n",
"oml = now + 60 # one minute later\n",
"one_cycle = pd.read_csv('one_cycle.csv')\n",
"one_cycle['start_unix'] = oml\n",
"cycle = one_cycle.dura.sum()\n",
"# display(one_cycle)\n",
"cur_time = one_cycle.start_unix.unique()[0]\n",
"sev_cycle = [] # several cycles\n",
"for i in range(5):\n",
" cur_cycle = one_cycle.copy()\n",
" cur_time = cur_time + cycle\n",
" cur_cycle['start_unix'] = cur_time\n",
" sev_cycle.append(cur_cycle)\n",
"sev_cycle = pd.concat(sev_cycle).reset_index(drop=True)\n",
"sev_cycle.to_csv(\"sev_cycle.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>start_unix</th>\n",
" <th>node_id</th>\n",
" <th>dphase</th>\n",
" <th>dura</th>\n",
" <th>signal</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>1</td>\n",
" <td>32</td>\n",
" <td>gGGgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>gyygrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>4</td>\n",
" <td>34</td>\n",
" <td>grrgGGGgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>grrgyyygrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>grrgrrrgGGgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>grrgrrrgyygrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>9</td>\n",
" <td>1</td>\n",
" <td>grrgrrrgrrgrrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>10</td>\n",
" <td>29</td>\n",
" <td>grrgrrrgrrgGGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1704384400</td>\n",
" <td>i0</td>\n",
" <td>11</td>\n",
" <td>4</td>\n",
" <td>grrgrrrgrrgyyy</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_unix node_id dphase dura signal\n",
"0 1704384400 i0 0 1 grrgrrrgrrgrrr\n",
"1 1704384400 i0 1 32 gGGgrrrgrrgrrr\n",
"2 1704384400 i0 2 4 gyygrrrgrrgrrr\n",
"3 1704384400 i0 3 1 grrgrrrgrrgrrr\n",
"4 1704384400 i0 4 34 grrgGGGgrrgrrr\n",
"5 1704384400 i0 5 4 grrgyyygrrgrrr\n",
"6 1704384400 i0 6 1 grrgrrrgrrgrrr\n",
"7 1704384400 i0 7 25 grrgrrrgGGgrrr\n",
"8 1704384400 i0 8 4 grrgrrrgyygrrr\n",
"9 1704384400 i0 9 1 grrgrrrgrrgrrr\n",
"10 1704384400 i0 10 29 grrgrrrgrrgGGG\n",
"11 1704384400 i0 11 4 grrgrrrgrrgyyy"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"from xml.etree import ElementTree as ET\n",
"\n",
"one_cycle = pd.read_csv('one_cycle.csv')\n",
"display(one_cycle)\n",
"\n",
"net_xml_path = 'example.net.xml'\n",
"tree = ET.parse(net_xml_path)\n",
"root = tree.getroot()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# Function to create a traffic light phase element\n",
"def create_phase_element(duration, state):\n",
" phase_elem = ET.Element(\"phase\")\n",
" phase_elem.set(\"duration\", str(duration))\n",
" phase_elem.set(\"state\", state)\n",
" return phase_elem\n",
"\n",
"# Create the traffic light logic container\n",
"tlLogic = ET.Element(\"tlLogic\")\n",
"tlLogic.set(\"id\", \"i0\")\n",
"tlLogic.set(\"type\", \"static\")\n",
"tlLogic.set(\"programID\", \"1\")\n",
"tlLogic.set(\"offset\", \"0\")\n",
"\n",
"# Add phases from the CSV data to the traffic light logic\n",
"for index, row in one_cycle.iterrows():\n",
" phase_elem = create_phase_element(row['dura'], row['signal'])\n",
" tlLogic.append(phase_elem)\n",
"\n",
"# Add the traffic light logic to the junction element if not already present\n",
"# First, check if a tlLogic is already defined for junction i0 and remove it\n",
"for tl in root.findall(\"./tlLogic[@id='i0']\"):\n",
" root.remove(tl)\n",
"\n",
"# Now, insert the new traffic light logic\n",
"root.insert(0, tlLogic)\n",
"\n",
"# Write the modified XML back to a new file\n",
"modified_net_xml_path = 'modified_example.net.xml'\n",
"tree.write(modified_net_xml_path)\n",
"\n",
"modified_net_xml_path # Return the path of the modified net.xml file for download"
]
}
],
"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
}