Outils pour utilisateurs

Outils du site


max_oavl_2020

Les travaux de Max pendant les Open Ateliers Version Longue 2020

Création d'un automate cellulaire

cf automate cellulaire sur wikipedia

Très intéressé depuis quelques temps par le jeu de la vie, les Progrem, et depuis peu par la théorie 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 : 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 et dont il existe une démo. 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. Ce matin, je me familiarise avec :

  • le framework Svelte
  • le bundler Rollup
  • le code du jeu

Quelques ligne de commandes :

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. 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

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

V1

Game theory fight V1

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.
  2. 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.
  2. 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.
  3. Si une cellule est adapté elle donne naissance à une cellule dans son voisinage vers le centre de l'arène.
  4. 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

V5

Game theory fight V5

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

V7

Game theory fight v7

Création de progrems

African beadwork

Laurent Malys m'a parlé de son projet de créer des images à la sauce African beadwork avec des shaders. Voici quelques Progrem dans l'esprit.

Progrem african beadwork 1

Progrem african beadwork 2

Progrem tordu

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 ...

max_oavl_2020.txt · Dernière modification: 2020/07/25 18:52 de bigMax