Программируем жизнь

Представьте себе двумерную вселенную, состоящую из клеток (как в школьной тетради). Некоторые клетки закрашены — тогда мы говорим, что в них есть жизнь. У каждой клетки есть 8 клеток-соседей

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Введём некоторые правила для нашей жизни:

1. Если у живой клетки меньше 2 соседей, она умирает от одиночества

2. Если у живой клетки 2 или 3 соседа, она продолжает жить

3. Если у клетки более 3 соседей, она умирает от перенаселения

4. Если у неживой клетки ровно 3 соседа, происходит размножение и клетка становится живой

Может ли в такой простой системе возникнуть что-то похожее на столь сложный процесс, как жизнь? Оказывается, может

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Cистема поражает своей непредсказуемостью. Клетки постоянно рождаются и умирают, количество живых клеток то возрастает, то убывает. Иногда через какое-то количество шагов поле остаётся пустым, иногда на нём остаются стабильные структуры, а порой нечто «живое» остаётся в игре очень долго или навсегда

Примеры «существ»

Представьте, квадрат из 4 клеток на поле

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

У каждой клетки квадрата ровно 3 соседа. У клеток по краям — максимум по 2. Это значит, что каждая клетка квадрата будет продолжать жить, а рядом не будут рождаться новые. Такая структура будет существовать на поле вечно!


Но это совсем неинтересно, жизнь ведёт себя не так. У нас получилось что-то вроде окаменелости. Интереснее себя ведёт палка 1 на 3

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

У её центрального элемента 2 соседа, поэтому он остаётся живым. Элементы на краях погибают от одиночества, соседствуя лишь с центром. Зато с другой стороны от центра у мёртвых клеток имеется 3 соседа, поэтому они становятся живыми! Так это существо продолжает жить, переворачиваясь с боку на бок каждый ход

Существуют ещё более крутые конструкции, например, пульсар:

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Но больше всего впечатляют движущиеся элементы! Они повторяют себя, но уже не на том же месте, а немного смещаясь. Например, планер:

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Или даже космический корабль:

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Если вас это ещё недостаточно впечатляет, то посмотрите на планерное ружьё Госпера:

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Это стабильная структура, которая постоянно порождает новые двигающиеся планеры! И это уже действительно напоминает что-то живое. Построить ружьё Госпера можно так:

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Зачем?

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Эта модель называется Игра «Жизнь» Конвея. Её изобрёл британский математик Джон Конвей в 1970 году. До этого известнейший физик Джон фон Нейман предложил нечто похожее. Во времена космической гонки он думал, как колонизировать Марс. Поверхность красной планеты состоит из оксида железа — соединения кислорода и металла!

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Фон Нейман предложил создать роботов, которые бы высадились на поверхность планеты и начали расщеплять материал у себя под ногами на кислород и железо. Кислород бы заполнил атмосферу для будущих колонизаторов, а из железа роботы бы делали свои собственные копии!

Взгляните на такую ситуацию сверху: робот занимает какую-то площадь и производит свои копии, распространяющиеся по бокам. Очень напоминает двумерную Вселенную из нашей модели! Но модель фон Неймана была гораздо сложнее: каждый робот там имел до 20 состояний. Предсказать поведение такой системы невероятно сложно

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Конвей упростил модель фон Неймана до той, что описана в начале поста. Тем не менее, из таких простых правил всё равно рождаются очень сложные, непредсказуемые структуры. Почти никогда нельзя предсказать, вымрет ли система или стабилизируется и за сколько шагов это произойдёт. Эта простая модель очень помогла развитию таких наук, как математика и программирование, и даже биология с химией

Но что будет если всё же добавить сложности в эту модель? Может быть, сделать клеткам возраст, чтобы они умирали, если долго не изменяются, или сделать клетки шестиугольными, а не квадратными? Пишите свои идеи в комментариях, а я попробую их реализовать :)

Также можете поиграть с моделью самостоятельно. Можно заполнить поле случайным образом, изменить масштаб или нарисовать какую-либо фигуру самостоятельно. Пишите, что интересного у вас получилось!

Программируем жизнь Программирование, Наука, Математика, Игра жизнь, Conways game of Life, Человек наук, Гифка, Длиннопост

Моя группа ВК

Лига образования

4.5K поста21.8K подписчиков

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)

25
Автор поста оценил этот комментарий

Чувак, этим сложно проникнуться на уровне постов Пикабу (и уж тем более разобраться и понять до конца), но это и правда охуенно.  

раскрыть ветку (1)
37
Автор поста оценил этот комментарий

На Пикабу крутая аудитория, которая наталкивает на много интересных мыслей :) А до более серьёзных сайтов, типа Хабра, я сам пока не дорос

К тому же, мне самому давно интересно было это запрограммировать. Почему бы ещё и не поделиться :)

показать ответы
32
Автор поста оценил этот комментарий

у меня глайдер на руке

Иллюстрация к комментарию
раскрыть ветку (1)
17
Автор поста оценил этот комментарий

Это круто!

5
Автор поста оценил этот комментарий

Почему-то и автор поста и автор видео используют одинаковые паттерны для движущихся фигур, ощущение, что остальные не такие стабильные и интересные

раскрыть ветку (1)
8
Автор поста оценил этот комментарий

Планер — наименьшая движущаяся фигура, что удобно. Я вообще ничего не использую, в модели всё генерируется автоматически или можно нарисовать самому

10
Автор поста оценил этот комментарий

Баловался этим на ассемблере в 90-х из спортивного интереса. Задачу себе ставил добиться максимальной скорости алгоритма вычисления следующей итерации. В итоге упёрся в скорость работы с памятью.

раскрыть ветку (1)
16
Автор поста оценил этот комментарий

Не смотрите мой код только пожалуйста, там о хорошей производительности и речи нет :/

34
DELETED
Автор поста оценил этот комментарий
"Так это существо продолжает жить, переворачиваясь с боку на бок каждый ход"
Иллюстрация к комментарию
раскрыть ветку (1)
7
Автор поста оценил этот комментарий

Никого не осуждаю :)

14
Автор поста оценил этот комментарий

Мое ружьё Госпера само себя застрелило =(

раскрыть ветку (1)
9
Автор поста оценил этот комментарий

Да, это тоже забавно :D

Автор поста оценил этот комментарий
Скажи, какая проблема в "игре в жизнь"? Может теорема есть недоказанная?
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

1. Люди не умеют предсказывать судьбу конкретной раскладки: за сколько ходов всё исчезнет/стабилизируется

2. Интересная и нетривиальная задача — поиск предыдущего состояния системы

3. Поиск "Райских садов" — раскладок, для которых не существует предыдущих состояний — также непростая задача

4. Теория автоматов — область математики, там, как и везде, хватает неизведанных просторов и недоказанных теорем :)

40
Автор поста оценил этот комментарий

Я как-то тоже делал клеточный автомат, но с правилом "камень, ножницы, бумага". И с элементом рандома, насколько я помню.

https://pikabu.ru/story/kletochnyiy_avtomat_quotkamen_nozhni...


А еще вот классные видосы про игру "жизнь".

https://www.youtube.com/watch?v=C2vgICfQawE - просто эпичные системы

https://www.youtube.com/watch?v=xP5-iIeKXE8 - жизнь в жизни

https://youtu.be/iMvsA8fkVvA?t=20 - музыка, генерируемая жизнью

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Это офигенно круто!

2
DELETED
Автор поста оценил этот комментарий

На Пикабу крутая аудитория, которая наталкивает на много интересных мыслей

Лол :)

раскрыть ветку (1)
7
Автор поста оценил этот комментарий

Это правда так :) Тут очень активные люди по сравнению с ВК: уже немало комментариев. Треша, конечно, тоже много, но куда ж без этого :)

Автор поста оценил этот комментарий

У жизни должен быть цикл. Например, клетка поглащает другие, если у них за определенное время меньше соседей, т.е. они слабее (хуже приспособлены)

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Модели эволюции — это отдельная невероятно интересная история, до которой я однажды доберусь

Автор поста оценил этот комментарий
Привет, возникло пару вопросов.Будешь ли ты ещё на Пикабу выкладывать подобное.И на чем написал эту прогу?
раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Буду :) JavaScript с библиотекой p5.js

показать ответы
3
Автор поста оценил этот комментарий

В первой гифке заметил странный момент-вращающиеся палочки из трех клеток(выглядит как мерцающий крестик). Разве они не должны исчезать по правилам?

раскрыть ветку (1)
7
Автор поста оценил этот комментарий

Они исчезают, просто кадры меняются настолько часто, что наша сетчатка не успевает это осознать :)

показать ответы
2
Автор поста оценил этот комментарий

Так сама палочка из трех точек не исчезает, просто вращается. Что то не так с написанными условиями. По заданным либо клетки по диагонали не считаются соседями, тогда фигура из трех клеток обречена на гибель. Либо считаются, и тогда не могут существовать замершие квадраты в верхнем левом углу-они обязаны размножаться и двигаться

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Клетки по диагонали считаются. И, исходя из этих правил, квадрат — стабильная структура. Рядом не могут родиться клетки, потому что ни у одной нет 3 соседей, клетки квадрата не могут умереть, потому что у всех ровно 3 соседа. Распишите на бумаге и убедитесь, что всё работает :)

Иллюстрация к комментарию
1
Автор поста оценил этот комментарий

Будет время, я на python попробую, а если тормозить будет на кресты перепишу. Чего добавлять в генетику? Есть такие мысли:


1) ограничить клеткам срок жизни. Наследуется от одного из трех родителей случайным образом

2) назначить клеткам цвет. Наследуется аналогично


Можно попробовать еще что-то вроде хематтракции, как в природе. Чтобы клетки могли уходить к соседям.


На полученном автомате можно будет следить какой из цветов выживет среди всех. Можно потом попробовать сцепленное наследование, типа голубые живут 20 итераций, желтые 30, красные 60, черные 5

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Собственно, возраст я добавил. Если интересно, вот :) https://pikabu.ru/story/modeliruem_zhizn_6406318

Автор поста оценил этот комментарий
Фон Нейман физик...........
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я только что закончил курс квантфиза, где его имя постоянно звучало, это повлияло, наверное :) Он внёс большой вклад в физику в том числе. Просто она сильно математизировалась в 20 веке

Автор поста оценил этот комментарий

Я неправильно собрала ружьё Гаспера и вместо регулярно прибывающих планеров получила ружьё полностью развалившееся на кучку расползшихся в разных направлениях планеров, которые потом переубивали друг друга :(

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я считаю, это даже круче :D

1
Автор поста оценил этот комментарий

Будет время, я на python попробую, а если тормозить будет на кресты перепишу. Чего добавлять в генетику? Есть такие мысли:


1) ограничить клеткам срок жизни. Наследуется от одного из трех родителей случайным образом

2) назначить клеткам цвет. Наследуется аналогично


Можно попробовать еще что-то вроде хематтракции, как в природе. Чтобы клетки могли уходить к соседям.


На полученном автомате можно будет следить какой из цветов выживет среди всех. Можно потом попробовать сцепленное наследование, типа голубые живут 20 итераций, желтые 30, красные 60, черные 5

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я думал добавить возраст клеткам

1. Клетка, которая выживает 10 поколений подряд, погибает. Можно красиво визуализировать, повышая прозрачность на 10% с каждым шагом

2. Клетка, возраст которой больше 7 не может помочь в воспроизведении потомства. То есть, она не считается соседом мёртвых клеток, но считается соседом живых и тратит ресурсы — может привести к гибели от перенаселения. Снизу тоже можно ограничить :)


Сюда же, кстати, можно добавить эволюцию через варьирование репродуктивного возраста у клеток. Только надо какие-то ещё ограничения придумать, иначе ясно, что победят те клетки, которые все 10 лет размножаются


Ещё интересно добавить случайным образом возникающие живые клетки и наоборот случайные вымирания. Приближаем к реальной жизни :)

Автор поста оценил этот комментарий
В институте тоже писал лабу такую. Только добавляли, что клетка умирает не один,а несколько ходов. Цвет клетки становился светлее. А еще помню фракталы — выглядело завораживающе.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, я тоже писал фракталы :) https://pikabu.ru/story/fraktalyi_6185985

Автор поста оценил этот комментарий

Есть где вариант, где можно самому настраивать правила?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Сделаю в следующих версиях :)

Автор поста оценил этот комментарий

можете скачать game of life , у меня уже лет 10 лежит на компе. вариант по ссылке мелковат

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Там разрешение и размер можно какие угодно в теории поставить, но я не очень думал над производительностью в этот раз, поэтому поставил ограничение :) Если буду развивать, сделаю поумнее и попросторнее

показать ответы
Автор поста оценил этот комментарий
А не пробовал никто по этим правилам забабахать ртс? Клетки двух цветов, но поддаются общим правилам, и тебе нужно так их распространить, построить или заставить самоорганизоваться такие структуры, чтобы вражеские клетки вымерли.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Крутая идея :)

Автор поста оценил этот комментарий

Я когда то тоже этим баловался. https://yadi.sk/d/ZabDwTXmtAXhF - вот что вышло в итоге (p.s. забросил). Для нормального вида надо указать размеры окна строки командной ширину 80. Только у меня не только был подход с if, но и все процессы разделены на вероятности с разными шансами. Хотел потом увеличить кол. растений - есть тоже програмулька - там еще цветы добавил и кол увеличил до 6 с возможностью объединения в новые.
И если реально хочется симулировать жизнь - добавляй вероятность события (тогда будет потрясно и структур не будет окаменевших)

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, отличная мысль!

Автор поста оценил этот комментарий

У нас есть четко зарезервированная система правил на плоскости, значит перед нами варианты Тьюрмитов. Если позволить клеткам "размножаться" бесконечное количество итераций, могут появиться фрактальные структуры.


И это не жизнь, а программа. Потому что жизнь НЕ ДЕТЕРМИНИРОВАНА. Кто-нибудь строил клеточные автоматы с долей псевдорандома? Было бы интересно посмотреть на таймлапс

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Добавлю рандом, тоже интересно

показать ответы
1
Автор поста оценил этот комментарий
Сейчас возникла мысль. Можно будет сделать нечто подобия конструктора подобной "жизни". Где будет возможность выбора задания правил пользователем. И это не намек вам сделать, а сам пожалуй запилю, когда будет время)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, я тоже хотел так сделать :)

1
Автор поста оценил этот комментарий

Я тут заметил: Джон фон Нейман, Джон Конвей, Джон в скрине с твиттера. Кажется, эта тема ломает матрицу