1 points par GN⁺ 2024-04-29 | 1 commentaires | Partager sur WhatsApp
  • Programme de simulation de l’évolution de voitures à l’aide d’un algorithme génétique

    • L’objectif est de faire évoluer, au fil des générations, des formes aléatoires à deux roues pour en faire des voitures à l’aide d’un algorithme génétique
    • Basé sur BoxCar2D, mais réécrit depuis zéro, avec uniquement le même moteur physique (box2d)
    • Utilise la bibliothèque seedrandom.js de David Bau
  • Contrôles et paramètres

    • Une fonction Save/Restore Population permet d’enregistrer et de restaurer localement la population actuelle
    • Le bouton Surprise permet d’activer ou désactiver le rendu pour accélérer la simulation
    • New Population redémarre uniquement la population de voitures tout en conservant le circuit
    • Le même seed génère toujours le même circuit, ce qui permet de rivaliser avec ses amis
    • Mutation rate correspond à la probabilité que chaque gène de chaque individu mute vers une valeur aléatoire à la naissance d’une nouvelle génération
    • Mutation size correspond à l’amplitude possible de mutation de chaque gène ; plus la valeur est petite, plus elle reste proche de la valeur d’origine
    • Elite clones désigne les n meilleures voitures copiées dans la génération suivante
    • View top replay met en pause la simulation en cours et affiche la voiture la plus performante
  • Graphiques

    • Rouge : meilleur score de chaque génération
    • Vert : moyenne des 10 meilleures voitures de chaque génération
    • Bleu : moyenne de l’ensemble de la génération
  • Composition du génome

    • Forme (1 par sommet, soit 8 gènes au total)
    • Taille des roues (1 par roue, soit 2 gènes au total)
    • Position des roues (1 par roue, soit 2 gènes au total)
    • Densité des roues (1 par roue, soit 2 gènes au total) — plus c’est sombre, plus la densité est élevée
    • Densité du châssis (1 gène) — plus c’est sombre, plus la densité est élevée
  • Informations supplémentaires

    • La simulation n’est pas déterministe, il est donc possible que la meilleure voiture n’affiche pas des performances constantes
    • La complexité du terrain augmente avec la distance
    • Le code est désormais disponible sur GitHub avec des contributions de la communauté

1 commentaires

 
GN⁺ 2024-04-29
Avis Hacker News

En résumé :

  • Ce projet a été créé il y a 20 ans et fonctionne encore dans le navigateur grâce à Ruffle
  • Avec les algorithmes génétiques, lorsqu’un bon design apparaît à un certain moment, il tend ensuite à rester dominant dans les générations suivantes. Il faudrait peut-être ajuster les réglages du taux et de l’ampleur des mutations
  • Il y a un petit bug après 280 m : il n’y a plus de route et les voitures tombent dans un gouffre sans fin
  • On peut cliquer sur le bouton "Surprise" pour faire défiler rapidement plusieurs générations. Il est intéressant d’observer l’évolution au fil du temps en ajustant le taux et l’ampleur des mutations
  • Il serait intéressant que les véhicules aient un gène de "compliance" permettant d’implémenter une suspension. Dans la plupart des exécutions, ils tendent à converger vers une forme de moto de Tron
  • Le terrain ne change pas d’une génération à l’autre
  • Cela avait déjà été présenté plusieurs fois dans de précédentes discussions HN (boxcar2d, similaire mais implémenté sans Flash)
  • Cela rappelle les heures passées enfant sur Boxcar 2D
  • Je me demande si quelque chose de similaire serait possible dans un environnement de simulation physique 3D. Il serait intéressant de voir si les algorithmes génétiques pourraient être utilisés pour découvrir de nouvelles formes aérodynamiques, par exemple pour des drones, dans une simulation