Présentation
Depuis l'époque où il n'y avait rien de mieux que le ZX-Spectrum, je me souviens d'un jouet dans lequel il fallait définir un programme pour le robot afin qu'il puisse vaincre l'ennemi en nage autonome. Et pendant mon temps libre de travail et de repos, j'ai commencé à travailler sur un programme qui, à l'aide de paramètres lus dans un fichier texte au format XML, vous permet de:
- créer un monde plat, limité en taille par les ressources informatiques. Au lieu d'un mur de glace le long du bord, il apparaît du bord opposé, pour les objets à l'intérieur du monde, il semble continu.
- ajouter un nombre illimité de sources fixes d'énergie géothermique
- observer l'éclairage du soleil sous la forme d'un spot qui imite le mouvement du luminaire avec les changements d'heure du jour et de l'année.
- décrire des minéraux présentant divers degrés de «volatilité», c'est-à-dire une sensibilité à des mouvements arbitraires à la surface en raison de la diffusion
- décrire les réactions chimiques entre les substances que les organismes vivants peuvent effectuer sous l'influence de l'énergie
- et, bien sûr, observer les organismes "vivants".
La principale différence avec les jeux existants - dans le modèle, il n'y a pas de fin prédéfinie par le script.
Monde de modèles
Le monde est montré dans l'image - un grand point est la lumière du soleil (se déplaçant dans le temps), deux petits points sont des sources d'un autre type d'énergie appelé géothermie. La surface éclairée est principalement bleue car elle contient de l'eau en tout point. Des points de couleur différente apparaissent et disparaissent si, en raison de la diffusion, la concentration relative de l'élément correspondant est devenue temporairement supérieure à la moyenne.

Pour économiser la mémoire, les quantités de matière à chaque point sont stockées dans le type float, ce qui donne 7 bits significatifs. Pour le modèle, 100 000 unités ont été définies à chaque point d'eau, 20 000 dioxyde de carbone, 10 unités d'hydrogène (soit 10 000 fois moins que l'eau) et zéro oxygène et méthane. Un exemple de ce à quoi ressemble la description des substances introduites dans le modèle:
<Element name="CarbonDioxide" color="yellow" volatility="0.12" visibility="true"> <rect left="0" top="0" right="max" bottom="max" amount="20000"/> </Element> <Element name="Oxygen" color="green" volatility="0.12" visibility="false"> <rect left="0" top="0" right="max" bottom="max" amount="0"/> </Element> ...
Ensuite, la réaction de la formation de méthane et d'eau à partir du dioxyde de carbone et de l'hydrogène en présence d'énergie géothermique a été décrite.
<Reaction name="CO2+4H2=CH4+2H2O" geothermalEnergy="0.00001" solarEnergy="0"> <LeftReagent name="CarbonDioxide" amount="1"/> <LeftReagent name="Hydrogen" amount="4"/> <RightReagent name="Methane" amount="1"/> <RightReagent name="Water" amount="2"/> </Reaction>
Le premier protoorganisme LUCA avec cette réaction a été planté à l'intérieur d'une des sources géothermiques.
<section name="Organisms"> <item name="LUCA" author="DEMI" x="300" y="30" reaction="CO2+4H2=CH4+2H2O"/> </section>
De plus, un filtre a été inclus dans le programme pour montrer les points contenant du méthane et une tache de méthane a commencé à se répandre autour du corps. La première cellule ne peut recevoir des substances qu'à partir du point où elle se trouve elle-même, et le transfert de substances s'effectue par diffusion. Si vous réduisez la quantité de substances disponibles, la vitesse de propagation des produits de réaction ralentit fortement.

Le programme implémente le mode d'approximation, lorsque le point augmente à un carré, qui affiche une liste des substances et des organismes vivants qu'il contient. Si le filtre pour plusieurs éléments est activé, la couleur de l'élément avec la concentration relative la plus élevée à ce stade est utilisée pour colorer le point, sinon seule l'eau qui serait la plus visible serait toujours visible.

Sélection
Les matières premières sont abondantes, mais tôt ou tard elles seront toutes épuisées. Si une cellule réussit à «digérer les aliments», elle accumule alors de la «graisse» (énergie interne) et peut se multiplier par division et muter pendant la division. Ou mourir d'épuisement. Son comportement est également hérité et sujet à des mutations, au cours desquelles une partie insignifiante des paramètres de l'automate cellulaire change. Ensuite, des mutations contrôlées seront introduites dans le modèle, lorsque l'utilisateur indiquera uniquement pour quel type de mutation il souhaite recevoir. La mutation attendue se produira avec une certaine probabilité et la nouvelle espèce doit pouvoir survivre pour continuer à muter.
Nous avons donc une sorte de proto-organisme-méthanogène, qui a besoin d'énergie géothermique. Il s'installe dans la zone d'énergie géothermique, et les espèces individuelles que la diffusion en retire - périssent. Les organismes morts continuent de prendre leur place pendant un certain temps, puis, si personne ne les a mangés, ils disparaissent. La consommation de minéraux pour la croissance des organismes n'est pas réalisée, respectivement, lorsqu'ils se désintègrent, ils disparaissent simplement. Après le démarrage de la simulation, les organismes se multiplient rapidement, occupant toute la zone autour de la source géothermique. Après un certain temps, les cellules mortes apparaissent au-delà de l'action de l'énergie géothermique. Il est intéressant de noter que parfois vous pouvez remarquer que des organismes au centre même meurent - ceux qui n'avaient pas assez de minéraux mangeaient tout aux approches. La figure montre des organismes vivants en blanc et brun mort, le bleu montre l'eau, le cercle rose montre la zone où l'énergie géothermique est ressentie (son intensité diminue avec la distance du centre).

Plusieurs sources d'énergie géothermique sont décrites dans le monde, le premier protoorganisme a été planté dans l'une d'elles. Lorsque la simulation a duré assez longtemps (plusieurs heures), j'ai été surpris de constater que la source voisine était également peuplée - un corps a eu la chance d'y arriver vivant.
Quelle que soit la taille du monde, si une seule réaction s'y produit, tout le dioxyde de carbone (ou l'hydrogène) sera épuisé tôt ou tard, après quoi tous les organismes mourront de faim, laissant derrière eux de vastes réserves de méthane.
L'image comprend un affichage d'un organisme vivant et de méthane (une tache violette qui s'est développée autour d'une source géothermique) avec un rétro-éclairage du soleil (les premiers rayons commencent à frapper la tache de méthane tôt le matin, le soleil est à droite et le noir s'affiche car seuls le méthane et la vie sont affichés et après avoir allumé le plein éclairage.

Compte tenu d'une très mauvaise répartition des ressources minérales, la population est sur le point de survivre - pas plus de quelques dizaines d'individus. La figure montre une option alors qu'au départ il n'y avait que deux réactions à chaque point d'hydrogène.

Le fichier Snapshoot2017.rar contient un fichier exécutable compilé pour Windows et des fichiers de support pour celui-ci. Aucune installation n'est requise, il ne laisse aucune trace de son travail - pour le démarrer, il suffit de le décompresser puis de le supprimer. Pour modifier les paramètres par défaut, le fichier ThemeAero / template.demi peut être ouvert dans un simple éditeur de texte. Les contrôles sont décrits dans la section appropriée du wiki du projet.
Plans supplémentaires
La sélection des organismes en fonction de leurs actes de chance et de variabilité. Nous devons maintenant passer à l'évolution, tout en étant manuel. Ajoutez une mutation au fichier de configuration - un organisme avec une réaction inverse qui ne nécessite pas d'énergie externe, mais qui est beaucoup moins efficace. Maintenant, quand un protoorganisme est divisé, une espèce fille naîtra occasionnellement, qui n'est plus liée à une source d'énergie géothermique, mais qui a besoin d'un produit d'activité vitale du premier type. Le résultat devrait être un équilibre entre les deux espèces.
Ensuite, nous avons l'énergie solaire inexploitée. Un seul organisme peut être localisé à un point dans l'espace, ce qui les rend compétitifs non seulement pour l'énergie et la matière, mais aussi pour l'espace.
Conclusion
Pour le moment, la principale difficulté est de choisir un ratio des objets existants du modèle pour qu'il reste stable et intéressant. C'est le rapport des volumes de substances minérales, des énergies, des vitesses, des réactions métaboliques, puis des tâches du domaine de la "nature vivante" - comment assurer le codage des automates cellulaires. Plus précisément, nous avons juste besoin de données sur le monde environnant sous une forme adaptée. L '«ADN» doit être compact, capable de mutations atomiques non destructives, décrire à la fois la structure du corps (un ensemble de cellules - le système nerveux, le récepteur, le muscle, l'armure, etc.) et l'algorithme de son action.
Dans un avenir lointain, le modèle peut devenir distribué - chaque utilisateur a son propre jardin, où il élève ses propres organismes, se dispersant dans le quartier et dans lequel pénètre le bétail de ses voisins. La pente peut être mesurée comme la prévalence d'une espèce.
Pour moi, ce projet est un divertissement et je ne prévois pas d'en retirer d'avantages. Et le but de cet article est de rechercher des personnes intéressées par ce domaine, qui peuvent partager leurs meilleures pratiques et idées.
Dans le programme, le modèle est techniquement calculé dans un thread séparé, sa vitesse peut être estimée par la rapidité du temps du modèle et, par conséquent, ne dépend pas de quelle échelle et avec quels détails l'image est dessinée à l'écran. Il existe également un flux séparé qui rend une image du monde du modèle. Sa vitesse est plus élevée, moins de points du modèle sont affichés - par exemple, lorsqu'un petit nombre de points sont placés sur l'écran à fort grossissement, le nombre d'images par seconde est plus élevé que lorsque le monde entier est sur le moniteur large à une distance maximale sur l'écran. La vitesse d'affichage, qui est limitée à 60 ips, est affichée dans le coin supérieur gauche, cela n'a aucun sens plus rapide.
PS: Le modèle est open source sous la GNU GPL Version 3, 29 juin 2007 et est disponible en téléchargement pour tous ceux qui veulent expérimenter ou créer des fourches. Assemblé avec la bibliothèque multiplateforme ClanLib sur MS VS2015. Le fichier binaire pour OS Windows est dans l'archive - il ne s'installe pas du tout, mais démarre simplement après le déballage. Je suppose que la compilation pour d'autres plates-formes ne causera pas de problèmes. Template.xml peut être édité dans un éditeur de texte approprié, une certaine documentation est sur le github dans la section wiki.