Давайте объединим клеточные автоматы с генетическим алгоритмом и посмотрим, что из этого получится.
В статье присутствует 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 #Аномальное программирование #самоорганизация #хаос #генетические алгоритмы #клеточные автоматы #синергетика
-
Как Все Начиналось И Что Из Этого Вышло.
19 Oct, 24 -
Прогноз Цен На Dram
19 Oct, 24 -
Будет Ли Adobe Поддерживать 3D Во Flash?
19 Oct, 24 -
Новый Тип Соцсети - Офисный Туалет
19 Oct, 24