Эволюционирующие клеточные автоматы |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-09-26 04:40
?
Соединим клеточные автоматы с генетическим алгоритмом и посмотрим, что из этого получится. В статье присутствуют Gif (трафик!) и контрастные картинки. У эпилептиков может случиться эпилептический припадок. Правила для клеточных автоматов. Самый простой клеточный автомат — одномерный клеточный автомат (существуют также нульмерные — о них поговорим ниже). В одномерном клеточном автомате у нас есть одномерный массив, ячейки которого (клетки) могут принимать одно из двух состояний (1/0, true/false, белая/черная, живая/мертвая). Следующее состояние клетки в массиве определяется текущим состоянием клетки и состоянием двух соседних клеток, по некоторому правилу. Далее для каждой из комбинаций запишем состояние клетки для следующей итерации (для следующего состояния автомата): Получили правило для клеточного автомата. Правила для одномерных клеточных автоматов кодируются 8 битами («код Вольфрама»). Всего существует элементарных клеточных автоматов: 256 автоматов можно перебрать вручную. Не будем на них останавливаться. Посчитаем количество существующих правил для двухмерных клеточных автоматов. В двухмерном клеточном автомате используется двухмерный массив. У каждой клетки есть 8 соседей в окрестности Мура (существует также окрестность фон Неймана, в которой не учитываются диагональные клетки. Ее в статье не рассматриваем): Для удобства запишем клетки в строку (выбранный порядок будем использовать далее в статье):Для двухмерного клеточного автомата существует комбинаций состояний клетки и 8-ми соседних клеток: Правило для двухмерного клеточного автомата кодируется 512 битами. Всего существует двухмерных клеточных автоматов: Число: больше количества атомов в наблюдаемой Вселенной (). Вручную такое количество автоматов не перебрать. Если бы мы каждую секунду просматривали по одному автомату — за время существования Вселенной мы бы успели просмотреть всего автоматов. Двухмерный клеточный автомат. Напишем двухмерный клеточный автомат с случайным правилом. Правило будем хранить в массиве rule, длина которого rulesize=512: Заполняем массив rule Далее заполняем начальное состояние автомата рандомом: Заполняем начальное состояние автомата (здесь и далее в статье, в качестве ширины и высоты автомата, взято случайное число — не очень большое и не очень маленькое нечетное число 89)Функция, вычисляющая следующее состояние автомата, выглядит следующим образом (чтобы не захламлять — убрал инициализацию холста): Считаем следующее состояние автомата Переменные xm и xp хранят координаты X соседа слева и соседа справа (x minus и x plus). Переменные ym и yp хранят соответствующие Y координаты. Здесь: Поле автомата свернуто в бублик мы задаем периодические граничные условия (поле автомата — поверхность тора). Далее: ... далее в указанном выше порядке записываем содержимое клеток в строку. Переводим строку в десятичное число. Для этой комбинации находим в массиве rule состояние, которое должна принимать клетка с координатами x и y. Оптимизированный вариант После всех итераций заменяем предыдущее состояние автомата новым: заменяем предыдущее состояние новым Автомат рисуем с помощью функции setInterval: setInterval Запустить в браузере Рекомендую 10-20 раз запустить автомат с случайными правилами, прежде чем продолжить чтение статьи. Мы можем очень долго запускать автомат с разными случайными правилами. Картинка, которую мы получим, не будет отличаться от картинки на экране телевизора при отсутствии сигнала: Далее перейдем к настройке нашего «телевизора» с помощью генетического алгоритма.Генетический алгоритм. Размер начальной популяции — 200 автоматов (особей). Для правил, вместо одномерного массива rule будем использовать двухмерный массив population. Первый индекс (n) — номер особи в популяции. Создаем популяцию Массив fitness содержит коэффициенты приспособленности каждой особи. Этот массив заполняем в процессе отбора. После отбора запускаем эволюционный процесс. Эволюционный процесс. Из нашей популяции берем половину наиболее приспособленных (по коэффициенту fitness) особей. Оставшуюся половину уничтожаем. Далее берем по две выжившие особи и скрещиваем их. Для скрещивания выбираем случайную позицию в генотипах двух предков. До этой позиции берем гены от одного предка, после этой позиции — от другого. Помещаем выбранные гены в генотип к одному потомку. Оставшиеся гены — к другому. Двух предков и двух потомков помещаем в новую популяцию. При этом, каждый особь участвует в скрещивании по одному разу. Мутации. С вероятностью 5% у каждой особи мутирует (инвертируется) один случайно выбранный ген. Если повысить вероятность мутаций — удачных мутантов становится больше, но вместе с тем, удачный мутант может не успеть оставить удачное потомство до того, как повторно неудачно мутирует. К этому вопросу вернемся позже.Функция evolute(); Естественный отбор. Перед запуском эволюционного процесса надо произвести отбор. Отбор может быть как естественным, так и искусственным. Искусственный отбор производится вручную — о нем чуть позже. Для естественного отбора мы зададим некоторые критерии и будем отбирать автоматы, которые наилучшим образом соответствуют заданным критериям. Считаем Запускаем. Оптимальное решение найдено на 421-ом цикле эволюции. На графике можно посмотреть прогресс: График масштабирован по оси Y. Нижняя точка — 0, верхняя точка — 7921. Очевидно, что 7921 — оптимальное решение (все клетки в автомате 89х89 соответствуют заданному критерию). После 100 итераций ни одна клетка не изменяет своего состояния. Синие точки на графике — лучшая особь в популяции. Красные — худшая (учитываются только те особи, которые соответствуют второму критерию). Черные точки — средний коэффициент приспособленности для всей популяции (с учетом особей, не соответствующих второму критерию). Второй критерий (баланс между белыми и черными) очень жесткий. Некоторые автоматы не соответствуют второму критерию даже после 421 цикла эволюции. Поэтому черные точки ниже красных. Генофонд популяции (по оси Y — особи, по оси X — гены): Посмотрим, какой канал словил наш «телевизор»: Найденное решение не является единственным оптимальным. Если повторно запустить эволюцию (с случайными начальными генотипами) — найдем другие оптимальные решения. Одно из них:Изменим критерии отбора. Будем считать количество клеток, для которых в окрестности Мура порядка 2 появляется некоторый паттерн. Паттерн возьмем самый простой: Этот критерий интересен тем, что мы проверяем 25 клеток, в то время, как автомат вычисляет состояние клетки исходя из состояний 9 клеток. Критерий очень жесткий. Если взять случайный автомат, после 100 итераций он выглядит так: Ни одна клетка в таком автомате не соответствует заданному критерию. Поэтому немного смягчим критерий: 1. Разрешим сделать одну ошибку в паттерне. 2. Паттерн будем искать не на последней итерации, а на последних 50 итерациях. Второй критерий (баланс между белыми и черными) уберем. Запускаем. График: По оси Y масштаб произвольный. (В предыдущем автомате оптимальное решение — 7921. В этом автомате — около 30.) По оси X — 3569 циклов эволюции. Двумя белыми вертикальными линиями отмечены 500 и 1000 циклов эволюции. Синие точки — лучшая особь в популяции, красные — худшая, черные — средний коэффициент для всей популяции. Решение найдено на первых 500 циклах эволюции. Следующие 500 циклов решение улучшается. И далее система практически перестает эволюционировать. На трех картинках ниже: 500 циклов, 1000 циклов и 3569 циклов эволюции: Генофонд (3569): В динамике: На картинке ниже можно посмотреть, как формируется осциллятор (глайдер) в этом автомате: Мы можем запустить автомат с начальным состоянием, в котором заполнена одна клетка. Далее зафиксировать все комбинации клеток, встречающиеся на следующих итерациях автомата. Массив генов (генотип автомата) — массив всех возможных комбинаций. Выделив из них только встречающиеся комбинации, мы можем легко отметить все гены, которые участвуют в формировании осциллятора. Серые полосы — гены, которые не участвуют в формировании осциллятора: Мутации в отмеченных генах не приживаются из-за того, что нарушают формирование паттерна. В нашем автомате, паттерн (квадрат) формируется только вокруг черной клетки. Попробуем запустить эволюционный процесс вместе со вторым критерием: разница между количеством белых и черных клеток не превышает 400. Запускаем 3569 циклов эволюции. График: На графике черные точки — средний коэффициент приспособленности в популяции. Белые точки — средний коэффициент приспособленности предыдущего автомата. Найдено решение с одной ошибкой в паттерне. Генофонд: 100 первых итераций: Последняя (100) итерация: Немного не тот результат, которого мы ожидали. Черные квадраты есть, белых — нет. Ужесточим второй критерий: разница между количеством белых и черных клеток не превышает 100. Запускаем 14865 циклов эволюции. На графике сравнение средних коэффициентов приспособленности популяций. Синие точки — наш автомат. Белые и черные — предыдущие автоматы. Автомат эволюционирует настолько бодро, что может показаться, что он вообще не эволюционирует. Второй график масштабирован по оси Y. Две белые линии — 500 и 1000 циклов. У лучшей особи в среднем 6 клеток соответствуют заданному критерию. Посмотрим на случайный автомат из популяции. 50 итераций: Последняя (50) итерация: Приемлемый результат не найден. Второй критерий усложняет поиск, поэтому от него откажемся (далее в статье не используем). Оставим этот паттерн и поищем еще несколько других паттернов. Паттерн: Запускаем. 3000 циклов эволюции. График: Генофонд: В динамике (100 итераций): Последняя (100) итерация: Паттерн: В предыдущих автоматах мы разрешили сделать одну ошибку в паттерне. На этот раз поищем точный паттерн. Запускаем 4549 циклов эволюции. График: Белая вертикальная линия — 2500 циклов эволюции. В этот момент (немного ранее) приспособленность популяции начала быстро расти. Сохранил популяцию, чтобы посмотреть на промежуточное решение. Промежуточное решение оказалось гораздо интересней решения на 4549-ом цикле эволюции. Решение, найденное на 4549-ом цикле эволюции: На Gif 100 итераций. Еще после некоторого числа итераций (около 500-2000) состояние автомата практически полностью упорядочено (высота и ширина автомата специально выбраны нечетными числами, чтобы автомат не мог упорядочиться полностью): Автомат с четными размерами сторон, после некоторого числа итераций принимает полностью упорядоченное состояние. Автомат 90х90, примерно 1200 итераций: Промежуточное решение (найденное на 2500-ом цикле эволюции): Данный автомат тоже умеет перерабатывать некоторое начальное хаотическое состояние в некоторое конечное упорядоченное (конечное упорядоченное состояние — смещение паттерна по оси Х влево + несколько клеток-осцилляторов). Автомат 16х16 упорядочился примерно за 100 итераций: 32х32 — около 1000 итераций: 64х64 — около 6000 итераций: 90х90 — около 370000 итераций: 11х11 (нечетные размеры поля автомата) — около 178700 итераций: Автомат 13х13 не упорядочился за приемлемое время. На картинке ниже, автомат на поле 256x256 на 100000-й итерации: Рекомендую посмотреть на этот автомат в динамике на большом поле — очень интересно наблюдать за процессом самоорганизации хаоса в этом автомате: запустить в браузере Генофонд промежуточной популяции: Повторный запуск эволюционного процесса позволяет найти другие решения. Одно из них: Еще один паттерн: При поиске паттерна опять позволим сделать одну ошибку (без ошибок система с выбранным паттерном не эволюционирует). Запускаем. 5788 циклов эволюции. График: Масштаб произвольный. Генофонд: В динамике: Упорядоченное состояние автомата (смещение паттерна вверх по оси Y + несколько клеток-осцилляторов): Гораздо интересней наблюдать не за самим автоматом, а за мутантами, появляющимися в этой популяции: На Gif автомат 256х256. 200 итераций. Остальные итерации можно посмотреть в браузере. На этом можно было бы закончить с естественным отбором и перейти к искусственному, но хочется показать, насколько огромное число. Среди этого числа автоматов мы можем отыскать автомат рисующий любой заданный паттерн (с некоторой точностью для более сложных паттернов). Следующий паттерн: В предыдущих экспериментах мы считали сумму клеток, вокруг которых формируется паттерн (если с одной ошибкой — к сумме прибавляли 1, если без ошибок — прибавляли 2). Полученную сумму использовали в качестве коэффициента приспособленности для генетического алгоритма. Для более сложного паттерна такой способ не работает. Автомат, в котором меньшее число клеток более точно соответствует заданному критерию (количество клеток совпавших с паттерном в окрестности клетки), каждый раз будет проигрывать автомату, в котором большее число клеток менее точно соответствует заданному критерию. Как в примере с квадратами выше: Для искомого паттерна, на 100-й итерации каждого автомата в популяции, в окружении каждой клетки будем считать количество клеток совпадающих с паттерном. Будем брать только наилучший результат для каждого автомата. Количество клеток, совпавших с паттерном, будем использовать в качестве коэффициента приспособленности. Паттерн состоит из 7х17=119 клеток. Это число будем считать оптимальным решением. 6000 циклов эволюции позволили найти автомат, рисующий паттерн с 5-ю ошибками (114 клеток совпадают с паттерном). График в произвольном масштабе: Повышение процента мутаций не ухудшили приспособленность популяции. В генофонде популяции много мутантов: Случайный автомат из популяции в динамике: Лучший автомат на 100-й итерации: Искомый и найденный паттерны: Поигравшись с критериями отбора, размерами поля автомата и процентом мутаций, получилось улучшить популяцию и найти автомат, который делает всего 3 ошибке в паттерне. Генофонд: Автомат на 100-й итерации: Искомый и найденный паттерны: 2 ошибки На четырех графиках можно увидеть, как эволюционирует система с разными вероятностями мутаций (мутирует 1 ген): Красные точки — средний коэффициент приспособленности в популяции. Черные точки — коэффициент приспособленности каждой особи. По 3000 циклов эволюции для каждой системы. Генофонды популяций (в том же порядке): Автоматы на 100-й итерации: Проведем еще один эксперимент. Паттерн тот же. Начальные генотипы заполнены случайными генами. Вероятность мутаций — 5%. От 1-го до 8-ми генов мутируют (для каждой особи берется случайное число мутирующих генов). 100 циклов эволюции. График представляет из себя тепловую карту. Размер точки на графике — 5 пикселей. Начало координат — верхний левый угол. По оси Y (от 0 до 100) — циклы эволюции. По оси X (от 0 до 119) — количество клеток совпадающих с паттерном (для каждой особи в популяции берем наилучший результат). Яркость точки — количество особей с указанным (координата X) результатом. Запустим 4 раза генетический алгоритм с теми же параметрами (100 циклов, 5% мутаций, до 8-ми генов мутируют). На графике все 5 запусков: Следующие 5 запусков: 25% мутаций, до 8-ми генов мутируют: Выборка небольшая, но можно сделать выводы об эффективности повышения процента мутаций. Далее покажу неэффективность используемого в статье способа скрещиваний. Используемый ранее способ: Вместо деления генотипа на две части, потомки будут наследовать случайные гены предков: 5% мутаций: 25%: Далее будем использовать этот способ скрещиваний. На этом с естественным отбором закончим. Если у кого-то есть интересные идеи о критериях для естественного отбора — прошу озвучить их в комментариях. Для искусственного отбора будем использовать клеточные автоматы второго порядка. В процессе написания статьи, система продолжала эволюционировать. Для более точного поиска, размеры поля автомата увеличены до 513х513. Найден автомат, делающий всего две ошибки в паттерне: Second-order cellular automaton Рассмотрим нульмерный клеточный автомат первого порядка (все клеточные автоматы, которые мы рассматривали выше — первого порядка). Нульмерный клеточный автомат состоит из одной клетки. Клетка может находиться в одном из двух состояний. Следующее состояние клетки (t) определяется текущим состоянием клетки (t-1). Всего существует 4 нульмерных клеточных автомата (среди них один осциллятор): клеточных автоматов четвертого порядка одной картинкой показать не получится. Поиск клеточного автомата -го порядка с периодом осцилляции равным — задача нетривиальная и крайне интересная. Эта тема заслуживает отдельной статьи. В одномерных клеточных автоматах второго порядка, следующее состояние клетки определяется текущим состоянием трех клеток и предыдущим состоянием одной клетки: Существует одномерных клеточных автоматов второго порядка. Код: Одномерный клеточный автомат второго порядка Клеточные автоматы второго порядка рисуют более сложные паттерны, чем клеточные автоматы первого порядка. На картинках ниже, несколько случайных автоматов второго порядка (в левой части картинки — в состоянии t-1 заполнена одна клетка, в правой — для случайных состояний t-1 и t-2, двоичный код — содержимое массива rule): 0011111011001000: 0101101110011110: 0110000110010010: 0110011010010110: 1110011010010110: 0110111010000101: 1111101001110110: 1001010001100000: Этот же автомат 256х256: 512х512 Остальные автоматы можно посмотреть здесь: Одномерный клеточный автомат второго порядка. Одномерный клеточный автомат третьего порядка. Об одномерных клеточных автоматах второго порядка можно почитать в книге Вольфрама «A New Kind of Science». Искусственный отбор Подобно одномерному клеточному автомату второго порядка, в двухмерном клеточном автомате второго порядка будем использовать дополнительную клетку из предыдущего (t-2) состояния автомата. — количество существующих двухмерных автоматов второго порядка. Для естественного отбора мы определяли некоторый критерий и сравнивали автоматы по этому критерию. В процессе искусственного отбора, мы выбираем автоматы вручную, пользуясь некоторым невнятным принципом: «этот автомат интересный, а тот — не очень». Данный принцип не позволяет выбирать лучший автомат среди случайных автоматов: Существует несколько способов решить эту проблему. Предлагаю рассмотреть четыре способа. 1. В начальном состоянии автомата заполнена одна клетка Один из способов — наблюдать за развитием клеточного автомата, в начальном состоянии которого заполнена одна клетка. Эти два мигают В популяции присутствует небольшое число автоматов, демонстрирующих менее хаотичное поведение. Их будем отбирать для скрещивания: 20 случайных автоматов из начальной популяции (состояние автоматов на 30-й итерации):После трех циклов эволюции: После восьми циклов эволюции: Восьми циклов эволюции хватило, чтобы заполнить всю популяцию автоматом с определенным признаком (автомат рисующий треугольники). 2. Генотип заполнен частично Если нарушить соотношение единиц и нулей в генотипе — нарушится соотношение единиц и нулей в фенотипе. После восьмого отбора: Появился еще один интересный автомат. 256х256, состояние автомата на 1000-й итераций: Популяция после тринадцати отборов: Несколько автоматов из этой популяции. 256х256, 1000-я итерация для каждого. Под картинкой ссылка, перейдя по которой, можно посмотреть на автомат в динамике: Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. 3. Автомат Конвея и ему подобные Самый известный двухмерный клеточный автомат первого порядка — автомат Конвея Игра «Жизнь». Правила для автомата Конвея записываются следующим образом: Если вокруг мертвой клетки 3 живые клетки — клетка оживает (в противном случае остается мертвой). Если вокруг живой клетки 2 или 3 живые клетки — клетка остается живой (в противном случае умирает). Мертвая клетка — 0, живая клетка — 1. Вокруг клетки может быть от 0 до 8 живых клеток. По 9 вариантов вокруг живой и вокруг мертвой клетки. Запишем все варианты в массив r: массив r Первая половина массива — для мертвой клетки, вторая — для живой. Можем расписать правило автомата Конвея для всех возможных (512-ти) комбинаций клетки и 8-ми соседних клеток: Расписываем правило Оптимизированный вариант Для автомата второго порядка, вторую половину массива rule копируем из первой: Копируем Запускаем автомат с указанным правилом. Видим характерные глайдеры и осцилляторы. Несколько итераций этого автомата: Массив r состоит из 18 ячеек. Существует автоматов подобных автомату Конвея (которые можно записать теми же правилами: количество живых клеток в окружении мертвой, при которых клетка оживает и количество живых клеток в окружении живой, при которых клетка умирает).Посмотреть на них можно здесь (по умолчанию запускается автомат Конвея, кнопка «Change rule» заполняет массив r случайным образом). Несколько случайных автоматов (двоичный код — массив r): 110010011001111111 100001100110111110 011111000100101110 010000110000110010 001111010011100111 000111001000000110 000101100010100001 000001111101011111 000001100110111111 Для генетического алгоритма, в качестве генотипа, можно использовать, как массив r ( комбинаций), так и массив rule ( комбинаций для клеточного автомата первого порядка и — для клеточного автомата второго порядка). — сравнительно небольшое число. Это число позволяет подобрать правило для автомата вручную, без использования генетического алгоритма (собственно, что и сделал Конвей). Если же заполнить массив rule случайными автоматами этого типа и использовать этот массив в качестве генотипа — тогда эксперимент можно считать неудачным, в некоторой степени (в достаточной, чтобы не показывать в статье результаты этого эксперимента). В правилах клеточных автоматов этого типа присутствует симметрия. Например, для следующих комбинаций клеток: ... и для этих состояние клетки на следующей итерации одинаковое. После первого скрещивания нарушается симметрия в правилах особей-потомков. Особи-предки накапливают мутации, которые тоже разрушают симметрию. Нарушение симметрии в генотипе вызывает нарушение симметрии в фенотипе. Можно увидеть проявление этой симметрии в фенотипе, если в начальном состоянии автомата заполнить одну клетку. Проведем эксперимент. Чтобы сохранить симметрию, в качестве генотипа будем использовать массив r. 5% мутаций, мутирует 1 ген. В начальном состоянии заполнена одна клетка. 30 случайных автоматов из начальной популяции. Состояние автоматов на 30-й итерации: Попробуем выделить такие автоматы, которые наиболее медленно развиваются (разрастаются) из одной клетки. После первого отбора избавились от автоматов, которые не развиваются:В новой популяции присутствует несколько таких автоматов (которые не развиваются) — это неудачные потомки и мутанты. Далее отбирать будем преимущественно автоматы с белым фоном (клетки, до которых автомат не развился). Черные автоматы мигают. Популяция после второго отбора: 3 отбора: 5 отборов: 8 отборов: 13 отборов: Те же автоматы на 60-й итерации: 21 отбор. Состояние автоматов на 30-й итерации: Состояние автоматов на 60-й итерации: 34 отбора. Состояние автоматов на 30-й итерации: Состояние автоматов на 60-й итерации: Далее система не эволюционирует. Три автомата из этой популяции (по 100 итераций): [1,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1] Если нулевой ген равен нулю (если в окружении черной клетки все черные — клетка остается черной) — такие автоматы развиваются с одинаковой скоростью. Автоматы с этим геном (нулевой равен нулю) не соответствуют нашему критерию (наименьшая скорость развития). Количество таких автоматов уменьшается с каждым отбором. Если же нулевой ген равен единице — на первой (нечетной) итерации фон меняется на белый. Далее фон может оставаться белым или мигать (на нечетной итерации — белый, на четной — черный). 30-я итерация, на которой мы производим отбор — четная. Избавившись от автоматов с черным фоном (на 30-й итерации) — избавимся от мигающих (чтобы лишний раз не издеваться над нашими многоуважаемыми эпилептиками). [1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1] [1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,1,1] Для сравнения случайный автомат: [1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1] 4. Автомат Конвея и ему подобные (2) В автоматах с правилами Конвеевского типа, мы считаем количество живых (единиц) клеток в окрестности Мура. Эту окрестность можно разбить на 4 пары и считать количество живых клеток в этих парах: Таким образом, мы увеличиваем число автоматов, но сохраняем симметрию в фенотипе. В каждой паре может быть от 0 до 2-х живых клеток. Пар 4. Количество комбинаций . По 81-й комбинации вокруг живой и вокруг мертвой клетки. Всего существует автоматов этого типа.Число:
Вполне астрономическое и сгодится для генетического алгоритма. Заполняем популяцию случайными автоматами Далее расписываем это правило для всех возможных комбинаций клетки и восьми соседних клеток: Функция fillrule(); Массив rule будем использовать при вычислении следующего состояния автомата. Функцию fillrule() вызываем после загрузки страницы и после вызова функции evolute(). Начальная популяция выглядит хаотично. 30 случайных автоматов, 1000-я итерация: Этот хаос немного различается в динамике и автоматы вполне пригодны для отбора, но сделаем проще — будем выбирать «самые темные». Популяция после пяти отборов: Далее можно поискать автоматы, с самыми сложными осцилляторами. Весь процесс выкладывать бессмысленно. Ниже несколько самых интересных автоматов, найденных с помощью генетического алгоритма. 256х256, 10000-я итерация для каждого. Под картинкой ссылка, перейдя по которой, можно посмотреть на автомат в динамике: Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. Посмотреть в динамике. А поиграться? А поиграться можно здесь: Gens — число мутирующих генов. Start evolution — запускает механизм скрещиваний и мутаций. Fill genotype — заполняет указанное число генов в генотипе каждого автомата. Conway — заполняет популяцию автоматами Конвеевского типа. Ниже две строки: Номера показанных автоматов. Содержимое массива fenotype. Генофонд популяции еще ниже. Весь прогресс сохраняется в локальном хранилище (Local Storage). С автоматами Конвеевского типа (с теми, которые рассмотрены в статье последними) можно поиграться здесь: 4. Автомат Конвея и ему подобные (2). Источник: habr.com Комментарии: |
|