Há um problema realmente importante nos autômatos celulares chamado problema de maioria :
O problema da maioria, ou tarefa de classificação de densidade, é o problema de encontrar regras unidimensionais de autômatos celulares que executam com precisão a votação majoritária.
...
Dada a configuração de um autômato celular de dois estados com o total de células i + j, i no estado zero e j no estado único, uma solução correta para o problema da votação deve eventualmente definir todas as células como zero se i> j e, eventualmente, deve definir todas as células para uma se i <j. O estado final desejado não é especificado se i = j.
Embora tenha sido comprovado que nenhum autômato celular pode resolver o problema da maioria em todos os casos, existem muitas regras que podem resolvê-lo na maioria dos casos. O autômato Gacs-Kurdyumov-Levin tem uma precisão de cerca de 78% com condições iniciais aleatórias. A regra GKL não é complicada:
- Raio 3, o que significa que o novo estado da célula depende de 7 células anteriores: ela mesma, as 3 células à direita e as 3 células à esquerda.
- Se uma célula está atualmente
O
, seu novo estado é a maioria em si mesma, a célula à esquerda e a célula 3 passos à esquerda. - Se uma célula está atualmente
1
, seu novo estado é a maioria em si, a célula à direita e a célula 3 se move à direita.
Aqui está um exemplo:
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
Neste exemplo, o autômato celular calculou corretamente que 8> 6. Outros exemplos levam mais tempo e produzem alguns padrões interessantes nesse meio tempo. Abaixo estão dois exemplos que encontrei aleatoriamente.
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
Levando para o próximo nível
Até onde minha pesquisa na Internet mostrou, quase toda a pesquisa acadêmica sobre o problema da maioria foi realizada com autoridades de certificação de dois estados. Nesse desafio, expandiremos o problema da maioria para CAs de três estados . Vou chamar isso de problema da pluralidade . Pluralidade , ou maioria relativa, refere-se à condição em que uma das opções tem mais votos do que cada uma das alternativas, mas não necessariamente a maioria de todos os votos.
Declaração do Problema
- Existe um autômato celular 1D de 3 estados com raio 3.
- Existem 151 células com uma condição de contorno circular.
- Essas células recebem um estado inicial aleatório, com a única condição de que 1 dos 3 estados possua uma pluralidade estrita. "Aleatório" significa uma distribuição uniforme independente para cada célula.
- A precisão de uma regra é a porcentagem de condições iniciais aleatórias (válidas) nas quais todas as células são sincronizadas com o estado correto (aquele com pluralidade) dentro de 10000 gerações .
- O objetivo é encontrar uma regra com alta precisão,
Casos extremos de pluralidade: qualquer configuração com 50/50/51 é uma configuração inicial válida (já que existe uma pluralidade estrita), enquanto qualquer configuração com 51/51/49 não é válida (já que não existe uma pluralidade estrita).
O espaço de pesquisa é 3 ^ 3 ^ 7 (~ 3e1043), muito fora do alcance de qualquer pesquisa exaustiva. Isso significa que você precisará usar outras técnicas, como algoritmos genéticos, para resolver esse problema. Também será necessária alguma engenharia humana.
A regra de 10000 gerações está sujeita a alterações, dependendo dos tempos de execução / precisão das regras que as pessoas encontram. Se for muito baixo para permitir taxas razoáveis de convergência, posso aumentá-lo. Como alternativa, posso baixá-lo para servir como desempate.
Ganhando
O vencedor é a pessoa que envia a regra de CA do raio 3 com a maior precisão dentre todos os competidores.
O seu envio deve incluir ...
- Uma descrição da regra (usando o código Wolfram, se necessário)
- A taxa de precisão e tamanho da amostra
- Uma explicação de tamanho razoável de como você descobriu a regra, incluindo programas que você escreveu para resolvê-la ou qualquer engenharia "manual". (Essa é a parte mais interessante, pois tudo o resto são apenas números brutos.)
Trabalho prévio
- Um artigo de Juille e Pollack , descrevendo como eles desenvolveram uma regra de dois estados com 86% de precisão.
- Este artigo utilizou r = 3, 149 células, CAs de 2 estados. Contudo, não tentou resolver o problema da maioria, mas sim encontrar regras que rapidamente
1
resultassem em um0
padrão alternativo de todos . Apesar dessas diferenças, suspeito que muitas técnicas serão semelhantes. - Um artigo (não muito útil porque está por trás de um paywall) de Wolz e de Oliviera que atualmente detém o recorde de dois estados
fonte
Respostas:
Tipo de GKL mais escalada, 61.498%
Se uma célula é um 0, observe as células 3 à esquerda, 1 à esquerda e ela mesma. Defina o valor para maioria. Se é um empate, fique do jeito que está.
Se uma célula é 1, observe as células 3 à direita, 1 à direita e ela mesma. Defina o valor para maioria. Se é um empate, fique do jeito que está.
Se uma célula é um 2, observe as células 2 à esquerda, 2 à direita e 3 à direita. Defina o valor para maioria. Se é um empate, fique do jeito que está.
Eu consegui 59453 do total de 100000, 59,445%
Algumas mutações e escaladas resultaram em 61498/100000 = 61,498%.
Provavelmente testarei um pouco mais e publicarei mais algumas informações mais tarde.
fonte
"Apenas jogue fora os 2s e faça GKL" - 55,7%
Não é tão fácil adivinhar qual seria uma boa regra, então tentei pelo menos encontrar algo que tivesse uma pontuação acima de 1/3. A estratégia é tentar obter a resposta certa quando o estado majoritário é 0 ou 1 e aceitar a perda se for 2. Ele marcou 56,5% em 100.000 tentativas, o que é de alguma forma um pouco melhor do que o que seria esperado com a multiplicação de 78% ( pontuação de GKL) * 2/3 (fração do tempo em que a resposta é 0 ou 1) = 52%.
Mais concretamente, a estratégia é a seguinte:
Eu usei esse código para testar:
fonte
"Apenas roube o que há de melhor e evolua", bleh
Editar: no estado atual, essa resposta, em vez de encontrar melhores padrões, encontra uma amostra aleatória melhor.
Esta resposta codifica / decodifica soluções enumerando todos os estados como números ternários (primeiro dígito menos significativo). A solução para 59,2%:
Esta resposta foi desenvolvida a partir de 55,7% do feersum, usando o código a seguir. Esse código requer libop , que é minha biblioteca pessoal somente de cabeçalho C ++. É muito fácil de instalar, basta fazer
git clone https://github.com/orlp/libop
no mesmo diretório em que você salvou o programa. Eu sugiro compilar comg++ -O2 -m64 -march=native -std=c++11 -g
. Para um desenvolvimento rápido, também sugiro pré-compilar a libop executando o comando acimalibop/op.h
.fonte
Codificado manualmente, 57.541%
Na verdade, isso apenas analisa as 5 células acima dela. Provavelmente poderia ser melhorado aumentando o alcance que ele olha. Funcionou com 100.000 casos de teste.
Algoritmo:
Gene:
Código de teste:
Exemplo
fonte