В клеточных автоматах есть действительно важная проблема, называемая проблемой большинства :
Проблема большинства или задача классификации плотности - это проблема поиска одномерных правил клеточных автоматов, которые точно выполняют голосование большинством.
...
Учитывая конфигурацию сотовых автоматов с двумя состояниями с общим количеством ячеек i + j, i из которых находятся в нулевом состоянии, а j из которых находятся в одном состоянии, правильное решение проблемы голосования должно в конечном итоге установить все ячейки в ноль, если i> j и должен в конечном итоге установить все ячейки в одну, если i <j. Желаемое конечное состояние не определено, если i = j.
Хотя было доказано, что ни один клеточный автомат не может решить проблему большинства во всех случаях, существует множество правил, которые могут решить ее в большинстве случаев. Автомат Гакса-Курдюмова-Левина имеет точность около 78% при случайных начальных условиях. Правило GKL не сложно:
- Радиус 3, означающий, что новое состояние ячейки зависит от 7 предыдущих ячеек: самой, 3 ячеек справа и 3 ячеек слева.
- Если ячейка находится в данный момент
O
, ее новое состояние является большинством самого себя, ячейка слева, а ячейка 3 ступеньки слева. - Если ячейка находится в данный момент
1
, ее новое состояние - это большинство ее самого, ячейка справа, а ячейка 3 ступеньки справа.
Вот пример:
0 1 0 1 1 1 0 1 1 0 1 0 0 1
0 1 1 1 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 1 1 1 1 0 1 0 0 0
0 1 1 1 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 1 1 0 1 0 1 0 1 0
0 1 1 1 1 1 0 1 0 1 0 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
В этом примере клеточный автомат правильно рассчитал, что 8> 6. Другие примеры занимают более длительные периоды времени и в то же время производят несколько крутых паттернов. Ниже приведены два примера, которые я случайно нашел.
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1
Взяв его на следующий уровень
Насколько показали мои исследования в Интернете, почти все академические исследования по проблеме большинства были проведены с ЦС с двумя штатами. В этой задаче мы собираемся распространить проблему большинства на ЦС с тремя государствами . Я назову это проблемой множественности . Множественность , или относительное большинство, относится к условию, при котором один из вариантов имеет больше голосов, чем каждый из вариантов, но не обязательно большинство всех голосов.
Постановка задачи
- Существует трехмерный 1-клеточный автомат с радиусом 3.
- Есть 151 ячейка с круговым граничным условием.
- Этим ячейкам присваивается случайное начальное состояние, при условии, что 1 из 3 состояний имеет строгое множество. «Случайный» означает независимое равномерное распределение для каждой ячейки.
- Точность правила - это процент (действительных) случайных начальных условий, при которых все ячейки синхронизируются с правильным состоянием (ячейкой с множеством) в течение 10000 поколений .
- Цель состоит в том, чтобы найти правило с высокой точностью,
Пограничные случаи множественности: любая конфигурация с 50/50/51 является допустимой начальной конфигурацией (поскольку существует строгое множество), в то время как любая конфигурация с 51/51/49 недопустима (поскольку не существует строгого множества).
Пространство поиска составляет 3 ^ 3 ^ 7 (~ 3e1043), далеко за пределами досягаемости любого исчерпывающего поиска. Это означает, что вам нужно будет использовать другие методы, такие как генетические алгоритмы, чтобы решить эту проблему. Это также займет немного человеческой инженерии.
Правило генерации 10000 может быть изменено в зависимости от времени выполнения / точности правил, которые люди находят. Если он слишком низок, чтобы разрешить разумные скорости сходимости, тогда я могу поднять его. Кроме того, я могу опустить его, чтобы он служил в качестве разрыва связи.
выигрыш
Победителем становится тот, кто с максимальной точностью подает правило CA радиуса-3 из всех участников.
Ваша заявка должна включать ...
- Описание правила ( при необходимости используйте код Wolfram )
- Точность и размер выборки
- Объяснение разумного размера того, как вы обнаружили правило, включая программы, которые вы написали для его решения, или любое «ручное» проектирование. (Это самая интересная часть, поскольку все остальное - просто необработанные числа.)
Предыдущая работа
- Документ Жюля и Поллака , описывающий, как они развили правило 2-х состояний с точностью 86%.
- В этой статье использовались r = 3, 149-элементные ЦС с двумя состояниями. Однако он не пытался решить проблему большинства, а вместо этого нашел правила, которые быстро приводили к чередующемуся
1
общему0
шаблону. Несмотря на эти различия, я подозреваю, что многие методы будут похожими. - Wolz и de Oliviera (не очень полезная, потому что за платной платой) бумага, в которой в настоящее время находится рекорд с двумя государствами
Ответы:
Сорт ГКЛ плюс альпинизм, 61,498%
Если ячейка равна 0, посмотрите на ячейки 3 слева, 1 слева и на себя. Установите значение для большинства. Если это галстук, оставайся таким, какой ты есть.
Если ячейка - 1, посмотрите на ячейки 3 справа, 1 справа и на себя. Установите значение для большинства. Если это галстук, оставайся таким, какой ты есть.
Если ячейка представляет собой 2, посмотрите на ячейки 2 слева, 2 справа и 3 справа. Установите значение для большинства. Если это галстук, оставайся таким, какой ты есть.
Я получил 59453 из 100000, 59,453%
Некоторые мутации и восхождения на холмы привели к 61498/100000 = 61,498%.
Я, вероятно, протестирую немного больше и позже опубликую некоторую информацию.
источник
«Просто брось 2 и сделай ГКЛ» - 55,7%
Не так легко угадать, каким будет хорошее правило, поэтому я попытался хотя бы придумать что-то, что получило бы оценку выше 1/3. Стратегия состоит в том, чтобы попытаться получить правильный ответ, когда состояние большинства равно 0 или 1, и принять убыток, если он равен 2. Он набрал 56,5% за 100 000 испытаний, что несколько лучше, чем ожидалось бы при умножении на 78% ( оценка ГКЛ) * 2/3 (доля времени, когда ответ равен 0 или 1) = 52%.
Конкретнее, стратегия заключается в следующем:
Я использовал этот код для проверки:
источник
«Просто кради все лучшее и развивай», блеф
Изменить: в своем текущем состоянии этот ответ, а не поиск лучших образцов, находит лучшую случайную выборку.
Этот ответ кодирует / декодирует решения путем перечисления всех состояний в виде троичных чисел (сначала младшая цифра). Раствор на 59,2%:
Этот ответ был получен из 55,7% feersum с использованием следующего кода. Этот код требует libop , который является моей личной библиотекой C ++ только для заголовков. Его очень легко установить, просто сделайте
git clone https://github.com/orlp/libop
в том же каталоге, в котором вы сохранили программу. Я предлагаю компилировать сg++ -O2 -m64 -march=native -std=c++11 -g
. Для быстрой разработки я также предлагаю предварительно скомпилировать libop, выполнив приведенную выше командуlibop/op.h
.источник
Ручной код, 57,541%
Это на самом деле только смотрит на 5 клеток над ним. Возможно, это можно улучшить, увеличив дальность, на которую он смотрит. Побежал с 100 000 тестов.
Алгоритм:
Ген:
Тестовый код:
пример
источник