Utiliser la commande python run.py
et spécifier l'agent à lancer sur l'environnement :
Les différents agents sont répertoriés dans implemented_agents
Ex :
python run.py --agent=sarsa
Lancera l'agent sarsa sur l'environnement
Ils ne sont pas très fonctionnels sur l'environnement,
-
Le premier se trouve dans
run_deep_from_scratch.py
et se lance en en lançant son code. Il s'agit d'un DQN sur l'environnement discret qui travaille sur les états qui sont représentés en one-hot et renvoie la Q-Value estimé de chaque action. -
Le deuxième se lance grâce au fichier
run_deep.py
qui peut modifier directement l'architecture de l'agent.
On s'est inspiré des environnements utilisant gym, notre environnement est très modulable et se trouve dans le dossier env
Les actions sont composées d'un nombre de réparation préventive et d'un nombre de réparation corrective. Ce nombre de réparation et ensuite traité par le fichier environnement et les réparations sont réparties sur les différentes éoliennes.
Les Etats sont représentés par une liste d'éoliennes (item), chaque éolienne est caractérisée par son état de dégradation (wear) et par d'autres variables de dégradations. Dans notre cas d'études ces autres variables, tel que le treshold à partir duquel l'éolienne est H.S. ou la fonction de dégradation de l'éolienne, sont fixes et ne caractérisent donc pas les item mais l'environnement.
Les différentes éxécutions possibles peuvent être sélectionnées en modifiant le string à l'origine de création de l'environnement env = Environnement.init("3dadvanced")
, dans ce string, on peut choisir le nombre d'éoliennes : le premier chiffre, si on est en discret ou continu : "c" pour continu ou "d" pour discret et enfin, on peut utiliser une des 2 fonction de dégradation implémentées. Si on laisse "5d" par exemple, on utilisera la fonction de dégradation de base en discret avec 5 éoliennes. EN mettant "advanced" on choisit la fonction de dégradation plus réaliste avec une dégradation plus lente
Ces fonctions sont implémentées dans wearing_functions.py
et des nouvelles peuvent être ajoutées dedans en les reliant à un mot dans execution.py
Il contient toutes les fonctions nécessaires pour lancer un agent de RL :
- reset : à appeler avant de lancer l'agent où pour repartir de l'état initial
- step : pour, avec une action, passer d'un état à un autre. L'état est une propriété de l'environnement, si on veut se déplacer d'états en états dans un sens autre qu'en fonction du temps, il faudra faire des copies de l'objet environnement.
- render : permet d'enrigstrer une moyenne des reward pendant une éxécution normale. On utilise wandb pour visualiser plus facilement les courbes.
Le fichier agent contient plusieurs implémentation d'agents, agent.py
donne l'architecture que doit avoir un agent pour pouvoir être lancé par la fonction run.py
.
L'agent réflexe est le premier agent baseline qu'on a implémenté pour pouvoir comparer les résultats des agents de RL. Cet agent est implémenté en essayant de copier le comportement d'un humain prenant des décisions. L'objectif premier était donc de dépasser cet agent là. Il prend des actions quand une éolienne est très dégradée, pour la réparée.
3 agents de RL non deep on été implémenté, afin de comparer leurs performances sur l'environnement au début du projet.
- L'agent SARSA est un agent online, qui se comporte avec une politique epsilon greedy et apprend avec ses mouvements donc la même politique
- L'agent SARSA expected est un agent offline, qui se comporte avec la politique epsilon greedy et apprend avec cette même politique
- L'agent QLearning est un agent offline, qui se comporte avec la politique epsilon greedy et apprend avec la politique greedy
L'agent de QLearning est le plus performant dans notre cas d'étude
L'agent solver marche à base de Markov Decision Process, il se trouve dans le fichier solver_mdp. On peut en extraire sa politique (liste des actions optimales pour chaque états). Il marche aussi bien pour un délais de prise en compte des actions fixé.
Le Rapport Final
se trouve dans le dossier Documentation et explique plus en détail le code et les conclusions du projet
[1] Agent DQN en pytorch : https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
[2] https://automatants.cs-campus.fr/formations : Slides de la formation “Reinforcement Learning – DQN” de 2021-2022
[3] TP dans le cadre du camp “ML4Good” de EffiSciences : https://www.effisciences.org/
[4] : Reinforcement Learning Course by David Silver (deepmind) https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ&index=1