En situaciones de desastres/fenómenos naturales, pueden ocurrir apagones. Para combatir esto, los conductores EV (vehículos eléctricos) pueden usar sus vehículos como baterías para clientes/ clientes. Para simular la dificultad de este desafío de llegar a la mayor cantidad de clientes posible hasta que termine el período de apagón, se creó un entorno RL. Este entorno presenta escenarios aleatorios basados en el tamaño de la red de nodos, la cantidad de las casas (no puede ser más grande que el tamaño del nodo), los datos de apagón y los modelos de vivienda para simular una respuesta de apagón en una materia de alto nivel.

Ejemplo de un agente aleatorio en acción.
La carga representa la potencia necesaria en el momento desde el nodo.
La carga actual representa la potencia que tiene el agente (o automóvil).
Los valores en los bordes representan las millas del costo de borde por pasar.
El nodo azul representa buffers. El nodo verde representa casas. El nodo gris representa el nodo apagado.
Se pueden encontrar más detalles en la sección Acción y espacio estatal.
Clon el proyecto
git clone https://github.com/Natemen96/ECEMasterProject.gitIr al directorio del proyecto
cd ECEMasterProject/RL python main.py ADVERTENCIA: Esta es una gran instalación (~ 2GB) y tomará aproximadamente 30 minutos dependiendo de la velocidad de Internet. Dependiendo de su configuración, es posible que le resulte más fácil instalar el paquete usted mismo. La lista se puede encontrar en la carpeta conda_env . Consulte 'conda_env/rl_window.yml' para la lista de paquetes más actualizados. Funciona mejor en Windows.
Para facilitar la instalación, utilizando una conda primero asegúrese de haber instalado Conda.
Después de que se instale Conda, haga lo siguiente para configurar el entorno
conda env create -f conda_env/rl_window.yml --name rl_env # or any name you prefer
conda activate rl_env # verify it work Asegúrese de ejecutar el programa dentro de Conda Env.
Los datos de la vivienda se pueden descargar desde Pecan Street/Dataport
Comience en "Inicio" (un nodo) Viaje a cada ubicación a cambio de energía (recurso principal para EV), descargue la energía a cambio de recompensa, viaje de regreso a casa a cambio de energía. El agente puede restaurar el poder en "Home" y ganar más recompensa dependiendo de la cantidad de poder que recuperó. Cuanto más poder restaura por sí mismo, más recompensado.
Una vez que la energía se restaura en un nodo con una estación de carga de potencia, el agente también puede restaurar la energía allí. Algunos nodos estarán vacíos según los parámetros.
graph_env: Randomly generated a fully connected graph n nodes
Args:
n (int, optional): [number of nodes]. Defaults to 5.
numofhome (int, optional): [number of homes for agent starting
point]. Defaults to 1.
numofblackout (int, optional): [number of houses with blackout].
Defaults to 1.
numofblackoutws (int, optional): [number of blackout houses with
solarpower]. Defaults to 0.
numofchargingstation (int, optional): [number of charging
station]. Defaults to 0.
max_actions (int, optional): [max number of action can be done
times 7. By default 3 (7) = 21]. Defaults to 3.
blackout_str (str, optional): [Reads Blackout data from npy
file. Blackout data from the 2021 Texas Power Crisis, a file for
each country]. Defaults to 'Brazoria'.
agents (list, optional): [Agent objects]. Defaults to [None].
nonsolarhouse_data_paths (list, optional): [Path for npy file
with nonsolar data info. Added to a node per path.]. Defaults to
[None].
solarhouse_data_paths (list, optional): [Path for npy file with
solarhouse data info. Added to a node per path.]. Defaults to
[None].
data_sample (int, optional): [how many data sample it take from
data in paths, samples taken evenly throughout data. By default
(0/6. 1/6 ... 6/6 0/6 ...) sample]. Defaults to 6.BasicAgent: Basic Agent that act as skeleton for other agent. Won't work by itself.
Args:
car ([dict]): [car information in the form of a python
dictionary. Required dict information: model, make, year,
avg_energy_consumption(kWh/mile), battery_capacity(kWh)]SmartQLAgent: Smart Agent that uses Qtable to make decisions
Args:
car ([dict]): [car information in the form of a python
dictionary. Required dict information: model, make, year,
avg_energy_consumption(kWh/mile), battery_capacity(kWh)]
sample_rate (int, optional): [decides how often a sample of the
qtable is taken. If left to default it's every 1/100 of total ep]
. Defaults to 100.
qtabletraining (bool, optional): [Flag for turning qtable
training on]. Defaults to True.
quiet (bool, optional): [Flag for turning data collection on].
Defaults to True.RandomDataAgent: Used for data collection of random agent. Doesn't
use Observation.
Args:
car ([dict]): [car information in the form of a python
dictionary. Required dict information: model, make, year,
avg_energy_consumption(kWh/mile), battery_capacity(kWh)]Recompensa dada por descargar, recargar. La diversidad de la restauración de energía dará como resultado una mayor recompensa. Recompensa perdida por quedarse sin energía. El episodio ha terminado cuando EV está fuera de energía o red está completamente alimentado.
Each Agent will have 24 actions per ep by default.
e+2 Actions:
e - Move (at cost) to Node if possible
1 - Unload (at cost)
1 - Recharge (no cost, expect an action)
2 * n + 6 * n + 300 * n + c States:
n - Statuses of Each Node
Key - Assignment
0 - Buffer (Blue)
1 - Blackout (Darkgrey)
2 - Blackout with Solar (Lightgrey)
3 - Powered (Blue)
4 - Charging Station (Yellow)
5 - Home (Green)
n - Cost of each edge
n - Is the path reachable or not?
0 - No
1 - Yes
c - Charge State (400 possible values by default)
where n is the number of nodes states, e is the number of edges, and c number of is Charge states Cada nodos fue diseñado para basarse en un conjunto de datos de la casa. Algunas casas con energía solar necesitarán menos potencia de los EV en comparación con las casas no con alimentación solar. El costo del nodo de la casa se puede derivar de los datos de la vivienda.
Porcentaje de apagón basado en datos de apagón de Texas, así como cambios por día.
Como mínimo, se usó un Q-Learning para encontrar las mejores soluciones.
Se puede escalar a múltiples EV (se necesitaría marl), y una red más grande. Marl no ha sido completamente probado y probablemente sea muy erróneo.
Durante una prueba de 50k EPS, el agente inteligente que fue soporte con Qtables tuvo una mejora del 263.13% en comparación con un agente aleatorio (que realiza acciones aleatorias).
scripts/Data/TexasBlackout.csv
-csv file of data collected from https://poweroutage.us/area/state/texas during the 2021 Texas Power Crisis with the following
- Metrics: ID,County,Customers Tracked,Customers Out,Outage %,DateTime
ECEMasterProject/RL/Data/
Avg_House_0/
- npy files of average daily power per every 15 mins of various houses provide by Dataport
Avg_House_1/
- npy files of next day regression of Avg_House_0 per house
Avg_House_n/
- npy files of concatenation of Avg_House_0 adn Avg_House_1 per houses
County/
- npy files of Texas County that were effect the most during the 2021 Texas Power Crisis
RL/agent/Sim_Data
- csv file result from various RL training, only stored reward.
RL/agent/agent_jsons/
-various json file of EV information
-Metrics: model, make, year, avg_energy_consumption(kWh/mile), battery_capacity(kWh), source
models/
KM/
-Classifier models trained using Time Series K Means stored in h5
LSTM/
-Old LSTM regression model trained on one house stored in h5
LSTM_nonsolar/
-LSTM regression model trained on non solar data stored in h5
LSTM_solar/
-LSTM regression model trained on solar data stored in h5
Qtables/
-Qtables from RL training stored in h5
notebooks/
analysis_c0.ipynb
-Analysis of classifier and regression model on solar houses data
analysis_c1.ipynb
-Analysis of classifier and regression model on nonsolar houses data
cluster.ipynb
-Creation and Analysis of classifier that can distinguish between solar and nonsolar data
compare_qtable_analyis.ipynb
-Comparing Qtable Smart Agent with Random Agent Baseline
D_LSTM_HousingData.ipynb
-Creation and analysis of regression on avg housing data where the original data sample occurs every 15 mins -> 98 sample per day
Dp1_analysis.ipynb
-Creation and analysis of regression on one house
EveryNyHouseAvg.ipynb
-Creation and analysis of regression on all house samples with model trained on one house (house 1)
LSTM_cluster0.ipynb
-Creation and analysis of regression on one house using most of the solar housing data
LSTM_cluster1.ipynb
-Creation and analysis of regression on one house using most of the nonsolar housing data
qtable_analyis_4_19.ipynb
-Analysis of Smart Agents performance
qtable_analyis_4_22.ipynb
-Analysis of Smart Agents performance
qtable_analyis.ipynb
-Analysis of Smart Agents performance
random_agent_analyis.ipynb
-Analysis of Random Agents performance
Texas_Blackout.ipynb
-Analysis of recorded Blackout DataAlgunos bordes pueden bloquearse y restaurarse más tarde a medida que pasan los días (simule para desastres naturales)
Agregar prueba
DRL y técnicas de optimización clásica
Depurar para margas
Convertir al entorno OpenAI
Aprendí más sobre cómo hacer modelos DL/ML.
Aprendió más sobre el análisis de datos al explorar datos y resultados de la capacitación DL/ML.
Aprendí sobre NetworkX y sus capacidades para la teoría de gráficos relacionadas para proyectos.
Aprendí más sobre cómo hacer entornos y agentes de aprendizaje de refuerzo.
Aprendí más sobre el raspado de datos, ya que necesitaba desechar los datos de apagón durante la crisis de potencia de Texas 2021
Aprendí a hacer un GIF usando imágenes en Python.
Gracias al profesor Qin de mi alma mater, Universidad de Purdue por su increíble apoyo y compartir su experiencia para este proyecto.
Gracias a Dataport y Pecan Street por proporcionar datos de vivienda para construir modelos.
Gracias a Matt Leaacock, el creador del juego de mesa, Pandemic por inspirar este entorno de aprendizaje de refuerzo.