Dans les situations de catastrophes / phénomènes naturels, des pannes de courant peuvent survenir. Pour lutter contre cela, les conducteurs EV (véhicules électriques) peuvent utiliser leurs véhicules comme batteries pour les clients / clients. Pour simuler la difficulté de ce défi d'atteindre autant de clients que possible jusqu'à la fin de la période d'écoulement, un environnement RL a été créé. Cet environnement comprend des scénarios aléatoires basés sur la taille du réseau de nœuds, la quantité de maisons (ne peut pas être plus grande que la taille du nœud), les données d'occasion et les modèles de logement pour simuler une réponse d'occasion dans une question de haut niveau.

Exemple d'un agent aléatoire en action.
La charge représente la puissance nécessaire pour le moment à partir du nœud.
La charge actuelle représente la puissance de l'agent (ou de la voiture).
Les valeurs sur les bords représentent les kilomètres du coût des bords à parcourir.
Le nœud bleu représente les tampons. Le nœud vert représente les maisons. Le nœud gris représente le nœud Blackout Out.
Plus de détails peuvent être trouvés dans l'action et la section Space State.
Cloner le projet
git clone https://github.com/Natemen96/ECEMasterProject.gitAller au répertoire du projet
cd ECEMasterProject/RL python main.py AVERTISSEMENT: Il s'agit d'une grande installation (~ 2 Go) et prendra environ 30 minutes selon la vitesse Internet. Selon votre configuration, vous pouvez trouver plus facile d'installer le package vous-même. La liste se trouve dans le dossier conda_env . Voir 'conda_env / rl_window.yml' pour la liste des packages les plus à jour. Fonctionne mieux sur Windows.
Pour une installation facile, en utilisant un conda d'abord, assurez-vous que vous avez installé conda.
Une fois que conda est installé, faites ce qui suit pour configurer l'environnement
conda env create -f conda_env/rl_window.yml --name rl_env # or any name you prefer
conda activate rl_env # verify it work Assurez-vous d'exécuter le programme dans le conda Env.
Les données sur le logement peuvent être téléchargées à partir de Pecan Street / DataPort
Commencez à "Home" (un nœud) voyager à chaque emplacement en échange de puissance (ressource principale pour EV), déchargez la puissance en échange de récompense, retournez à la maison en échange de l'énergie. L'agent peut restaurer l'énergie à "Home" et gagner plus de récompense en fonction de la puissance qu'il a récupérée. Plus il se rétablit de puissance, plus il est récompensé.
Une fois la puissance restaurée dans un nœud avec une station de charge de puissance, l'agent peut également y restaurer l'énergie. Certains nœuds seront vides en fonction des paramètres.
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)]Récompense donnée pour le déchargement, la recharge. La diversité de la restauration du pouvoir entraînera plus de récompenses. Récompense perdue pour manquer d'énergie. L'épisode est terminé lorsque EV est hors d'énergie ou que le réseau est complètement alimenté.
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 Chaque nœud a été conçu pour être basé sur un ensemble de données de maison. Certaines maisons à énergie solaire auront besoin de moins de puissance des véhicules électriques par rapport aux maisons non solaires. Le nœud du coût de la maison peut être dérivé des données de logement.
Pourcentage de Blackout basée sur les données de la panne de courant du Texas, ainsi que des changements par jour.
Au minimum, un Q-Learning a été utilisé pour trouver les meilleures solutions.
Peut être mis à l'échelle à plusieurs EV (Marl serait nécessaire) et un réseau plus grand. Marl n'a pas été entièrement testé et est probablement très buggy.
Au cours d'un essai de 50k EPS, l'agent intelligent qui était en charge avec les QTables avait une amélioration de 263,13% par rapport à un agent aléatoire (qui fait des actions aléatoires).
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 DataCertains bords peuvent être bloqués et restaurés plus tard au fil des jours (simulez pour les catastrophes naturelles)
Ajouter des tests
DRL et techniques d'optimisation classiques
Débogue pour marl
Convertir en environnement Openai
Appris davantage sur la fabrication de modèles DL / ML.
En savoir plus sur l'analyse des données de l'exploration des données et des résultats de la formation DL / ML.
J'ai appris sur NetworkX et ses capacités de théorie des graphiques liées aux projets.
Appris davantage sur la création d'environnements et d'agents d'apprentissage du renforcement.
En savoir plus sur le grattage des données car j'avais besoin de supprimer les données de la panne de courant pendant la crise de la puissance du Texas 2021
A appris à faire un GIF en utilisant des images dans Python.
Merci au professeur Qin de mon Alma Mater, Purdue University pour son soutien incroyable et partageant son expertise pour ce projet.
Merci à DataPort et à Pecan Street d'avoir fourni des données de logement pour créer des modèles.
Merci à Matt Leacock le créateur du jeu de société, Pandemic d'avoir inspiré cet environnement d'apprentissage de renforcement.