Crie agentes de IA de aprendizado de máquina no Unreal Engine 4 e 5
Introdução à Mindmaker: https://www.youtube.com/watch?v=erm_pzhapia
Visão geral dos projetos: https://youtu.be/tuo423nujek
Grupo Discord: https://discord.gg/shxfwtmsha
O plugin AI da Mindmaker é um plug-in de código aberto que permite que jogos e simulações no UE4 e no UE5 funcionem como ambientes de ginástica OpenAI para o treinamento de agentes de aprendizado de máquina autônomos. O plug -in facilita uma conexão de rede entre um projeto irreal de motores que contém o ambiente de aprendizado e uma biblioteca Python ML que recebe dados do Unreal Engine e analisa um ambiente de ginástica OpenAI personalizado para treinar o agente. A biblioteca independente de aprendizado de máquina pode ser um script Python personalizado no caso de você estar criando sua própria ferramenta ML usando o ML Server ML do Mindmaker, ou pode ser um mecanismo de aprendizado pré-compilado, como o mecanismo DRL da MindMaker (algoritmos estável-baselines3). Independentemente de qual opção você escolher, o uso do Mindmaker AI Plugin Developers and Pesquisadores pode facilmente treinar agentes de aprendizado de máquina para projetos 2D, 3D e VR.
As aplicações possíveis se estendem além do design de jogos a uma variedade de empreendimentos científicos e técnicos. Isso inclui simulação robótica, direção autônoma, arquitetura generativa, gráficos processuais e muito mais. Esta API fornece uma plataforma central da qual os avanços no aprendizado de máquina podem atingir muitos desses campos. Para desenvolvedores de jogos, os casos de uso para agentes auto-otimistas incluem o controle do comportamento do NPC (em uma variedade de configurações, como multi-agente e adversário), decisões de design de jogos de prototipagem e testes automatizados de construções de jogos.
O mecanismo de aprendizado DRL está incluído no link para o projeto de exemplo, bem como o código -fonte do Python para modificá -lo, encontrado no diretório de conteúdo Mindmaker Source. Algorithms presently supported by the DRL Learning Engine include : Actor Critic ( A2C ), Sample Efficient Actor-Critic with Experience Replay (ACER), Actor Critic using Kronecker-Factored Trust Region ( ACKTR ), Deep Q Network ( DQN ), Proximal Policy Optimization ( PPO ), Soft Actor Critic ( SAC ), Twin Delayed DDPG ( TD3 ), Trust Region Policy Optimization ( TRPO ), Gradiente de política determinística profunda (DDPG). O plug -in é funcionalmente semelhante aos agentes de ML da Unity, com algumas vantagens - em vez de precisar criar um ambiente de ginástica OpenAI personalizado para cada aplicativo, usa um único ambiente e simplesmente escolha qual das observações e ações do agente para expor ao algoritmo ML. Voila, deixe o aprendizado começar!
Existem dois componentes primários que você usará enquanto trabalha com o plug -in Mindmaker, um projeto de engenharia irreal que contém o ambiente de aprendizado e uma biblioteca independente de aprendizado de máquina usada pelo agente para otimizar o que quer que esteja tentando aprender. A biblioteca independente de aprendizado de máquina pode ser um script Python personalizado no caso de você estar criando sua própria ferramenta ML usando o ML Server ML do Mindmaker, ou pode ser um mecanismo de aprendizado pré -compilado, como o Mindmaker DRL Engine (Algoritmos de Baselina estável).
Para experimentar o uso de diferentes bibliotecas ML em conjunto com a Mindmaker, use o Mindmaker Remote ML Server. Com ele, você pode personalizar seu próprio mecanismo de aprendizado em Python, em vez de usar o mecanismo DRL da Mindmaker pré-compilado. Para usar o servidor ML remoto, siga estas etapas:
Se você deseja empregar vários clientes ML conectados a um único ambiente de aprendizado, por exemplo, em um cenário de vários agentes, isso pode ser feito usando o Mindmaker Server e o Plugin.
Para criar vários agentes de aprendizado, primeiro configure seus agentes de aprendizado, como mostrado em um dos projetos de exemplo. Para cada novo agente de aprendizado, você precisará incrementar as configurações da porta do soquete no novo controlador de IA em 1. No momento do lançamento do servidor, os novos números de porta do servidor são criados automaticamente para cada nova instância do Mindmaker.exe que você inicia, começando com 3000 e subindo a partir daí por um total de 100.
Por exemplo, se você adicionar um segundo agente de aprendizado ao seu mapa, precisará das mesmas funções que estão no primeiro agente de aprendizado, o nó de lançamento da Mindmaker Blueprint etc., mas em vez de atribuir este à porta 3000, você atribuirá a porta 3001 em Blueprints. Além de alterar a configuração da porta do soquete em plantas, você também precisará alterar para alterar a função de plano de soquete de conexão, modificando o endereço e a porta no novo número que você criou "http: // localhost: 3001", por exemplo.
Quando isso estiver pronto, você só precisará criar uma segunda instância do seu arquivo Mindmaker_Client.py que se conectará ao seu segundo agente de aprendizado. O treinamento pode ser feito simultaneamente, em paralelo. A única modificação que você precisa fazer no Mindmaker_client.py está mudando o sio.connect ('http: // localhost: 3000') na parte inferior do arquivo para sio.connect ('http: // host local: 3001') ou o que for o número de novos agentes de aprendizado que você está trabalhando. Se você tiver cinco agentes de aprendizagem, terá cinco instâncias do cliente em execução e cada um terá um novo número de porta até 3005
IMITAÇÃO Aprendizagem com Stablebaselines 3 A fonte Python da Mindmaker pode ser modificada para apoiar o aprendizado de imitação usando os algoritmos de aprendizado de imitação de stablebaselines suportados
Para salvar um modelo treinado, defina a caixa de seleção "Salvar modelo após o treinamento" na função Lançar Mindmaker como TRUE. Você precisará garantir que o seu número de episódios de treinamento seja um número não zero. O modelo economizará após a conclusão do treinamento. Para carregar os modelos treinados, desmarque a caixa de seleção “Salvar modelo após treinamento” e defina a caixa de seleção “Carregar pré -treinado” na função de lançamento da Mindmaker como TRUE. Você também precisará definir o número de episódios de treinamento como zero, pois nenhum treinamento deve ocorrer. Verifique se o número de episódios de avaliações é um número inteiro diferente de zero, pois será assim que o modelo pré-treinado demonstra o aprendizado. Os modelos são salvos localmente na pasta "AppData Roaming" do seu computador, por exemplo C: Users Leon AppData Roaming
Por padrão, a Mindmaker apenas salva no diretório AppData/Roaming nas máquinas Windows. Para ativar o registro do Tensorboard, siga estas etapas.
Este é um processo de três etapas, você precisa decidir quais ações o agente pode executar, quais serão seus critérios de recompensa e quais observações o agente precisará fazer sobre seu ambiente para aprender com sucesso a receber uma recompensa.
Lançar Mindmaker ---------> Receber Ação --------> Make OBS -----> Verifique recompensas --------> Enviar OBS e RWRD para Mindmaker ------ Retornar para receber ação
No processo de aprendizado, o Mindmaker Learning Engine deve primeiro ser configurado com o espaço de observação que o agente está usando e o número total de ações disponíveis para o agente. Você não precisa fornecer nenhuma informação de recompensa quando for inicializada, isso só será encontrado durante o treinamento.
O processo geral para o aprendizado é que, uma vez lançado e conectado ao conectado ao Unreal Engine, o Mindmaker Learning Engine começará a fornecer ações aleatórias para o agente do motor irreal tomar e, em resposta, o agente com UE enviará uma lista de observações que fez quando a ação foi tomada, além de qualquer recompensa recebida em processo. Veja o diagrama acima. Em muitos episódios, o algoritmo empregado pela Mindmaker otimizará as ações dos agentes em resposta às observações e recompensas recebidas da UE. Esse processo é o mesmo, independentemente do algoritmo de aprendizado de máquina que se opõe a empregar com a Mindmaker. Com essas informações, o algoritmo de aprendizagem que está sendo usado para o Mindmaker começará a otimizar as decisões de ação dos agentes, idealmente descobrindo a sequência necessária para receber consistentemente recompensas. A troca entre ações aleatórias e intencionais é controlada nos parâmetros de exploração/exploração da biblioteca ML que você selecionou para uso com a Mindmaker, por exemplo, linhas de base estáveis. Esse processo se repete para cada episódio de treinamento. Após um número fixo de episódios de treinamento, você pode mudar inteiramente para usar o algoritmo para prever as “melhores” ações em vez de tomar as aleatórias.
A Mindmaker funciona envolvendo um ambiente irreal em um formato compatível com a academia do Openai, para que qualquer biblioteca ML que tenha sido projetada para trabalhar com a academia OpenAi possa ser implantada em seu ambiente de motor irreal. O objetivo do uso da academia de IA aberta é padronizar os fatores relevantes para a aprendizagem, a saber, o formato para receber as observações, recompensas e ações dos agentes, para que qualquer algoridade ML possa ter acesso às variáveis relevantes para o aprendizado sem precisar ser retrofitadas para cada tarefa específica. Os algoritmos que funcionam com a academia OpenAI podem trabalhar com qualquer ambiente e agente que esteja usando o protocolo OpenAI padronizado.
Configurando o Mindmaker Learning Engine desde o início, você precisará configurar a função de lançamento do Mindmaker no Unreal Engine para o seu agente de aprendizado. Isso é feito definindo a variável Action_space no Mindmaker para igualar o número total de ações disponíveis para o seu agente. Você também precisará configurar a variável observação_space para corresponder ao número e ao tipo de observações que seu agente usará em relação à recompensa que está tentando receber. Por padrão, as observações são passadas do Unreal como uma matriz, consulte o projeto de exemplo. Dependendo do número de observações que seu agente encontrará necessário, o tamanho da observação_space mudará.
Recompensa - Uma recompensa é uma variável definida de acordo com o critério específico que você escolheu para o agente aprender ou otimizar. No plano UE4, você usará um nó de ramificação para determinar quais condições ambientais e ação do agente devem ser cumpridas para que a recompensa seja ativada. Isso é passado para a Mindmaker pela conexão Socketio. Veja o exemplo do projeto. Ação - Esta é uma variável que contém um valor inteiro que representa qualquer ação que o agente tenha tomado. Você também precisará decidir o número total de ações disponíveis para o agente e definir as maxições em Mindmaker para igualar esse número. Observações - perhspie as variáveis mais complicadas com as quais você estará lidando. A chave para definir isso corretamente é entender que as ações dos agentes devem ser incluídas na variável de observações, além de qualquer outro critério ambiental referenciado na função de recompensa. O agente precisa saber quais ações ou ações foram necessárias que influenciaram a recompensa e quaisquer variáveis ambientais que também mudaram. Eles são passados para o mecanismo de aprendizado da Mindmaker como uma matriz e atualizados na variável de observações.
Aqui, discutiremos os parâmetros individuais do nó Blueprint do LaunchMindmaker, que é o principal componente das funções do Mindmaker Blueprints.
Algoritmo RL - É aqui que se pode selecionar o sabor do algoritmo RL com o qual deseja treinar o agente. Existem dez opções no menu suspenso, com cada algoritmo tendo seus próprios prós e contras. Uma discussão detalhada sobre os algoritmos relevantes e seus casos de uso pode ser encontrada aqui. https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
O NUM TRIN EP - Esta é uma entrada inteira que representa o número de episódios de treinamento que deseja que o agente realize. Quanto maior o número de episódios de treinamento, mais exploração o agente faz antes de fazer a transição para o comportamento estratégico que adquire durante o treinamento. A complexidade das ações que o agente está tentando aprender normalmente determina o número de episódios de treinamento necessários - estratégias e comportamentos mais complexos exigem mais episódios de treinamento.
NUM EVAL EP - Esta também é uma entrada inteira e representa o número de episódios de avaliação que o agente passará após o treinamento. Estes são os episódios em que o agente demonstra seu comportamento aprendido.
Espaço de ação contínua - esta é uma entrada booleana que determina se o agente está usando um espaço de ação contínuo. Um espaço de ação contínuo é aquele em que há um número infinito de ações que o agente pode executar, por exemplo, se estiver aprendendo a dirigir um carro e a faixa de ângulos sobre os quais a coluna de direção pode mudar é um valor decimal entre 0 e 180, do que um número infinito de valores dentro desse intervalo, como 0,12 e 145.774444. Você deseja identificar no início do uso se o seu agente tiver um número infinito de ações ou ações de números finitos que eles podem executar. O espaço de ação deve ser contínuo ou discreto, não pode ser ambos.
Espaço de Ação Discreta - Esta é uma entrada booleana que determina se o agente está usando um espaço de ação discreto. Um espaço de ação discreto é aquele em que há um número finito de ações que o agente pode executar, como se a IA pudesse se mover apenas um espaço ou deixar um espaço. Nesse caso, possui apenas duas ações disponíveis e o espaço de ação é discreto. O usuário determina qual tipo de espaço de ação o agente usará antes de usar a Mindmaker e definir esses valores de acordo.
Forma de espaço de ação - isso define os limites inferiores e superiores das ações disponíveis para o agente. Se você estiver usando um espaço de ação discreto, esse é simplesmente o número total de ações disponíveis para o agente, por exemplo, 2 ou 8. Se você estiver usando um espaço de ação contínuo, as coisas serão mais complicadas e você deve definir os limites baixos e altos do espaço de ação separadamente. O formato para fazer isso é o seguinte: Low = LowBoundary, High = High -Boundary, Shape = (1,) Nesse caso, a BOUNDARY BOWS é um valor como -100,4 e high -boundary é um valores como 298.46. Todos os valores decimais entre esses limites representarão ações disponíveis para o agente. Se você tivesse uma variedade de ações, poderá alterar a parte da forma para refletir isso.
Forma do espaço de observação - Falando corretamente Esta entrada é um derivado do Python da classe de ambiente personalizada de IA aberta e define os limites inferiores e superiores das observações disponíveis para o agente depois de tomar uma ação. O formato para isso é o seguinte: Low = np.array ([BOWBOUNDARY]), High = np.array ([Highboundary]), dtype = np.float32. Imagine um agente que precisava tomar três medidas específicas seguidas para receber uma recompensa, então seu espaço de observação precisaria incluir o acesso a essas três ações, que seriam representadas por uma observação única. Portanto, a variedade de observações teria que incluir três valores diferentes, cada um com limites únicos. For example, such an action space might be defined as such: low=np.array([0,0,0]), high=np.array([100,100,100]),dtype=np.float32 if each of its own actions that agent needed to observe was a value between 0 and 100. A rule of thumb is that if a value is part of the reward function for the agent, ie their behavior is only rewarded if some condition being met, than O espaço de observação deve incluir uma referência a esse valor. Se cinco condições devem ser atendidas para um agente recompensado, cada uma dessas cinco condições deve fazer parte do espaço de observação dos agentes.
Carregar modelo pré -treinado - esse é um valor booleano que determina se você deseja que o agente carregue algum comportamento pré -treinado que foi salvo anteriormente. Se você definir isso como true, desejará especificar o nome do arquivo na caixa de entrada Nome do Modelo de Salvar /Carregar. Todos os modelos são salvos por padrão no diretório de roaming de dados do aplicativo do computador, por exemplo C: Usuários nome de usuário appdata roaming
Salvar modelo após o treinamento - esse é um valor booleano que determina se você deseja que o agente salve o comportamento que aprendeu após o treinamento. Se você definir isso como true, desejará especificar o nome do arquivo na caixa de entrada Nome do Modelo de Salvar/Carregar. Todos os modelos são salvos por padrão no diretório de roaming de dados do aplicativo do computador, por exemplo C: Usuários nome de usuário appdata roaming
Salvar/carregar o nome do modelo - esta é uma string que representa o nome do modelo que você deseja salvar ou carregar. Os arquivos são salvos no diretório de roaming de dados do aplicativo do computador, por exemplo C: Users Username AppData Roaming
Use parâmetros personalizados - esse é o valor booleano que determina se você deseja usar a versão de estoque do algoritmo que você selecionou ou deseja modificar seus parâmetros. Se você deseja usar parâmetros personalizados, eles podem ser acessados através das variáveis de estrutura de parâmetros personalizados. Se você clicar neles, por exemplo, A2CPARAMS, verá todos os valores que podem ser definidos dentro dessas estruturas. Um detalhamento detalhado dos parâmetros para cada algoritmo pode ser encontrado aqui: https://stable-baselines.readthedocs.io/en/master/
Uma lista de amostra de funções do projeto de exemplo é apresentada abaixo para entender como as informações são aprovadas entre o Mindmaker e o Unreal Engine, todos os ativos do UE relevantes para o problema de brinquedos estão contidos na pasta ativos/DEELearningNPC. De particular importância é o plano chamado AI_CHARACTER_CONTROLER_BP No AI_CHARACTER_CONTROLER_BP BRIEPRINT, todas as variáveis de ambiente são configuradas para passar para o aplicativo independente da Mindmaker. Isso inclui as seguintes funções essenciais
Função de entrada sensorial de carga - Importa os objetos aos quais a IA terá acesso para detectar ou manipulação de sua função de controles ambientais ambientais - isso controla a lógica para partes do ambiente que mudam essas luzes de comutação acesas e desligadas etc.
Definir função do espaço de ação - codifique todas as ações possíveis do agente em um único valor numérico que pode ser passado para o aplicativo independente de avaliação pelo algoritmo RL
Função do LaunchMindmaker - Isso chama o aplicativo independente no início do jogo, para que possa iniciar os dados de avaliação do ambiente UE. Depois que isso é iniciado, o aplicativo RL começa a investigar o ambiente com ações aleatórias que ele se gera, como uma pessoa cega pesquisando no escuro por uma luz. A luz é a recompensa, especificada na função de verificação da função UE. O LaunchLearningEngine também passa em algumas informações básicas do ambiente UE para o aplicativo independente, como o número de ações que o agente pode executar, o número total de episódios para treinar e o número de episódios para exibir os agentes adquiridos estratégia após o treinamento. Exibir todos os agentes treinamento aleatório levaria muito tempo.
Função de recebimento - Após o início da função do mecanismo de aprendizado de lançamento, a próxima função de disparar é a recriação. Isso recebe a ação escolhida pelo aplicativo independente e faz vários procedimentos de acompanhamento, como a atualização da localização dos agentes no ambiente, verificando se a nova ação satisfaz a condição de recompensa, exibindo as ações dos agentes, se formos com o treinamento e atualizamos as observações dos agentes sobre o seu ambiente para que eles possam ser transmitidos para a aplicação padrão.
Faça com que as observações funcionem - o objetivo disso é atualizar as observações dos agentes sobre seu ambiente após a ação que acabou de tomar. Isso incluirá, por exemplo, o local dos agentes com o ambiente e quaisquer outros dados ambientais que mudaram desde a última vez que tomaram uma ação. Estes são armazenados em uma variável de estrutura personalizada.
CheckRewward - Isso especifica a condição de recompensa para o agente no ambiente. Se essa condição de recompensa for atendida após o agente tomando uma ação, essas informações serão passadas para o aplicativo independente na função de envio de observações que se segue. Enviar função de observações - leva as novas observações feitas pelo agente, bem como qualquer informação de recompensa e as passa para o aplicativo independente. É assim que o algoritmo RL poderá avaliar se a ação que acabou de tomar foi boa e atualizar sua estratégia de acordo. Após essa função disparar, a única iteração ou episódio do jogo está concluída e o processo repete o ad infinitum.
Certas tarefas podem exigir períodos prolongados de treinamento, onde a visualização dos movimentos do agente provaria consumir proibição de tempo. Como tal, em certos exemplos, a visualização dos movimentos do agente foi desativada, mas o treinamento está acontecendo em segundo plano, uma vez que o exemplo for executado e após a conclusão, o agente demonstrará a estratégia adquirida.
Random, neste caso, significa que o agente está usando um gerador de números aleatórios para escolher entre as ações disponíveis durante o treinamento. O algoritmo RL observa os resultados dessas ações aleatórias, bem como quaisquer recompensas recebidas e usa essas informações para escolher melhores ações durante a fase de "exploração". É assim que uma estratégia aprendida é desenvolvida.
A coleta de informações durante o aprendizado assume a forma de uma variedade de observações que são geradas após cada uma das ações aleatórias do agente. Se estiver usando o plug -in Mindmaker, a forma exata da matriz é definida na propriedade de tamanho de observação da função Blueprint de lançamento do Mindmaker e dependerá de quais variáveis são necessárias para o agente observar nesse jogo ou tarefa de aprendizado em particular. Isso mudará dependendo da tarefa ou jogo de aprendizado.
O agente percebe apenas a parte do ambiente que lhes é exposto a eles pelo designer de jogos. Ao usar o plug -in Mindmaker, essas observações são preenchidas na chamada de função de observações de observações no mecanismo Unreal. Isso gerará uma matriz de números na forma definida pela propriedade de tamanho de observação da função Blueprint de lançamento da Mindmaker. As observações devem ser selecionadas para que elas compreendam apenas os dados necessários para o agente aprender, caso contrário, o treinamento pode se tornar proibitivamente demorado.
Na Aprendizagem de Vanilla Q - nenhuma rede neural é necessária e o aprendizado é armazenado em um formato tabular. Ao usar o aprendizado de reforço profundo da Mindmaker, pode -se escolher entre uma variedade de arquiteturas de rede neural, incluindo RNN, CNN etc., pode -se defini -las dentro das propriedades personalizadas de cada algoritmo da chamada de função do Blueprint de Lançamento Mindmaker.
Criando um ambiente de aprendizado de reforço profundo personalizado
Introdução. Para reforçar o aprendizado para o videogame AI
Aprendizagem de reforço - é promessa e perigo
Documentação estável de linhas de base