Máquina de Aprendizagem (Q-Learning)

Conceito do algoritmo:

O algoritmo de "Q-Learning" trata o sistema como um grafo de estados que são influenciados por suas respectivas ações.

- Algoritmo do tipo "Model-Free" :

Após executar uma ação um valor de feedback é dado normalmente é um valor entre -1 e 1 que influencia diretamente na ação a ser executada pelo algoritmo, representando o quanto essa ação é boa para um determinada situação.

Q(s,a) = (1-α)Q(s,a) + α(r + y max (Q(s’, a’)))

'''α = taxa de aprendizado [0;1] '''r = reforço (bônus) y = desconto (penalização)

Exemplo Aplicado :

O exemplo abaixo foi construído na Unity, com a ideia de treinar uma ia que consiga superar os desafios impostos na fase.

Obs.​ : A direção que o cubo toma é decidida de forma randômica, porém ele possui mais chances de virar a esquerda e a direita do que seguir em frente. O Cubo se locomove entre os nodos, e ao mesmo tempo analisa se o id desse nodo já está na lista, caso não esteja o adiciona. também adicionando 3 variáveis float na lista de QSA sendo que cada valor representa a pontuação para uma ação (caminhar,pular,voltar) Chegando em um nodo ele chama o Start learning // Que recebe o id do nodo e checa qual a melhor ação a ser tomada.

- ID = Plataforma //​ o Cubo permanece caminhando

- ID = Hole //​ o Cubo caminha, cai e volta para o início da fase, na segunda tentativa ele pula e assim começa a pular todos os buracos

- ID = DeathHole //​ O cubo caminha cai e volta para o início da fase, na

segunda tentativa ele pula também retornando para o início e finalmente na terceira ele volta para um nodo predeterminado.

- ID = Final //​ O cubo ficará parado no final até que saia do modo play.

- O cálculo de Ajuste

- aux =​ é a posição do id do nodo em uma lista

- numbAções = ​Quantidade de ações que o cubo pode fazer

- action =​ Qual ação o cubo tentou efetuar

- alpha = ​0.5f

- QS list [aux * numbDeAções + action] = Posição que corresponde a uma determinada ação de um id

por exemplo: aux = 0 (plataforma) * numbDeAções = 3 (mover,pular,moverParaTrás) + action ( 0 = mover, 1 = pular , 2 = moverParaTrás)

QSlist [aux * numbDeAções + action] = (1 - alpha) * QSlist[aux * numbDeAções + action] + alpha

( reinforcement * QSlist[aux * numbDeAções + action])

// Identificando uma posição e colocando o valor do cálculo na mesma;

Link do Vídeo : https://youtu.be/bAq99kIKka0