Construa uma IA para ganhar o jogo 2048
A coisa mais importante sobre 2048 é alcançar a pontuação mais alta movendo ladrilhos e fundindo o mesmo ladrilho.
Temos que definir como mover telhas em um jogo e como gerar novos ladrilhos após cada movimento.
Os códigos estão no Env.py
Minha primeira tentativa é usar o método de busca de árvores de Monte Carlo para vencer o jogo. Tentei passar por todos os movimentos possíveis na profundidade de pesquisa fornecida e, em seguida, comparei as pontuações no resultado de escolher a melhor decisão na situação específica.
Os códigos estão no 2048_Search.py
Neste método, defina a profundidade de 1 a 5 e fui 100 vezes em cada profundidade.
Aqui está algum resultado.
PS: A taxa média de vitória representa a chance de chegar a 2048.
Pontuação máxima média: 210.24
Taxa de vitória média: 0%
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
32 | 1 | 1% | 100% |
64 | 6 | 7% | 99% |
128 | 39 | 46% | 93% |
256 | 47 | 93% | 54% |
512 | 7 | 100% | 7% |
1024 | 0 | 100% | 0% |
Pontuação máxima média: 1223.68
Taxa de vitória média: 30%
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
256 | 4 | 4% | 100% |
512 | 19 | 23% | 96% |
1024 | 47 | 70% | 77% |
2048 | 29 | 99% | 30% |
4096 | 1 | 100% | 1% |
8192 | 0 | 100% | 0% |
Pontuação máxima média: 1646.08
Taxa de vitória média: 54%
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
256 | 1 | 1% | 100% |
512 | 9 | 10% | 99% |
1024 | 36 | 46% | 90% |
2048 | 48 | 94% | 54% |
4096 | 6 | 100% | 6% |
8192 | 0 | 100% | 0% |
Pontuação máxima média: 2216.96
Taxa de vitória média: 78%
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 3 | 3% | 100% |
1024 | 19 | 22% | 97% |
2048 | 58 | 80% | 78% |
4096 | 20 | 100% | 20% |
8192 | 0 | 100% | 0% |
Pontuação máxima média: 2467,84
Taxa de vitória média: 78%
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 2 | 2% | 100% |
1024 | 20 | 22% | 98% |
2048 | 48 | 70% | 78% |
4096 | 29 | 99% | 30% |
8192 | 1 | 100% | 1% |
Meu computador MacBook Pro 15 "2012 (MID) não consegue lidar com a enorme quantidade de computação. Para aqueles que estão interessados neste tópico, podem tentar definir o número de profundidade maior para ver o que está acontecendo.
Eu tentei uma abordagem diferente para esse problema. No estágio de início do jogo, usei uma pequena profundidade para procurar para acelerar o processo. A profundidade começa a partir de 2 e fica mais maior após cada 400 movimentos até chegar à profundidade definida.
Eu executei 200 épocas e apenas 42,5% do total de jogos atingem a profundidade 6. No entanto, o resultado da profundidade 6 é bastante impressionante.
Alcance máximo | Contagens | Acumular % | Reverso acumular % |
---|---|---|---|
1024 | 1 | 1,18% | 100% |
2048 | 50 | 60% | 98,8% |
4096 | 34 | 100% | 40% |
Na profundidade 5, a pontuação e o número correspondente de movimento. Podemos ver que, em média, precisamos nos aproximar de 1600 etapas para chegar a 2048.
Alcance máximo | Contagens | Soma de movimentos | Números médios de movimento por jogo |
---|---|---|---|
512 | 2 | 1172 | 586 |
1024 | 25 | 25321 | 1012.84 |
2048 | 56 | 93276 | 1665.64 |
4096 | 17 | 48163 | 2833.12 |
Depois de implementar o método de pesquisa, estudei algum método de aprendizado de reforço (RL). Para entender de maneira mais abrangente sobre o RL, implementei o DQN, que é um ramo principal do RL no jogo 2048.
O DQN está usando o valor Q como recompensa para avaliar a decisão que a máquina toma.
Os códigos estão na pasta DQN.
Sarsa também é um tipo de RL. SARSA é um pouco diferente do DQN.
Em suma, a diferença é que a política da SARSA escolhe a maneira mais segura de evitar o fracasso (jogo acabado) no jogo.
Por outro lado, a política do DQN sempre escolhe o caminho para atingir as pontuações mais altas e, às vezes, obter fracasso no início do jogo.
Os códigos estão na pasta SARSA.