Question

Il y a quelque temps j'ai écrit un Wa-Tor comme des automates cellulaires ( voir Wikipédia ) mais avec quelques espèces et un peu plus intelligent des espèces. Sauf pour beaucoup de réglage fin pour obtenir un système stable, il était tout à fait simple et a bien fonctionné. Cependant, depuis ce moment-là que je me pose (et maintenant vous) comment mettre à jour les cellules « de façon réaliste ».

« monde » Mon était une grille et a toujours été mis à jour à partir du haut à gauche vers en bas à droite. OMI qui signifie également que les cellules qui sont plus proches du haut et à gauche sont toujours plus rapides. Ainsi, par exemple un poisson dans la cellule [3, 3] peut être mangé par un requin dans [3, 2] avant d'être mis à jour. Si les cellules auraient les positions opposées du poisson serait toujours échapper au requin, car il peut se éloigner du requin avant qu'il ne soit mis à jour.

Ai-je raison que c'est un « problème » (ou du moins irréaliste)?

OMI dans un contexte réaliste toutes les cellules doivent être mis à jour en même temps, mais je ne sais pas comment mettre en œuvre quelque chose comme ça. Une autre méthode que je peux imaginer est d'évaluer les cellules dans un ordre « brassé ».

Comment voulez-vous résoudre ce problème / comment sont ces problèmes généralement résolus?

Était-ce utile?

La solution

Comme @Rogach mentionne, mises à jour simultanées ne fonctionnera pas. Parce que votre cellulaire est non automates déterministe, deux poissons ne connaîtra pas la position suivante de l'autre et peut entrer en collision.

Je pense que la meilleure solution, étant donné que votre cellulaire est non automates déterministe, est de mettre à jour votre grille d'une manière non-déterministe, par exemple. au hasard. Choisissez des cellules au hasard à la mise à jour. Soit choisir au hasard des cellules et garder une trace dont l'un est que vous avez mis à jour, de sorte que chaque cellule est mis à jour exactement une fois par tick, ou choisir des cellules au hasard et ne vous embêtez pas garder la trace. La deuxième approche serait plus facile, mais les risques des cellules étant mis à jour légèrement plus souvent. En moyenne, toutes les cellules seraient mis à jour le même montant, si vous aviez une fonction aléatoire uniformément répartie.

Autres conseils

OMI dans un contexte réaliste toutes les cellules doivent être mis à jour en même temps, mais je ne sais pas comment mettre en œuvre quelque chose comme ça.

Ceci est l'approche que je suggère. Avoir deux grilles, un un « ancien » et un «nouveau / courant. Lors du calcul de la prochaine génération, la base de vos calculs sur l'ancienne grille, et écrivez vos résultats à la nouvelle grille. Affichez ensuite la nouvelle grille. Maintenant, échanger les pointeurs de sorte que la nouvelle grille est maintenant le « vieux » un, et l'ancienne grille devient la nouvelle grille. Répétez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top