Em situações de desastres/fenômenos naturais, podem ocorrer apagões. Para combater isso, os motoristas EV (veículos elétricos) podem usar seus veículos como baterias para clientes/ clientes. Para simular a dificuldade desse desafio de chegar ao maior número possível de clientes até que o período de blecaute termine, um ambiente de RL foi criado. Esse ambiente apresenta cenários aleatórios com base no tamanho da rede de nós, quantidade das casas (não pode ser maior que o tamanho do nó), dados de blecaute e modelos de moradia para simular uma resposta de blecaute em uma matéria de alto nível.

Exemplo de um agente aleatório em ação.
A carga representa a energia necessária no momento do nó.
A carga atual representa o poder que o agente (ou carro) possui.
Os valores nas bordas representam as milhas do custo da borda para passar.
O nó azul representa buffers. O nó verde representa casas. O nó cinza representa o nó Blackout Out.
Mais detalhes podem ser encontrados na seção Ação e Espaço de Estado.
Clone o projeto
git clone https://github.com/Natemen96/ECEMasterProject.gitVá para o diretório do projeto
cd ECEMasterProject/RL python main.py Aviso: Esta é uma instalação grande (~ 2 GB) e levará aproximadamente 30 minutos, dependendo da velocidade da Internet. Dependendo da sua configuração, você pode achar mais fácil instalar o pacote. A lista pode ser encontrada na pasta conda_env . Consulte 'CONDA_ENV/RL_Window.yml' para obter a lista de pacotes mais atualizada. Funciona melhor no Windows.
Para facilitar a instalação, usando um CONDA primeiro, verifique se você está instalado.
Após a instalação do condições, faça o seguinte para configurar o ambiente
conda env create -f conda_env/rl_window.yml --name rl_env # or any name you prefer
conda activate rl_env # verify it work Certifique -se de executar o programa dentro do CONDA ENV.
Os dados da habitação podem ser baixados da Pecan Street/Dataport
Comece em "Home" (um nó) Viajar para cada local em troca de energia (recurso principal para VE), descarregue o poder em troca de recompensa, viaje de volta para casa em troca de energia. O agente pode restaurar a energia em "Home" e ganhar mais recompensa, dependendo de quanta energia ele voltou. Quanto mais poder ele restaura, mais é recompensado.
Depois que a energia é restaurada em um nó com uma estação de carregamento de energia, o agente também pode restaurar a energia lá. Alguns nós estarão vazios, dependendo dos 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 para descarregar, recarregar. A diversidade de restauração de poder resultará em mais recompensa. Recompensa perdida por ficar sem energia. O episódio acabou quando o EV está fora de energia ou a rede é 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 nós foi projetado para serem baseados em um conjunto de dados da casa. Algumas casas com energia solar precisarão de menos energia dos VEs em comparação com casas não solares. O custo do nó da casa pode ser derivado dos dados da habitação.
Porcentagem de blecaute com base nos dados do Blackout do Texas, bem como na mudança por dia.
No mínimo, um q-learning foi usado para encontrar as melhores soluções.
Pode ser escalado para vários EV (Marl seria necessário), e uma rede maior. Marl não foi totalmente testado e provavelmente é muito buggy.
Durante uma execução de teste de 50k EPS, o agente inteligente que foi o suporte ao QTables teve 263,13% de melhoria em comparação com um agente aleatório (que faz ações aleatórias).
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 DataAlgumas bordas podem ser bloqueadas e restauradas mais tarde, à medida que os dias passam (simule para desastres naturais)
Adicione testes
Técnicas de otimização DRL e clássica
Debug for Marl
Converter para o ambiente OpenAi
Aprendi mais sobre como fazer modelos DL/ML.
Aprendi mais sobre a análise de dados explorando dados e resultados do treinamento em DL/ML.
Aprendeu sobre o NetworkX e seus recursos para a teoria dos gráficos relacionados para projetos.
Aprendi mais sobre como fazer ambientes e agentes de aprendizado de reforço.
Aprendi mais sobre a raspagem de dados como eu precisava descartar dados de blecaute durante a crise de 2021 Texas Power
Aprendeu a fazer um GIF usando imagens no Python.
Obrigado ao professor Qin da minha Alma Mater, Purdue University por seu incrível apoio e compartilhando sua experiência para este projeto.
Obrigado à Dataport e Pecan Street por fornecer dados habitacionais para criar modelos.
Obrigado a Matt Leacock, criador do jogo de tabuleiro, Pandemic por inspirar esse ambiente de aprendizado de reforço.