Pergunta

Uma vez eu escrevi um Tetris AI que jogou Tetris muito bem. O algoritmo que eu usei ( descrito neste documento ) é um de dois passos processo.

Na primeira etapa, o programador decide acompanhar entradas que são "interessante" para o problema. Em Tetris que pode estar interessado em rastrear quantas lacunas existem em uma fila porque lacunas minimizando poderia ajudar peças lugar futuros mais facilmente. Outra pode ser a altura média da coluna, pois pode ser uma má idéia para assumir riscos se você está prestes a perder.

O segundo passo é determinar os pesos associados com cada entrada. Esta é a parte onde eu usei um algoritmo genético. Qualquer algoritmo de aprendizagem vai fazer aqui, desde que os pesos são ajustados ao longo do tempo com base nos resultados. A idéia é deixar o computador decidir como a entrada relaciona-se com a solução.

Usando essas entradas e seus pesos podemos determinar o valor de tomar qualquer ação. Por exemplo, se colocando a forma de linha reta todo o caminho na coluna da direita irá eliminar as lacunas de 4 linhas diferentes, então esta ação poderia obter uma pontuação muito elevada, se o seu peso é elevado. Da mesma forma, colocando-o deitado em cima pode realmente causar lacunas e assim que a ação recebe uma pontuação baixa.

Eu sempre quis saber se há uma maneira de aplicar um algoritmo de aprendizagem para a primeira etapa, onde encontramos "interessantes" inputs potenciais. Parece possível escrever um algoritmo onde o primeiro computador aprende o que as entradas possam ser úteis, em seguida, aplica aprender a pesar os insumos. Alguma coisa foi feito assim antes? Está já a ser utilizado em todas as aplicações de IA?

Foi útil?

Solução

Em redes neurais, você pode selecionar 'interessante' entradas possíveis por encontrar os que têm a correlação mais forte, positiva ou negativa, com as classificações você está treinando para. Eu imagino que você pode fazer de forma semelhante em outros contextos.

Outras dicas

Eu acho que poderia abordar o problema que você está descrevendo, alimentando os dados mais primitivas de um algoritmo de aprendizagem. Por exemplo, um estado do jogo tetris pode ser descrito pela lista de células ocupadas. A seqüência de bits que descrevem esta informação seria uma entrada adequada para essa fase do algoritmo de aprendizagem. realmente treinando em que ainda é um desafio; como você sabe se esses são resultados úteis. Eu suponho que você poderia rolar todo o algoritmo em um único blob, onde o algoritmo é alimentado com os estados sucessivos de jogo ea saída seria apenas as colocações de blocos, com algoritmos de pontuação superiores selecionados para as gerações futuras.

Outra opção seria usar um grande corpus de peças provenientes de outras fontes; tais como peças gravadas de jogadores humanos ou um ai, e selecionar os algoritmos quem é saídas têm uma forte correlação com algum fato interessante ou outra da peça futuro, tais como a pontuação ganhou ao longo dos próximos 10 movimentos artesanal.

Sim, há uma maneira.

Se você escolher M recursos selecionados existem 2 ^ M subconjuntos, então não há muito o que olhar. Eu iria para o seguinte:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

Em seguida, para cada par S-W, você pode executar jogos G para cada par e salvar o placar L para cada um. Agora você tem uma tabela como esta:

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

Agora você pode executar algum algoritmo de seleção de componentes (PCA por exemplo) e decidir quais características valem para explicar Scorel.

Uma ponta: Ao executar o código para optimizar W, semear o gerador de números aleatórios, de modo a que cada 'evoluindo cérebro' diferente é testado contra a mesma sequência peça

.

Espero que ajude em alguma coisa!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top