Развивающиеся Клеточные Автоматы



Развивающиеся клеточные автоматы

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

В статье присутствует Gif (трафик!) и контрастные картинки.

У эпилептиков может случиться эпилептический припадок.



Правила для клеточных автоматов

Простейший клеточный автомат – это одномерный клеточный автомат (есть и нульмерные – о них мы поговорим ниже).

В одномерном клеточном автомате мы имеем одномерный массив, ячейки которого (ячейки) могут принимать одно из двух состояний (1/0, истина/ложь, белое/черное, живое/мертвое).

Следующее состояние ячейки массива определяется текущим состоянием ячейки и состоянием двух соседних ячеек по некоторому правилу.

Всего существует

Развивающиеся клеточные автоматы

комбинации состояний ячейки и двух соседних ячеек:

Развивающиеся клеточные автоматы

Далее для каждой из комбинаций записываем состояние ячейки для следующей итерации (для следующего состояния автомата):

Развивающиеся клеточные автоматы

У нас получилось правило клеточного автомата.

Правила одномерных клеточных автоматов кодируются 8 битами («код Вольфрама»).

Всего существует

Развивающиеся клеточные автоматы

элементарные клеточные автоматы:

Развивающиеся клеточные автоматы

256 машин можно рассортировать вручную.

Не будем на них останавливаться.

Подсчитаем количество существующих правил для двумерных клеточных автоматов.

2D клеточный автомат использует 2D массив.

Каждая ячейка имеет 8 соседей в окрестности Мура (есть также окрестность фон Неймана, в которой не учитываются диагональные клетки.

В статье она не рассматривается):

Развивающиеся клеточные автоматы

Для удобства напишем ячейки в одну строку (выбранный порядок мы будем использовать далее в статье):

Развивающиеся клеточные автоматы

Для двумерного клеточного автомата существует

Развивающиеся клеточные автоматы

комбинации состояний ячеек и 8 соседних ячеек:

Развивающиеся клеточные автоматы

Правило двумерного клеточного автомата кодируется 512 битами.

Всего существует

Развивающиеся клеточные автоматы

двумерные клеточные автоматы:

Развивающиеся клеточные автоматы

Число:

Развивающиеся клеточные автоматы

более количество атомов в наблюдаемой Вселенной (

Развивающиеся клеточные автоматы

).

Перебрать такое количество машин вручную невозможно.

Если бы мы каждую секунду смотрели на один игровой автомат, за время существования Вселенной мы бы успели посмотреть всё.



Развивающиеся клеточные автоматы

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

Мы будем программировать на JavaScript. Все фрагменты кода скрыты под спойлерами, чтобы не смущать читателей, не знакомых с языками программирования.



Двумерный клеточный автомат

Напишем двумерный клеточный автомат со случайным правилом.

Мы будем хранить правило в массиве правил, длина которого rulesize=512: Заполнение массива правил

  
   

var rulesize=512; var rule=[]; for(var i=0;i<rulesize;i++) rule[i]=Math.round(Math.random());

Далее заполняем начальное состояние машины случайным образом: Заполнение исходного состояния машины

var sizex=89; var sizey=89; var size=2; var a=[]; for(var x=0;x<sizex;x++){

Теги: #эволюция #Машинное обучение #математика #Алгоритмы #JavaScript #Аномальное программирование #самоорганизация #хаос #генетические алгоритмы #клеточные автоматы #синергетика
Вместе с данным постом часто просматривают: