Projeto

Geral

Perfil

Atividade #1323

Atualizado por Felipe Welingtonmais de 4 anos

     Felipe Welington escreveu: 
  Visando o avanço do âmbito da inteligência artificial no mundo e nas competições, eu busquei implementar um código funcional no labview com um fps aceitável para verificar a compatibilidade do nosso código com algoritmos de IA. 
     Nesse aspecto, cabe algumas explicações. 
  *    Como linguagem de programação foi usado o Python, para tal eu usei a função **python node** do labview. 
  {{thumbnail(Pythonnode.png,size=600)}} 
  
  Ao rodar o código python pela primeira vez necessita que seu pc tenha uma versão do python compatível, após isso o labview cria um arquivo .cpython que é um "compilado" do código. Assim, após novamente usar o labview ele usa esse compilado, podendo ser usado em qualquer pc,mesmo que não tenha o python. 
  {{thumbnail(Compilado.png,size=600)}} 
 
  O algoritmo que escolhi foi o de aprendizado por reforço, usando rede neurais e o objetivo seria a movimentação do robô 
  Na prática o algoritmo funciona como o aprendizado de uma criança, ele está em uma situação e coleta dados do ambiente, dai como qualquer criança ele erra e é punido com isso com uma recompensa negativa, por exemplo, 
  1. Se chocar com o robô inimigo 
  2. Se afastar demasiadamente do campo 
  3. Se afastar do objetivo 
  4. Chegar no objetivo com velocidade errada(atualmente no nosso código é sempre 0, mas para futuros plays pode ser diferente como um passe em movimento) ou orientação errada 
 
  Assim o código reformula os pesos, e ele vai aprendendo. O bom desse algoritmo é que há uma fase inicial de aprendizagem aonde eu coloco um gama alto, ou seja, alto nível de aprendizagem, isto é um erro faz ele se força a mudar de maneira expressiva. E quando ele estiver adulto, eu coloco um gama baixo que faz ele se adaptar durante o jogo, buscando melhorar, mas não se afastando muito do contorno. 
  Em tese, pensando em termos de cálculo, a fase de aprendizagem ele busca máximos locais, que façam ele aumentar sua recompensa, ou seja ser punido menos, e na fase de jogo nesse máximo ele busca o melhor ponto que se adequa ao jogo. 
   E o que ele tinha que fazer era coletar: 
  **Os inputs** 
  Largura do campo, comprimento do campo,Vxatual,Vyatual,Voatual,X,Y, Xbola, Ybola, Xinimigo1, Yinimigo1, Xinimigo2, Yinimigo2, Xobj, Yobj , Oobj. 
  E com isso me oferecer: 
  **Os outputs** 
  Vxdest,Vydest,Vodest 
 
  {{thumbnail(Gráficos.png,size=600)}} 

 Como se observa na imagem, eu retornei também alguns dados, como a distância e recompensa para ver como andava o treinamento do algoritmo. 
 Em tese, o código ficou incompleto porque falta eu criar alguns arquivos de escrita e leitura. 

 Dissertando agora sobre as vantagens. 
 Eu fiz o código em python, pois estou mais familiarizado com a linguagem, todavia escrevi ele com ajuda da biblioteca torch a qual se encontra no c++.  
 Com 1 robô em campo o fps sem restrições fica entre 110 e 150, todavia esse fps cria muitos erros no modelo, pois como há penalidades envolvida, se o código roda duas vezes e o robô não saiu do lugar ele será penalizado, entre outros. Assim na prática o código deveria rodar em sincronia com a comunicação beirando os 30 a 40 fps. 
 Na prática meu objetivo não era que esse algoritmo em si funcionasse, mas visar a possibilidade da inteligência artificial em conjunto com o nosso código, em âmbitos como skills, correção de erros, previsão de ação inimiga. 
 A princípio, eu obtive um resultado bem positivo, uma vez que modelos bem simples de treinamento podem ser criados de maneira a evitar códigos complexos no labview e podem obter resultados melhores. inimiga entre inimigos ...

Voltar