# Les travaux de Max pendant les Open Ateliers Version Longue 2020 ## Création d'un automate cellulaire [cf automate cellulaire sur wikipedia](https://fr.wikipedia.org/wiki/Automate_cellulaire) Très intéressé depuis quelques temps par le jeu de la vie, les Progrem, et depuis peu par [la théorie des jeux](https://fr.wikipedia.org/wiki/Th%C3%A9orie_des_jeux). J'ai l'envie de créer des Progrem qui tourne autour du jeu de la vie ou d'autres automates cellulaire. Pour défricher le sujet, je prévois de créer un automate cellulaire qui simule en 2 dimensions l'affrontement de plusieurs stratégies et l'expérimentation de règles de survie. ### Lundi 20 Juillet #### Quelques idées * Chaque cellule est un agent * La version itéré du [dilèmme du prisonnier](https://fr.wikipedia.org/wiki/Dilemme_du_prisonnier) : les agents ont un interet à coopérer * Un agent dispose d'une stratégie propre (donnant-donnant, sondeur naif, sondeur repentant, déserteur, ...) gentille/méchante ; pardoneuse/rancunière ; envieuse ; vengence mutuelle ; per_CCD ? ; lunatique ; graduelle ; majoritaire gentille * Une strategie joue contre/avec ses voisins * Si il n'y a pas de voisin, on utilise une stratégie "bete" : les réponses sont tirés aléatoirement * Si une stratégie est adaptée, elle se multiplie * Si une stratégie est inadaptée, elle meurt * L'affrontement entre les agents est régie par l'environnement * Les critères d'adaptation (survie, mort, prolifération) sont régis par l'environnement #### Recherche d'un jeu de la vie à modifier Je me suis mis en quete de trouver une implémentation du jeu de la vie que je pourrais modifier. J'ai décidé de partir sur [cette implémentation](https://github.com/gereleth/game-of-life) et dont il existe une [démo](https://gereleth.github.io/game-of-life/public/index.html). Je la trouve intéressante : * Elle fonctionne dans un navigateur * Dispose d'une interface simple et efficace * Le code soucre me parrait simple J'ai cloné le dépot github, pour le moment [je travail ici](https://github.com/mxbossard/iterated-prisoners-dilemma-fights). Ce matin, je me familiarise avec : * le framework Svelte * le bundler Rollup * le code du jeu Quelques ligne de commandes : ``` bash npm i npm install --save-dev svelte rollup-plugin-svelte npm install --global rollup sirv-cli npm run dev ``` Le code source parait simple, le moteur du jeu de la vie est implémenté [dans un fichier spécifique](https://github.com/mxbossard/game-of-life/blob/master/src/game_logic.js). Je vais prévois donc d'écrire ma propre version du moteur pour implémenter mon automate cellulaire. __Voici à quoi ressemble le jeu de départ avant modification__ ![Jeu de la vie de départ](:media_09:game_of_life_starter.gif) #### Premier jet du développement du moteur de l'automate cellulaire L'automate fait s'affronter des __Cellule__ qui disposent : * De leur coordonnées cartésiennes * De leur strategy assignée * De 2 méthodes pour les sérialiser et déserialiser L'automate est régi par un __Environnement__ qui implémente : * La logique des combats entre les cellules * De vérifier le niveau d'adaptation des cellules * De faire naitre ou mourir des cellules Dans les combats s'affrontent des __Strategy__ qui : * Ont un nom * Ont une couleur assignée * Implémente la logique de combat spécifique à cette strategie ### Mardi 21 Juillet #### Réflexions sur la naissance et la mort des cellules Idées pour les règles : * Survivre * Mourir * Se reproduire * Essaimer * Migrer * Famine Idées de règles possibles : * Si une cellule est adapté elle survit, peut se reproduire (donner naissance à une autre cellule). * Si une cellule est sur-adapté elle est se reproduit plus. * Si une cellule est inadapté elle peut mourir. * Si une cellule est trop entouré, elle peut mourir de famine. __V0__ ![Game theory fight V0](:media_09:game_theory_fight_v0.gif) __V1__ ![Game theory fight V1](:media_09:game_theory_fight_v1.gif) #### Application au dilemme de prisonnier simple (premier jet) 1. Si une cellule est adapté elle donne naissance à une cellule dans son voisinage si une place est libre dans le sens horaire à partir de midi. 1. Si une cellule est inadapté elle meurt. ### Mercredi 22 Juillet #### Ajustements 1. Les stratégies sont disposés autour d'une cercle qui forme une arène. 1. Les stratégies sont considérés comme des "bloques" : une cellule ne combat qu'une seule fois par stratégie dans son voisinage. Si une cellule voisine a la meme strategie, un combat à lieu également. 1. Si une cellule est adapté elle donne naissance à une cellule dans son voisinage vers le centre de l'arène. 1. Lors de la phase de reproduction, si plusieurs cellule devait se reproduire sur la meme case, seule celle avec le plus haut score gagne le droit de s'y reproduire. #### Nouvelles idées * Une cellule est adapté si elle dispose d'un score elevée par rapport à son voisinage. * Comment mieux gérer les seuils de survie et de reproduction ? * Comment organiser les combats entre les strategies ? __V3__ ![Game theory fight V3](:media_09:game_theory_fight_v3.gif) __V5__ ![Game theory fight V5](:media_09:game_theory_fight_v5.gif) #### Conclusions * Il faut mieux découper la vie, la mort et la reproduction des cellules. * Pour que les cellules se comportent en "bloque" il parait judicieux de tuer les cellules isolés, et de les autoriser à se reproduire si elles sont nombreuses. * Pour ne pas avoir de problèmes avec les conditions initiale, au départ les stratégies devraient former un bloc. * Pour organiser les combats entre strategie, on pourrait tuer les cellules qui font un moins bon score que les cellule enemies aussi nombreuses. ### Vendredi 24 Juillet Implémentation des méthodes isDying() et isGivingBirth(). __Les principes retenues sont les suivants :__ * Une cellule combat contre toutes les cellules de son entourage * L'entourage d'une cellule est composé des 8 cellules qui l'entoure * Les cellule essaye de donner naissance en priorité vers le centre de l'arene * Si plusieurs cellule essaye de donner naissance au meme endroit, la cellule avec le meilleur score est autorisé ) s'y reproduire. __Une cellule meurt si :__ * Elle est isolée (pas de cellule avec la meme strategie dans son entourage) * Si un autre type de cellule cumule un meilleur score que son propre type de cellule (dans son entourage) * Si son score est moins bon que 80% du score moyen dans son entourage __Une cellule donne naissance si :__ * Il existe au moins 2 autres cellules avec la meme strategie dans son entourage ET si son score est superieur au score moyen dans son entourage __V6__ ![Game theory fight V6](:media_09:game_theory_fight_v6.gif) __V7__ ![Game theory fight v7](:media_09:game_theory_fight_v7.gif) ## Création de progrems ### African beadwork Laurent Malys m'a parlé de son projet de créer des images à la sauce [African beadwork](https://duckduckgo.com/?t=lm&q=african+beadwork&iax=images&ia=images) avec des shaders. Voici quelques Progrem dans l'esprit. ![Progrem african beadwork 1](:media_09:progrem_african_beadwork_1.png) ![Progrem african beadwork 2](:media_09:progrem_african_beadwork_2.png) ![Progrem tordu](:media_09:progrem_tordu.gif) ## Workshop AMIPO L'AMIPO s'est réuni Jeudi 23 Juillet. Nous avons travaillé parallelement sur 3 points : ### Installation de Netdata Le logiciel netdata nous permettra de réaliser une surveillace "light" du serveur. L'installation est réalisée, l'ajout de certains plugins est en cours ... ### Installation de Restic Nous avonc commencé à prendre en main le logiciel restic qui nous permettra de réaliser des sauvegardes incrémentales et chiffrés, et de les pousser sur un serveur tier. Il nous reste à intégrer restic dans le script de backup actuel. ### Test de la mise à jour vers nextcloud 18 Les tests sont en cours ... {{tag>oavl max realisations_logicielles}}