# Bachelor - Todo list
## Todo - Architecture
- [x] Créer un container avec interface + serveur dota
- [x] Lancer auto install de dota dans container
- [x] Lancer auto app dans container quand install finit
- [x] Lancer connexion socket ia-interface depuis env (pas depuis main python)
- [x] Pouvoir restart serv dota via gRPC (depuis python)
- [x] Reset certaine partie interface (socket, etc..) ?
- [x] Stop/start serv dota depuis interface
* kill dota, close all socket, reopen socket, start dota
- [x] Pouvoir lancer plusieurs instance de l'environnement
* déploiement du container "à la main" sur toutes les machines
* renseigner les ip/port dans le script python
- [x] passage des ip/port au env (via env_args, vec_env_args ?)
- [x] lancement socket en utilisant ip/port
- [x] **lancement docker depuis dota env (empeche 2+ ia sur meme env, à réfléchir)**
- [x] Changer architecture "client" (ia python)
- [x] Faire en sorte de tout lancer depuis env (connexion socket, etc..).
* /!\ Lancer le serveur dota et l'interface depuis l'env dota empeche d'avoir plus d'une ia sur le meme environnement /!\
- [x] Ne plus utiliser Globalvar (passer directement par gRPC) ?
- [x] Changer gamestatethread ?
- [x] Re repenser le système de thread. Il existe probablement plus simple.
## Todo - IA
- [x] Changer action space
* Voir pour space Tuples, utile quand space discrete+continuous
* Problème de gen de num (cause : Gaussian distribution initially centered at 0)
* https://twitter.com/araffin2/status/1111983313676312576
* https://stable-baselines.readthedocs.io/en/master/guide/rl_tips.html
- [x] Ajouter action
- [x] Attaque ciblé
- [x] trouver un mécanisme pour action space (nombre pour nb target)
- [x] trouver un moyen de recup une entite (dota api)
- [x] Ne rien faire (no operation). Utile dans le cas ou la cible selectionné n'existe pas (ou autre)
- [x] Changer reset
- [x] Restart le serveur dota
- [x] Changer la façon de reset les valeurs du bot. Recup data via socket ? (pos, vie, gold, etc..).
* Premiere data recup ne sont pas les data initiale (peut etre que encore en chargement? c'est toujours les meme en tout cas)
- [x] Implémenter “done” dans step
- [x] ~~Résoudre probleme action space (valeur généré trop "faible", peut etre normal)~~ cf. Changer action space, probablement le prob
- [x] Voir pour dota frame data
- [x] Comment récup gold (net_worth ?)
- [x] Trouver un autre moyen de limiter nb action par seconde ? (mieux que sleep)
- [x] bloquer au lancement tant que pas connecté au serv (ne pas spam erreur)
- [x] Changer valeur fonction get_ai_values et get_element_values (parametre 0 a chaque fois)
- [x] RuntimeWarning: Unexpected end-group tag: Not all data was converted self.game_state.ParseFromString(binData)
## Todo - Interface
- [x] Revoir communication interface-ia (data "corrompue")
- [x] Resoudre problème "action reçu, mais pas executé" qui arrive 1/10 (action 1)
- [ ] trouver un moyen de reproduire le bug
- [x] ~~Faire en sorte de reset socket si connexion lost (pour ne pas avoir a reset interface et permettre autre client)~~ pas besoin, autodeploy
## Todo - Général
- [ ] Documentation
- [ ] Poster
- [ ] Refaire makefile
- [ ] Refaire readme
- [ ] Ajouter des messages d'erreur (ex : "aucun environnement dota trouvé, veuillez...")
- [ ] Effacer les branches inutile a la fin
- [x] Réflechir à un moyen de deploy env sur plusieurs machine
- [x] faire en sorte de deploy en utilisant clef ssh
- [ ] Voir pour faire du pre-training ?
* https://stable-baselines.readthedocs.io/en/master/guide/pretrain.html
- [ ] Créer un poste sur le git de stable baseline pour envoyer divers args a chaque env
- [x] Trouver un moyen d'installer dota sans avoir besoin d'interagir avec (requiert un compte steam et un token)
- [ ] Changer la methode make_vec_env_custom sur main (trouver un moyen de faire autrement ?)
- [ ] Norme de nommage et tout renommer correctement
# Doc
* https://cdn.openai.com/dota-2.pdf
* https://stable-baselines.readthedocs.io/en/master/modules/ppo2.html
* https://medium.com/analytics-vidhya/understanding-openai-baseline-source-code-and-making-it-do-self-play-part-1-9f30085a8c16
* https://stackoverflow.com/questions/45068568/how-to-create-a-new-gym-environment-in-openai
* https://grpc.io/docs/tutorials/basic/python/#client
* https://github.com/alibaba/gym-starcraft
* https://github.com/ppaquette/gym-super-mario
* https://github.com/deepmind/pysc2