Всем доброго дня или ночи! Затронутая в статье, тема может показаться настолько избитой до популярности, что при ее прочтении возникнет стойкое желание взять помидор или, не дай бог, кирпич и кинуть в автора. А изложенные мысли будут напоминать повторное изобретение велосипеда с квадратными колесами. Но идея, побудившая приступить к описанию, буквально зудит и просится ей поделиться, несмотря на угрозу физического или морального наказания.
Историческая справка
В далеком 1970 году английский математик Джон Хортон Конвей, увлеченный темой клеточных автоматов, с командой единомышленников описал вымышленный мир, объекты которого эволюционировали по определенным правилам. В дальнейшем эта работа обрела большую популярность, благодаря ее практической реализации в виде игры под названием "Жизнь".
Алгоритм игры настолько прост и в то же время увлекателен, что более полувека привлекает внимание не только учёных, но и простых обывателей:
Место действия этой игры — «вселенная» — это размеченная на клетки поверхность или плоскость — безграничная, ограниченная, или замкнутая (в пределе — бесконечная плоскость).
Каждая клетка на этой поверхности может находиться в двух состояниях: быть «живой» (заполненной) или быть «мёртвой» (пустой). Клетка имеет восемь соседей, окружающих её.
Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:
в пустой (мёртвой) клетке, рядом с которой ровно три живые клетки, зарождается жизнь;
если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае, если соседей меньше двух или больше трёх, клетка умирает («от одиночества» или «от перенаселённости»)
Игра прекращается, если
на поле не останется ни одной «живой» клетки
конфигурация на очередном шаге в точности (без сдвигов и поворотов) повторит себя же на одном из более ранних шагов (складывается периодическая конфигурация)
при очередном шаге ни одна из клеток не меняет своего состояния (складывается стабильная конфигурация; предыдущее правило, вырожденное до одного шага назад)
Эти простые правила приводят к огромному разнообразию форм, которые могут возникнуть в игре. К настоящему времени более-менее сложилась следующая классификация фигур:
Устойчивые фигуры: фигуры, которые остаются неизменными
Долгожители: фигуры, которые долго меняются, прежде чем стабилизироваться[2];
Периодические фигуры: фигуры, у которых состояние повторяется через некоторое число поколений, большее 1;
Двигающиеся фигуры: фигуры, у которых состояние повторяется, но с некоторым смещением;
Ружья: фигуры с повторяющимися состояниями, дополнительно создающие движущиеся фигуры;
Паровозы: двигающиеся фигуры с повторяющимися состояниями, которые оставляют за собой другие фигуры в качестве следов;
Пожиратели: устойчивые фигуры, которые могут пережить столкновения с некоторыми двигающимися фигурами, уничтожив их;
Отражатели: устойчивые или периодические фигуры, способные при столкновении с ними движущихся фигур поменять их направление;
Размножители: конфигурации, количество живых клеток в которых растёт как квадрат количества шагов;
Фигуры, которые при столкновении с некоторыми фигурами дублируются.
Конвей первоначально предположил, что никакая начальная комбинация не может привести к неограниченному размножению и предложил премию в 50 долларов тому, кто докажет или опровергнет эту гипотезу. Приз был получен группой из Массачусетского технологического института, придумавшей неподвижную повторяющуюся фигуру, которая периодически создавала движущиеся «планеры». Таким образом, количество живых клеток могло расти неограниченно. Затем были найдены движущиеся фигуры, оставляющие за собой «мусор» из других фигур.
Что дальше?
Благодаря развитию компьютерных технологий, на сегодняшний день существует столько реализаций игры "Жизнь" как в классическом варианте, так и в виде ее многочисленных модификаций, что тема кажется исчерпанной. Каждый, кто в достаточной мере проявлял интерес к математике или информатике, знаком с данной игрой или даже ей увлекался.
Так и ваш покорный слуга, будучи студентом на заре своей молодости, проявил умеренный интерес к этому и благополучно про него забыл. Но буквально на днях, работая над совершенно другой задачей, пришел к идее реинкарнации жизни в обычном браузере.
Не мудрствуя лукаво по быстрому "на коленке" была накидана страничка, которая тут же была обнародована членам семьи. К мой неожиданности, дети "залипли" на ней на продолжительное время, а мне оставалось только сидеть рядом и пить чай с печеньками.
Столь бурная детская реакция стала причиной не останавливаться на достигнутом и продолжить работу. В проект был добавлен редактор состояния клеток, панель управления процессом эволюции (запуск и остановка). И после очередного утомительного набора в редакторе фигуры "ружье Госпера" возникла идея реализовать палитру готовых фигур. Затем потребовалось, чтобы эти фигуры можно было поворачивать и делать зеркальное отражение, а в саму палитру добавлять новые фигуры не модифицирую код проекта... Новые идеи не иссякали, а Остапа все несло и несло...
Точкой невозврата стала идея отойти от классических принципов игры. В результате была добавлена возможность существования треугольных клеток, что в корне изменило динамику игры. К тому же, существующие на сегодняшний день известные фигуры квадратного мира здесь неприменимы, и что требует дополнительного изучения и классификации нового многообразия фигур треугольного мира.
Итоги
Таким образом случайная идея неожиданно обрела форму и превратилось в более или менее серьезный мини-проект, насчитывающий около полутора тысячи строк кода обычного JS без привлечения тяжелой артиллерии в виде различного рода фреймворков и библиотек. Код постарался "причесать" насколько возможно, но проект еще далек от завершения и в голове полно идей для дальнейшей модернизации.
Проект доступен на GitHub для конструктивной критики и свободного использования.
Всем добра! Спасибо за внимание!
propell-ant
Натяните треугольную разметку на сферу — и порвете остатки нашего шаблона.
Для квадратной сетки это вроде упирается в сингулярности на полюсах, а с треугольниками должно прокатить.
nin-jin
Клеточное поле обычно на тор натягивают. Для треугольников лучше иметь шестигранное поле — его легко свернуть в замкнутую фигуру.
mickvav
Только там будут особенности — вершины с 5-ю а не 6-ю прилегающими треугольниками.
nin-jin
Вы про икосаэдр? Я думал про что-то 4-мерное, но сейчас понял, что если взять поле в форме шеврона, то его можно свернуть в тот же тор.
agat000
Или вывести в трехмерное поле. И порвать остатки остатков шаблона. Хотя там не так наглядно будет.
Geotyper
на сферу(и прочие фигуры) квадратные клетки тоже можно попробовать «натянуть»
Exchan-ge
Говорят, что есть три вещи, которые можно делать бесконечно: смотреть, как течет вода, горит огонь и как сменяют друг друга элементы в игре Жизнь :)
Тут сразу напрашивается вариант с пяти и шестиугольниками.
kdmtr
Вариант с пятиугольниками, пожалуй, не напрашивается: будет слабовато с симметричностью замощения.
В вариант шестиугольниками — конечно, годится; предположу, что автор даже пробовал, но не получил достаточно красивых картинок.
kylikovskix Автор
Была идея, но как показала практика, однородность клеток и их равномерное распределение на поле возможно только в том случае, когда они представляют квадрат или равносторонний треугольник.
maxzhurkin
Пятиугольники можно в геометрию Лобачевского поместить
iShrimp
Есть хорошая статья про гиперболическую «Жизнь», но там на каждый узел сетки не 4 пятиугольника, а 5 четырёхугольников.
iShrimp
Пятиугольники можно найти в мозаике Пенроуза, получится игра «Жизнь» на непериодическом поле. Одна и та же конфигурация будет эволюционировать по-разному исходя из её положения.
nin-jin
А чего бы не задеплоить игру на github pages? Это ж 1 клик в настройках проекта.
kylikovskix Автор
Спасибо за совет! Даже не знал о такой возможности. В ближайшее время будет сделано.
stalker320
Буду ждать чтобы опробовать это в браузере
v1000
Идея с палитрой фигур классная
vkni
По комментарию выше про пятиугольники — а вот мозаики Пенроуза вы не хотели бы рассмотреть?
Там вроде бы относительно недавно нашли глайдер — www.newscientist.com/article/dn22134-first-gliders-navigate-ever-changing-penrose-universe
Вот описание правил
www-users.cs.york.ac.uk/susan/bib/ss/nonstd/penroselife.pdf
То есть, редактор с библиотекой элементов могут действительно привести к какому-то открытию.
kylikovskix Автор
Идея замечательная, возьму на заметку.
black1277
Трехмерная реализация — next level?
Yermack
Так уже есть много хорошо отполированных вариантов. (Например, раз два)
abbyyit
вроди тоже по теме: arxiv.org/pdf/2104.03902.pdf
Yermack
Законы физики меняющиеся со временем — вау! Кто-нибудь возьмется осветить эту новость на хабре?
abbyyit
тема сложная, немного сведений о исследователях содержится на сайте
thenextweb.com/news/physicists-working-with-micfosoft-think-the-universe-is-a-self-learning-computer
если правильно понял, для понимания вопроса такого уровня необходимы минимальные сведения следующих тем
— дилемма, из-за которого был сожжен когда-то Бруно, «космос бесконечен или нет?»
В последнее десятилетие XX века космологи заново открыли многосвязные коллекторы, возможно, отчасти в результате интенсивного контакта с топологами, но, скорее всего, потому, что экспериментальные испытания приобрели практический характер. Спутники КОБЕ (1989-1993 гг.), WMAP (2001-2010 гг.) и Planck (2009-2013 гг.) обнаружили, что температурные колебания космического
микроволнового фона (сумма сферических гармоник, относительную устойчивость которых астрофизики изобразили на графике как функцию угла), хотя и появляются в точности с ожиданиями в стандартной модели на
малых угловых масштабах, все они исчезают на масштабах, превышающих примерно 60° в небе (спектр как бы «срезается»).
nature.com/doifinder/10.1038/nature01944
Одно из возможных объяснений отсутствующих колебаний заключается в том, что инструмент слишком мал, чтобы суметь«сыграть» их.
Загадку можно перетрактовать (если Вселенную представить в виде
гигантского музыкального инструмента) как необъяснимое отсутствие низких нот
во время исполнения единой величественной симфонии. Вселенная конечна, и подобно скрипке, которая не может воспроизвести звуки, доступные виолончели, Вселенная не может породить волны крупнее себя.Другими словами, Вселенная замкнутая трехмерная сфера, размер которой сравним с размером сферы
видимого горизонта.
graniru.org/Society/Science/m.46504.html
соответствующая графика наличествует в лекции Уикса (с 35 минуты)
m.youtube.com/watch?v=j3BlLo1QfmU
— следующий вопрос, ориентирован или неориентирован пространственный сегмент. Чудеса со временем происходят в случае неоринтированном варианте, там же ссылки на профильную литературу
physics.stackexchange.com/questions/3656/can-spacetime-be-non-orientable
— к вопросам, как такое обучать, если когда-нибудь оно окажется в приемлемого вида датасете ( подобным датасетом вроди занимается проект alexandria
The project will integrate knowledge developed in machine reading and reasoning (AI2's Project Aristo), natural language and understanding (AI2's Project Euclid), and computer vision (AI2's Project Plato) to create a new, unified and extensive knowledge
source. This knowledge can then be used as a foundation for future AI systems to build upon),
www.prnewswire.com/news-releases/the-allen-institute-for-artificial-intelligence-to-pursue-common-sense-for-ai-300605609.html
необходимы минимальные сведения о кригинге
ru.m.wikipedia.org/wiki/Кригинг
В 90-х темой занимался ученый Neal, который выяснил, что для фиксированных гиперпараметров, большой класс нейросетевых моделей сойдётся к
гауссовскому процессу (распределению вероятностей по возможным функциям),
но фактически указать конкретный гауссовский процесс может только ковариационная функция, (описывающая поведение соответствующего гауссовского процесса), в networks “infinite”отсутствует такое отсутствует.
Гауссовские процессы вычислительно дороги, поэтому единственная доступная альтернатива — методы Монте-Карло \ цепи Маркова для сетей с большим (но конечным) количеством скрытых блоков.
В идеале необходим переход от априорных весов к априорным функциям, и тут оказывается, что при байесовской трактовке нейронных сетей хорошие прогнозы могут быть получены с помощью нейромоделей, с количеством скрытых параметров стремящимся к бесконечности.
papers.nips.cc/paper/1197-computing-with-infinite-networks.pdf
как-то так:9(
Yermack
Не, тут нужно осторожней — обучение это даже не метафора для хайпа, так что не надо связывать это с современным машинлёнингом и, боже упаси, с теорией познания. Я уже прошвырнулся по новостям и все равно пришлось листать оригинал, и там очень все похоже на Вольфрамовскую оргию графов и клеточных автоматов, но вместо фактической реализации всех вариантов, а ля математическая вселенная Тегмарка, авторы решили развивать эволюционный подход, то есть вселенная пробует разные варианты физики и развивается только в некотором пути, а не простирается на все пространство состояний, но непонятно, что выступает критерием отбора. Все же, без должных знаний космологии за суд теории браться нельзя, там нужно чувствовать матаппарат, чтоб понять всю аллегорию с обучением
abbyyit
да, собственно после триумфа ИИ в логических и прочих играх, чего-то другого ожидать не логично*
следующие астрономия и космология, грядет эпоха, где софт будет таким важным, как и телескоп, такие инструменты называют «брокеры событий» (или «маршалы»), которые выступают в роли субъекта между производителями данных и потребителями, несколько:
ztf
en.m.wikipedia.org/wiki/Zwicky_Transient_Facility
mars3
mars.lco.global
fink
github.com/astrolabsoftware/fink-broker
lasair
lasair.roe.ac.uk
skyportal
github.com/skyportal/skyportal
alerce
alerce.science
ampel
github.com/AmpelProject/Ampel-contrib-sample
antares
noao.gitlab.io/antares/filter-documentation/
с большой вероятностью все это будут изучать ИИ-лаборатории крупных корпораций, один только LSST будет радовать 30 терабайт за ночь
ru.wikipedia.org/wiki/Обсерватория_имени_Веры_Рубин
думаю будет как с шахматами и го. Соберут лучших спецов, ну и те чего-нибудь придумают)))
z0ic
Ещё есть интересные симуляции многоголового физариума https://sagejenson.com/physarum. Хочу попробовать на WASMe вычислить.
drWhy
«при прочтении возникнет стойкое желание взять помидор или, не дай бог, кирпич и кинуть в автора.»
Да не утаят руки мимокрокодилов сих вещей и да не поднимутся на экий неблаговидный поступок ибо:
«идея превратилось в мини-проект полутора тысячи строк кода JS без фреймворков и библиотек.»
Творец во времена оные не пользовал излишних сущностей ибо скудны были ресурсы компьютерные.
И да утолит ТС зуд свой, не убоявшись наказаний моральных и физических, ибо зуд сей и есть жизнь.
eimrine
Сколько не читаю про эту игру, одно правило для меня остаётся скрытым: в каком порядке считаются клеточки каждого кадра и что будет если каждый следующий кадр пересчитывать начиная с рандомного угла?
Static_electro
в "жизни" клетки, которые родятся/умрут на следующем ходу, не могут влиять на выживание или умирание клеток на текущем ходу. Поэтому не важно, с какого угла считать.
eimrine
У меня, лентяя, нету конкретных рисунков, но допустим у нас есть кадр (состояние игры в один момент) в котором умирают M клеток и оживают N. Рассчёт кадра происходит, скорее всего, как в ламповом телевизоре — построчно сверху вниз, каждая строчка слева направо.
Неужели не может быть такое что из-за перемещения первой точки прорисовки, грубо говоря перевернули картинку телевизора на бок, значения M и N меняются из-за другого порядка рассчёта? Типа, вместо того чтобы умерла сначала клетка A потом B, умирает сначала B потом A, что не меняет логику игры, но меняет последовательность, а значит меняется процесс.
navferty
Не совсем так, для каждой клетки судьба определяется состоянием соседних клеток на текущем ходу. Соответственно, пересчитываем судьбу каждой клетки, и после этого переключаем ход, и соответственно уже переводим клетки в новое состояние.
nin-jin
Просто используется два буфера: из одного читаем, в другой пишем. И всё же эффективней хранить не битовое поле NxN и каждый раз бегать по нему всему, а множество с координатами живых клеток и обрабатывать лишь их окрестности, генерируя на каждом шагу новое множество. Тогда можно делать просто огромные поля.
KivApple
На основании текущего состояния строится полностью новое состояние. Можно считать, что поле иммутабельно и каждый кадр — новое поле. Таким образом совершенно не важно в каком порядке будут обрабатываться клетки.
Yermack
Еще должен быть интересен квазинепрерывный вариант жизни (репка, статья с вариантом реализации и ссылками). А здесь, товарищ очень увлекся и выложил реализацию на JS, питоне, матлабе и R с интерфейсом и всеми делами
z0ic
Сто раз спасибо.
iShrimp
Ещё в копилку стоит добавить систему реакции-диффузии:
ArsenAbakarov
Круто, сам когда-то делал эту игру на питоне, получилось такое
Исходники тут
navferty
kylikovskix открыл пулл-реквест, добавил возможность рисовать линии из клеточек, с зажатой левой кнопкой мыши. Жду Вашего ревью =)
kylikovskix Автор
Отлично! Добавил в основную ветку после небольшой модификации.
vyo
Если интересна темы вариаций игры жизнь, то без проекта Golly просто никуда. Идёт с огромным набором примеров конструкций и правил, начиная от классики и заканчивая чуть ли ни 3D.
amvasiljev
Мартин Гарднер «Математические досуги» — книга моего детства. В те времена я построил по этой книге модель самообучающегося робота для игры в шашки с полем 3Х3 из 24-х спичечных коробков. Достаточно большая часть этой книги посвящена игре «Жизнь»
smile616
А ещё есть Golly