Trata-se de um jogo bem simples, onde o Dino precisa desviar dos obstaculos.
- game_frame.py:
-> Função: Detectar os elementos que serão manipulados futuramente;
- run.py:
-> Importa game_frame;
-> Função: Manipulação dos elementos coletados pela classe 'game_frame';
-> PyAutoGui: funções de teclado e mouse;
- AIs.py:
-> Importa run;
-> Função: O 'cerebro' do projeto;
- Treino:
-> Importa run e AIs;
-> Implementa o algoritmo SPSA. - http://www.jhuapl.edu/SPSA/Pages/MATLAB.htm;
-> SPSA - Função: Otimizar o vetor de escolhas, para obter maior pontuação;
Caso não saiba criar uma venv: Instale o python; Siga a documentação: https://virtualenv.pypa.io/en/stable/installation/
Pelo prompt: Vá para a pasta da venv criada localmente e abra a pasta Scripts; rode: $activate;
$pip3 install pyautogui
$pip install opencv-python
&
$pip install -r dependencias
-
Abra o jogo: Para o código funcionar da melhor forma abra o jogo da seguinte forma:
- Abra uma nova aba no Chrome;
- Com o botão direito do mouse selecione "inspecionar";
- Em network, marque a opção "offline";
- Tente carregar qualquer link; Pronto, nesse momento o game deve ter aparecido na tela.
-
Rode:
$python treino.py
-
OpenCV para encontrar o local da tela onde está o jogo.
-
Então é usado o MSS para capturar essa tela e deixar em escala de Cinza.
-
Para encontrar os obstáculos: média dos valores dos pixels da coluna. As colunas que forem escurar o suficiente serão obstáculos.
A distancia entre a ação de pular do Dino e os obstaculos é definida assim:
Podemos pensar em nossa estratégia de IA como uma função que toma como entrada o estado * s * e retorna um escalar entre 0 e 1 de tal forma que se o escalar estiver acima de 0,5 o dinossauro deve pular.
O método fit da estratégia é o tempo de execução esperado do jogo. É impossivel medir diretamente o tempo de execução esperado, mas é possível obter uma estimativa usando a média de * n * execuções diferentes.
Esta IA apenas diz "Se o obstáculo mais próximo estiver a menos de * x * pixels de distância, pule"
Foi utilizado o algoritmo SPSA (simultaneous perturbation stochastic approximation) para otimizar o vetor para obter a pontuação máxima esperada. O 'custo' de cada execução é implementado como a pontuação negativa para três execuções diferentes.
O SPSA foi escolhido porque usa somente medições de função, rápido (requer apenas duas medições de função de objetivo por iteração, independentemente da dimensão do problema de otimização).