Вход
Быстрая регистрация
Если вы у нас впервые: О проекте FAQ
0

Как с помощью математической формулы описать игру Конвея "Эволюция"­?

Ира ЛДВО на БВ [252K] 3 месяца назад

Описание игры:

  • Особей для зарождения не должно быть меньше трёх, желательно больше, но на первом этапе не больше 32-х.
  • Особь, не имеющая связи с меньше двух или больше трёх в своём окружении из 8-ми особей, то она погибает.
  • При наличии ровно 3-х соседей происходит зарождение новой особи.

Соприкосновения с соседями считаются по вертикали горизонтали и диагонали. Например, горизонтальная полоска из 3-х особей на втором ходу станет вертикальной. По краям умрут, а в середине с обоих сторон родятся. Цикл будет бесконечным.

Все процессы происходят одновременно: Как смерть, так и возрождение.

В некоторый случаях Эволюция завершается гибелью всех особей.

В других случаях она попадает в циклическую временную петлю.

И в идеале эволюцию захватывает всю территорию до бесконечности. Иногда разрываясь на островки, а потом они сливаются, иногда разлетаясь в стороны.

В детстве я изрисовывала тонны клетчатой бумаги, играя в эту игру. Примеры мультипликации:

Вопрос:

Возможно ли с помощью математической формулы описать игру Конвея "Эволюция"? Её смерть, рождение или замирания в цикле?

бонус за лучший ответ (выдан): 5 кредитов
Circiter [10.6K]
Объясните разницу с обычной игрой "жизнь" (="game of life") того же автора. И описание функции перехода похоже (хотя я и не понял про ограничение "не больше 32-х") и картинки типичны для неё... Но название другое и в одном из ответов ниже автор vdtest говорит "разновидность классической игры Жизнь", именно "разновидность­".  3 месяца назад
Ира ЛДВО на БВ [252K]
Согласна! Я перепутала названия. Игра называется "Life" - "Жизнь". Почему не больше 32? Просто мне так захотелось. В моём детстве интернета ещё не было, а компьютер у меня был 16-ти разрядный. Когда я стала чуть постарше. Я написала на бейсике игру: "Жизнь". А потом на ассемблере. Но там экран маленький всего 7 килобайт: 240х320 точек, кажется, а знакомест на 24 на 32, если мне память не изменяет, поэтому я выбрала 32. и у меня там было 32 локации по горизонтали и 16 по вертикали. Но всё двигалось и вспыхивало.  3 месяца назад
Circiter [10.6K]
О, да, понимаю сложности при написании для старых ограниченных систем. Я вон, в прошлом-позапрошлом году, от нечего делать написал "жизнь" на языке текстового редактора sed (см. github.com/circiter/­­­­life-in-sed) -- очень медленно работает, зараза.

Насчёт путаницы в названии. У одного философа, игра "жизнь" использовалась как морская свинка при анализе дарвиновской эволюции (см. D.C.Dennet, Darwin's Dangerous Idea: Evolution and the Meaning of Life, 1995).
 3 месяца назад
Ира ЛДВО на БВ [252K]
Нет у меня летала просто, я её всё время обновляла и улучшала. Сделала выбор скорости от 1 до 0 (нуль максимум). Раскрасила клетки. Живущие синим, рождающееся зелёным, а умирающие тёмно-красным. Потом добавила переход от рождения и до смерти, затем звуки через пищалку. Их можно было выключать. Написала правила. И как выбирать фигурки с помощью клавиш курсора и пробел (огонь). По началу было около сотни байт, а потом разрослось до несколько килобайт. Всё же там было слово: "эволюция"­. Потому что если зацикливалось, то выскакивала надпись: "Ваша эволюция попала в цикл. Продолжить? Y/N" или "STOP! Превышен допустимый предел локаций". В углу был счётчик времени и счётчик циклов. И всё равно в машинном коде она не тормозила. А на бейсике, да. Едва 4 экрана тянула. И тоже где-то в начале 90-х. Я в школе училась в начальных классах.  3 месяца назад
комментировать
4

Формула для описания этой игры (разновидность классической игры Жизнь) представляет собой условие состояния одной клетки

Примем обозначения

  • функция равна 1 - если клетка живая (содержит особь)
  • функция равна 0 - если клетка пустая ( не содержит особь)
  • Если условие выполняется то функция равна 1
  • Если условие не выполняется то функция равна 0
  • Клетка поля c координатами x и y обозначается E(x,y)

Для запуска процесса игры к каждой клетке применяется формула сумма клеток соседей больше или равна 2 и меньше или равна 3.

Если условие выполняется то 1 если нет то 0

схематично клетку с соседями можно представить так

тогда формула f(x,y) примет вид двух условий (продолжения жизни или зарождения), соединённых операцией "или"

2⩽E(x-1,y-1)+E(x,y-1)+E(x+1,y-1)+E(x-1,y)+E(x+1,y)+E(x-1,y+1)+E(x,y+1)+E(x+­1,y+1)⩽3 при E(x,y)=1

или

E(x-1,y-1)+E(x,y-1)+E(x+1,y-1)+E(x-1,y)+E(x+1,y)+E(x-1,y+1)+E(x,y+1)+E(x+­1,y+1)=3 при E(x,y)=0

Эта формула применяется к каждой ячейке поля, порождая новое поле.

Для получения следующего кадра формула применяется к ячейкам нового поля

Если решить вопрос о том как представлять поле (торроидальной картой - правая граница переходит в левую и верх переходит вниз или статической - поле не распространяется за отведённые пределы, то можно сделать реализацию для браузера и проверить формулу на практике.

Чтобы не переводить тонны клетчатой бумаги, играя в эту игру, можно воспользоваться онлайн версией

автор вопроса выбрал этот ответ лучшим
1

При ветвлении алгоритма одной формулой не обойтись.

Circiter [10.6K]
А вот и не соглашусь. :) Особенно если условие выглядит как равенство некоторой величины нулю или единицы (достаточно использовать умножение и сложение). Например, ветвление "A равно B если C равно нулю и A равно D если C равно единице" можно записать как A = C*D + (1-C)*B.  3 недели назад
alexm12 [239K]
Не вопрос... Пишите вашу формулу в ячейки таблицы в Экселе и наслаждайтесь "Эволюцией­".  3 недели назад
комментировать
Знаете ответ?
Есть интересный вопрос? Задайте его нашему сообществу, у нас наверняка найдется ответ!
Делитесь опытом и знаниями, зарабатывайте награды и репутацию, заводите новых интересных друзей!
Задавайте интересные вопросы, давайте качественные ответы и зарабатывайте деньги. Подробнее..
регистрация