Autor: **** Yan Kexi, Jing Yuheng, Liu Zhihao, Feng Xiaokun, Lei Shiqi-** Instituto de Automação, Academia Chinesa de Ciências
Resumo
Para esta experiência de aprendizagem por reforço, o tema escolhido pela nossa equipa é "Novo Ambiente/Novo Algoritmo para Acesso MindSpore à Aprendizagem por Reforço". Conectamos um ambiente de testes de jogos para cenários de cooperação multiagentes - SISL (Stanford Intelligent Systems Laboratory) à plataforma MindSpore, e implementamos o teste de benchmark de desempenho dos algoritmos QMIX e MAPPO neste ambiente experimental. Neste compartilhamento, conduziremos a introdução e análise correspondentes em torno dos cinco aspectos de seleção de tópicos, ambiente, algoritmo, resultados experimentais e conclusões.
Consulte o anexo para códigos relacionados ao projeto.
https://gitee.com/lemonifolds/reinforcement/tree/c03e5f8e6104b5880fdfa53d579332078c7dfb99
01
Introdução ao tópico
A aprendizagem por reforço é uma disciplina que estuda a sequência de tomada de decisão. Ela aprende estratégias de otimização para maximizar retornos cumulativos, analisando o processo de interação entre um agente e o ambiente. Entre eles, o ambiente é um elemento importante na aprendizagem por reforço. Ele não apenas determina diretamente o formato dos dados de entrada do modelo do algoritmo, mas também está intimamente relacionado às tarefas de pesquisa da aprendizagem por reforço. Alguns algoritmos clássicos de aprendizagem por reforço são frequentemente acompanhados por alguns ambientes de verificação clássicos. Por exemplo, para tarefas de percepção e tomada de decisão de agente único, seu algoritmo clássico DQN (Deep Q-learning) [1] foi verificado no jogo Atari, um ambiente clássico para esta tarefa para tarefas de jogos de soma zero com informações completas; e tarefas multijogador com informações incompletas Para tarefas de jogos mistos, seus representantes trabalham AlphaGo[2][3] e AlphaStar[4] até nomearam o algoritmo de acordo com o ambiente de verificação correspondente (Go, StarCraft). Isso mostra o importante papel do ambiente de verificação no campo da aprendizagem por reforço.
Existem muitos tipos de ambientes usados na aprendizagem por reforço. Ambientes típicos incluem Gym[5], MuJoCo[6], MPE[7], Atari[1], PySC2[8], SMAC[9], TORCS, ISAAC, etc. Atualmente, a arquitetura StarCraft MindSpore está conectada a dois ambientes: Gym e SMAC (StarCraft Multi-Agent Challenge), que são orientados respectivamente para cenários de aprendizagem por reforço de agente único e aprendizagem por reforço multiagente. Para este último, devido ao estado complexo e de alta dimensão, ação e espaço de decisão do jogo StarCraft, tornou-se um importante benchmark desafiador para algoritmos de aprendizagem por reforço multiagente. No entanto, na prática real da pesquisa científica, quando propomos um novo algoritmo, muitas vezes o verificamos primeiro em alguns ambientes pequenos (como o ambiente de jogo Atari no Gym). Com base nisso, nossa equipe escolheu um pequeno ambiente de teste para cenários multiagentes - SISL (Stanford Intelligent Systems Laboratory), e conectou-o à plataforma MindSpore para fornecer à plataforma um ambiente de certificação de experiência multi-inteligência mais diversificado. Além disso, também implementamos dois algoritmos típicos de aprendizagem por reforço multiagente, MAPPO [10] e QMIX [11], para o ambiente SISL, e fornecemos resultados de testes de benchmark correspondentes.
A seguir, este compartilhamento dará primeiro uma introdução preliminar ao ambiente SISL conectado (Capítulo 2), bem como aos algoritmos QMIX e MAPPO utilizados (Capítulo 3, a seguir, o processo de implementação de acesso ao ambiente, experimentos Os resultados dos testes de benchmark obtidos); e os problemas encontrados no experimento são apresentados e analisados (Capítulo 4). Finalmente, com base nos resultados experimentais, apresentamos as conclusões correspondentes (Capítulo 5);
02
Introdução ao ambiente
PettingZoo[12] é uma biblioteca Python comumente usada em pesquisas de aprendizagem por reforço multiagente SISL (Stanford Intelligent Systems Laboratory) é um dos pacotes de ambiente, incluindo três subambientes: Multiwalker, Pursuit e Waterworld.
O uso básico do PettingZoo é semelhante ao Gym. A seguir está um exemplo de código para construir um agente de ação aleatória no ambiente Waterworld:
from pettingzoo.sisl import waterworld_v4
env = waterworld_v4.env(render_mode='human')
env.reset()
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
if termination or truncation:
action = None
else:
action = env.action_space(agent).sample()
env.step(action)
env.close()
A seguir está uma introdução aos três subambientes do SISL.
2.1 Multiwalker
No ambiente Multiwalker, robôs bípedes tentam carregar sua carga e caminhar para a direita. Vários robôs transportam uma carga grande e precisam trabalhar juntos, como mostra a figura abaixo.
Diagrama do ambiente Multiwalker
Cada agente receberá o retorno do forward_reward multiplicado pela mudança na posição do pacote em relação ao momento anterior. Se pelo menos um dos pacotes cair ou o pacote ultrapassar o limite esquerdo do terreno, o ambiente termina e cada agente recebe -100 benefícios. Caso o pacote caia da borda direita do terreno, o ambiente também terminará, com ganho de 0.
Se um agente cair, ele recebe um benefício adicional de -10. Se termina_on_fall = False, então o ambiente não terminará quando o agente cair, caso contrário, o ambiente terminará quando o agente cair e trará um benefício de -100. Se remove_on_fall = True, então o agente que caiu será removido do ambiente. Cada agente também recebe -5 vezes a mudança do ângulo da cabeça para mantê-la nivelada. Se shared_reward = True, a média da recompensa pessoal de cada agente será calculada e devolvida a cada agente.
Cada agente exerce força nas duas articulações de suas duas pernas, de modo que seu espaço de ação contínua é um vetor quadridimensional. O espaço de observação de cada agente é um vetor de 31 dimensões contendo dados de radar ruidosos sobre o ambiente e os agentes circundantes, os ângulos e velocidades de cada junta do seu próprio corpo e outras informações.
2.2 Perseguição
No ambiente Pursuit, alguns agentes de perseguição tentam perseguir e cercar os fugitivos, conforme mostrado na figura abaixo (vermelho é o agente de perseguição controlado, azul é o movimento aleatório dos fugitivos).
Diagrama do ambiente de perseguição
Por padrão, existem 30 fugitivos e 8 agentes perseguidores em uma grade 16X16, e há um obstáculo (parte branca) no centro do mapa. Se um agente cercar completamente um fugitivo, cada agente circundante recebe um benefício de 5 e o fugitivo é removido do ambiente. Cada vez que o agente tocar em um fugitivo, ele também receberá um benefício de 0,01.
Cada agente possui um espaço de ação discreto: cima, baixo, esquerda, direita, parar. O espaço de observação de cada agente é uma grade 7X7 ao seu redor, representada em laranja na figura.
2.3 Mundo aquático
O ambiente Waterworld simula as condições em que archaea tentam sobreviver no ambiente. Cada agente deve procurar consumir alimentos e evitar toxinas, conforme mostra a figura abaixo.
Diagrama do ambiente Waterworld
Dependendo dos parâmetros de entrada, os agentes podem necessitar de cooperar para consumir alimentos, pelo que o modelo pode ser cooperativo e competitivo ao mesmo tempo. Da mesma forma, os benefícios também podem ser diferentes ou calculados em média para cada agente. Todo o ambiente é um espaço bidimensional contínuo e os benefícios baseiam-se na exposição a alimentos e toxinas.
O espaço de ação de cada agente é um vetor bidimensional, ou seja, avanço (aceleração) nas direções horizontal e vertical. O espaço de observação de cada agente é a informação recebida por cada sensor sobre a distância até alimentos, toxinas, outros agentes e se colide com alimentos ou toxinas. A dimensão total é ou
, dependendo dos parâmetros.
03
Introdução ao algoritmo
Nesta seção, apresentaremos o algoritmo MAPPO[10] e o algoritmo QMIX[11] usados no experimento.
3.1 Algoritmo MAPPO
O nome completo do MAPPO é Multi-Agent Proximal Policy Optimization Como pode ser visto pelo nome, o algoritmo MAPPO é um algoritmo clássico de aprendizagem por reforço - o algoritmo PPO [13], que é expandido em um ambiente de multiinteligência. Para ambientes multiagentes, eles são frequentemente descritos usando < > sete tuplas. Dentre eles, n representa o número de agentes S representa o espaço de estados do ambiente
é o espaço de comportamento composto pelas ações de todos os agentes
representa a observação local obtida pelo agente i do estado global s; ambiente completamente observável, então
);
representa a probabilidade de transformação de s em s' dada uma ação conjunta; R(s,A) representa a função de recompensa compartilhada
;
O algoritmo MAPPO usa a estrutura clássica ator-crítico, que requer o treinamento de duas redes neurais separadas: a rede política e a função de valor
(como ator e crítico, respectivamente).
Para a rede de políticas , é usado para aprender um mapeamento da observação o_i para a distribuição de ações a_i, e o objetivo de otimização correspondente é:
Dentre eles, B representa o tamanho do lote, que é calculado pelo método GAE [14],
representa a entropia da política e
representa o hiperparâmetro do coeficiente de peso.
Para a função de valor , que é usada para aprender o mapeamento do estado S para a estimativa de recompensa
, o objetivo de otimização correspondente é:
onde representa o retorno descontado calculado. Como o MAPPO adota um método de treinamento centralizado e de execução distribuída, a função de valor pode dividir diretamente o estado global , enquanto a função de política só pode processar
as informações de observação local de cada agente ;
Com base na fórmula do objetivo de otimização acima, o processo de operação do MAPPO pode ser obtido. O processo de processamento do algoritmo MAPPO cíclico fornecido no artigo original [10] é organizado da seguinte forma:
3.1 Algoritmo MAPPO
Nesta seção, você é usado para denotar ações e você é usado para denotar histórico de ação-observação. A ideia de design do algoritmo QMIX é semelhante ao VDN. Espera-se que
cada um possa ser obtido calculando um global
. só precisa de
Isso irá satisfazer o requisito. Para que a fórmula acima seja válida, deve haver monotonicidade em relação a Q_i, ou seja
A estrutura da rede neural do QMIX é mostrada na figura abaixo: Diagrama da estrutura QMIX
Para cada agente i, existe uma rede de agentes utilizada para calculá-lo , conforme mostrado na Figura (c). Essa rede é uma rede DRQN, ou seja, a camada totalmente conectada em DQN é substituída por GRU, e a entrada é a observação do agente no tempo t
e a ação no tempo t-1
.
A rede híbrida é uma rede neural feedforward que recebe n saídas da rede do agente e as mistura monotonicamente, e a saída é o resultado, conforme mostrado na Figura (a). Os pesos da rede híbrida são gerados por uma super-rede separada. A super-rede toma o estado global s_t como entrada e gera os pesos de uma camada da rede híbrida. Cada super-rede consiste em uma única camada linear com uma função de ativação de valor absoluto para garantir que os pesos da rede híbrida sejam não negativos.
A rede QMIX é treinada ponta a ponta para minimizar as seguintes perdas:
Entre eles, estão
os parâmetros da rede alvo (semelhantes ao DQN).
04
Resultados experimentais
Esta seção realiza análises experimentais específicas baseadas na introdução acima ao ambiente SISL e aos algoritmos MAPPO e QMIX. Primeiro, apresentamos o processo de acesso do ambiente SISL (Seção 4.1); em seguida, com base nos algoritmos MAPPO e QMIX fornecidos no armazém MindSporeRL original, após modificação e ajuste, tentamos aplicá-los no ambiente recém-acessado. o experimento de teste (seções 4.2 e 4.3) for concluído no ambiente SISL, exibiremos e apresentaremos os pontos de melhoria de engenharia, resultados experimentais e pensamentos correspondentes;
4.1 Processo de acesso ao ambiente SISL
Usamos o comando pip install pettingzoo[sisl] para instalar a biblioteca de ambiente básico do SISL. Claro, você também pode instalar o ambiente básico localmente através do seguinte método:
cd ~/reinforcement/mindspore_rl/environment
git clone https://github.com/Farama-Foundation/PettingZoo.git
cd PettingZoo
pip install -e .[sisl]
Com base neste ambiente básico, encapsulamos o SISL de acordo com o modo de encapsulamento do ambiente existente do MindSpore Reinforcement. Para implementação de código específico, consulte sisl_environment.py.
A classe Wrapper do ambiente SISL herda principalmente as seguintes classes:
from mindspore_rl.environment import Environment
Para ser compatível com o MindSpore Reinforcement e a estrutura de treinamento do MindSpore, herdamos ou usamos a seguinte estrutura de dados na classe Wrapper do ambiente SISL:
import mindspore as ms
from mindspore.ops import operations as P
from mindspore_rl.environment.space import Space
Depois de observar a estrutura de código do MindSpore Reinforcement, descobrimos que diferentes algoritmos são adaptados apenas a ambientes específicos e que todos os ambientes e algoritmos não são universais. Por exemplo, o algoritmo MAPPO é adaptado apenas ao ambiente MPE, portanto o algoritmo suporta apenas espaço de estado vetorial contínuo e espaço de ação discreto. Além disso, como a implementação do ambiente MPE utiliza múltiplos processos, o algoritmo MAPPO também é implementado para múltiplos processos. . Adaptação especializada. Por outro exemplo, o algoritmo QMIX é adaptado apenas ao ambiente SMAC, portanto, o algoritmo suporta apenas espaço de estado vetorial contínuo e espaço de ação discreto. O ambiente SMAC é um processo único, portanto, o algoritmo QMIX é adequado apenas para um único processo. Portanto, os algoritmos existentes do MindSpore Reinforcement não podem suportar universalmente estados discretos e contínuos ou espaços de ação, e os espaços de estados geralmente são adequados apenas para formas vetoriais. Para outras formas de entrada, como imagens, redes de backbone adicionais, como a CNN, precisam ser implementadas. Além disso, o ambiente de acesso também requer adaptação específica com base na implementação do algoritmo em processo único ou multiprocesso.
Para nos adaptarmos ao algoritmo QMIX, implementamos a versão de processo único do ambiente SISL classe Wrapper SISLEnvironment e encapsulamos todas as APIs do ambiente de acordo com o formato de encapsulamento MindSpore Reinforcement.
Para se adaptar ao algoritmo MAPPO, implementamos a versão multiprocessos do ambiente SISL, a classe Wrapper SISLMultiEnvironment e a biblioteca multiprocessamento baseada em Python para implementar a classe de agendamento multiprocessos EnvironmentProcessNew e encapsular todas as APIs do ambiente de acordo com o formato de encapsulamento MindSpore Reinforcement.
4.2 Experimento de teste de benchmark do algoritmo MAPPO
reinforcement_MAPPO
├─ example
│ ├─ make_plot.py
│ ├─ scripts
│ │ ├─ mappo_train_log.txt
│ │ └─ run_standalone_train.sh
│ └─ train_SISL.py
└─ mindspore_rl
├─ algorithm
│ ├─ config.py
│ ├─ config_SISL.py
│ ├─ mappo.py
│ ├─ mappo_replaybuffer.py
│ ├─ mappo_session.py
│ ├─ mappo_trainer.py
│ ├─ mappo_vmap.py
│ ├─ mappo_vmap_trainer.py
│ ├─ mpe
│ ├─ mpe_environment.patch
│ ├─ mpe_environment.py
│ ├─ on-policy
│ ├─ sisl_environment.py
│ └─ __init__.py
└─ environment
└─ sisl_environment.py
Árvore de código do ambiente SISL implementada pelo algoritmo MAPPO
O algoritmo MAPPO**** está dissociado do ambiente
O MAPPO no Shengsi Mindspore está nativamente conectado ao ambiente MPE, e nas tentativas dos membros da equipe, pode rodar diretamente no ambiente MPE, completando com sucesso as etapas de interação com o ambiente, treinamento, atualização de parâmetros, etc., garantindo a correção do código do algoritmo MAPPO. O SISL possui diferentes mapas como ambientes experimentais, incluindo Multiwalker, Pursuit e Waterworld. No entanto, a alteração direta do arquivo config.py não pode ser executada com êxito no ambiente SISL. Após pesquisa e discussão entre os membros da equipe, eles descobriram que na implementação do MAPPO na estrutura MindSpore, o algoritmo MAPPO está altamente acoplado ao ambiente. Por exemplo, em MAPPOSession.py, todas as variáveis relacionadas ao ambiente, como o número de agentes, a dimensão de observação da dimensão do estado e a dimensão da ação viável, são implementadas como valores específicos em vez de variáveis de ambiente da mesma forma em sisl_environment.py; são explicitamente definidas Variáveis como o número de agentes que deveriam ser parâmetros de configuração são removidos. Esta definição explícita evita que alterações no arquivo config.py sejam passadas dentro do algoritmo, resultando em erros de tempo de execução na interface da rede de entrada de recursos.
Melhoramos o algoritmo original e adicionamos uma parte de desacoplamento do ambiente, que permite que a estrutura leia corretamente as informações do ambiente correspondentes do arquivo config.py e use corretamente as informações do ambiente para passar para o algoritmo, realmente realizando o desacoplamento do ambiente e Algoritmo MAPPO.
Acesso MAPPO ao ambiente SISL****
Após a conclusão do trabalho acima, podemos garantir que o algoritmo MAPPO esteja correto e que os parâmetros do arquivo de configuração possam ser passados corretamente para o algoritmo. Posteriormente, os membros da equipe passaram a se conectar ao ambiente SISL. Na estrutura MindSpore, algoritmos diferentes correspondem a ambientes diferentes e têm execuções diferentes. Durante o processo de depuração, descobrimos que para a versão multithread do ambiente SISL, o número de threads multithread e o número de ambientes existentes em cada thread não podem ser alterados diretamente, alterando diretamente o número de processos ou o número de processos. ambientes farão com que o algoritmo fique preso em um determinado ponto, além disso, durante a execução do código, devido à incompatibilidade de tipo de dados, por exemplo, numpy.int32 não é compatível com int32, o que leva a problemas de ambiente. conversão; o que é retornado do ambiente é a codificação one-hot da ação, que não pode inseri-la diretamente na rede mappo definida para treinamento e outras questões.
Após resolver os problemas de tipo de dados e interação com o ambiente, os membros da equipe treinaram o MAPPO no ambiente SISL. Porém, de acordo com o código de treinamento padrão, o programa reportou um erro e saiu após cada treinamento de 19 episódios. Após discussão entre os membros da equipe e depuração linha por linha, de acordo com o código de treinamento original, após cada treinamento, ele não contém a informação do prompt de truncamento para encerrar o episódio, portanto, quando a próxima rodada de treinamento começar, o ambiente do anterior a rodada continuará. A execução começa no estado e o número de etapas em execução da rodada anterior do ambiente não será apagado. Como o ambiente Pursuit está configurado para ter um número máximo de etapas de execução, após a execução até o número máximo de execuções do ambiente, de acordo com a estrutura do ambiente, todas as recompensas e observações na função de execução de sisl_environment.py que são executadas para o o ambiente da etapa final será limpo e a função de execução não. As variáveis limpas não são processadas, portanto, durante a execução da função, sempre que o número máximo de etapas especificado pelo ambiente for atingido, o programa trava. por que o programa relata um erro a cada 19 episódios de treinamento. Portanto, os membros da equipe adicionaram um teste para verificar se o número máximo definido foi atingido. Se o número máximo for atingido, o ambiente envia um sinal de truncamento, encerra a função de execução e reinicia o ambiente.
Depois de resolver as dificuldades acima, o algoritmo MAPPO conseguiu rodar com sucesso no ambiente SISL. Defina as informações de estado necessárias para que o MAPPO seja a união de todas as observações do agente e execute no máximo 500 episódios. Cada episódio contém 500 etapas de tempo. Conduza experimentos MAPPO no ambiente SISL e desenhe as curvas de recompensa e perda durante o treinamento. Após a conclusão do treinamento, obtemos os seguintes resultados:
4.3 Experimento de teste de benchmark do algoritmo QMIX
reinforcement_QMIX
├─ example
│ ├─ qmix
│ │ ├─ eval.py
│ │ ├─ scripts
│ │ │ ├─ run_standalone_eval.sh
│ │ │ └─ run_standalone_train.sh
│ │ └─ train.py
│ └─ __init__.py
└─ mindspore_rl
├─ algorithm
│ ├─ qmix
│ │ ├─ config.py
│ │ ├─ qmix.py
│ │ ├─ qmix_session.py
│ │ ├─ qmix_trainer.py
│ │ ├─ _config.py
│ │ ├─ __init__.py
│ └─ __init__.py
└─ environment
├─ sc2_environment.py
└─ sisl_environment.py
Árvore de código do ambiente SISL implementada pelo algoritmo QMIX
Correção do algoritmo QMIX
Durante nossa implementação, descobrimos que na estrutura MindSpore, o algoritmo QMIX original e seu ambiente experimental correspondente SMAC não puderam ser executados, e a rotina eval.py também relatou um erro e não pôde ser executada. Portanto, para testar a exatidão do algoritmo e a viabilidade do ambiente, primeiro revisamos o algoritmo QMIX e o ambiente correspondente implementado na estrutura.
Como foi a primeira vez que utilizaram o framework MindSpore, os membros da equipe descobriram que a mensagem de erro do framework não era óbvia durante o experimento. Após discussão e cooperação entre os membros da equipe, descobriu-se que isso se deve ao uso repetido de herança e sobrecarga na estrutura e à lógica de computação subjacente para traduzir a linguagem python no gráfico de cálculo cpp para cálculo, resultando em quase o mesmos relatórios de erros, e o depurador na estrutura nem sempre pode retornar o local do erro correspondente.
Através da depuração linha por linha, descobrimos que na classe QMIXTrainer implementada, save_reward deveria ter sido retornado, mas Step_info no ambiente SMAC foi retornado incorretamente. Após a depuração, o algoritmo QMIX pode ser verificado corretamente em um dos ambientes SMAC.
Desacoplando o algoritmo QMIX do ambiente
Com base na experiência anterior dos membros da equipe, o SMAC possui diferentes mapas como ambientes experimentais, como o 2s3z que foi implementado no Shengsi MindSpore, bem como o 3m, 3s5z, etc. No entanto, quando alteramos o arquivo config.py correspondente conforme descrito no documento, o programa original não pode ser executado diretamente. Após pesquisa e discussão entre os membros da equipe, eles descobriram que na implementação do QMIX na estrutura MindSpore, o algoritmo QMIX está altamente acoplado ao ambiente. Por exemplo, no QMIXTrainer, quase todas as variáveis relacionadas ao ambiente, como o número de agentes Agent_num, a dimensão de observação obs_shape e a dimensão de ação viável, são implementadas como valores específicos em vez de variáveis de ambiente.
-
A função avaliar() acima é reutilizada nas fases de treinamento e teste, e os problemas acima ocorrem. Separe-os aqui para evitar confusão funcional.
-
Agent_num, obs_shape e outras variáveis estão relacionadas ao ambiente e não têm nada a ver com o algoritmo. Variáveis locais foram adicionadas e o código foi refatorado de acordo com a documentação do MindSporeRL para desacoplar o algoritmo do ambiente e cumprir as especificações do framework.
Em resumo, através da depuração e revisão do framework, resolvemos o problema do acoplamento excessivo entre o ambiente e o algoritmo, e realmente alcançamos o desacoplamento do algoritmo QMIX e do ambiente SMAC. Também enviamos uma solicitação pull para esta versão do código no repositório de código original para conveniência dos usuários subsequentes da estrutura.
No ambiente 3s5z, usando nosso código para testar o QMIX obtemos os seguintes resultados:
Acesso QMIX ao ambiente SISL
Após a conclusão do trabalho acima, podemos garantir que o algoritmo QMIX esteja correto e obter resultados correspondentes no ambiente SMAC correspondente. Posteriormente, os membros da equipe passaram a se conectar ao ambiente SISL. Conforme mencionado anteriormente, na estrutura MindSpore, algoritmos diferentes correspondem a ambientes diferentes e têm execuções diferentes. O algoritmo QMIX implementa apenas uma versão single-threaded, portanto não é interoperável com o ambiente MAPPO mencionado anteriormente. Durante o processo de depuração, descobrimos que a versão de thread único do ambiente SISL nunca poderia funcionar normalmente. A localização do erro é difícil de localizar. Seu conteúdo é: Não é possível converter a instância Python para o tipo C++.
Os membros da equipe discutiram e depuraram linha por linha e descobriram que a estrutura MindSpore usa a camada inferior Cpp para compilar em um gráfico de cálculo para cálculos acelerados, portanto, há um processo de tradução de python para cpp, e esse processo é um pouco diferente do processo tradicional de execução do python. O programa Python tradicional é uma linguagem interpretada, e o programa é quase executado linha por linha, enquanto o cpp, como linguagem compilada, precisa ser completamente compilado e executado; Por causa disso, os membros da equipe especularam que tal mistura levaria ao problema pouco claro de relatório de erros mencionado acima. Ao mesmo tempo, você precisa verificar o tipo de dados de cada variável em todos os momentos durante o processo de escrita de um programa. Ao contrário do Python tradicional, numpy.int32 não é compatível com int32, o que resulta na necessidade de gastar muito tempo. verificando o tipo de dados de cada etapa do ambiente ao algoritmo.
Diante das dificuldades encontradas, os alunos do grupo tentaram verificar os tipos de dados de cada dado do ambiente e algoritmo por vez, mas ainda não conseguiram localizar a variável específica onde ocorreu o problema e o local onde ocorreu o problema. Além disso, implementamos uma versão multiprocessos do ambiente SISL e executamos o código MAPPO. Após discussão, os membros da equipe concluíram que o problema era causado pela inconsistência entre o tipo de dados e o tipo de dados C++ subjacente que ele chama. É difícil localizar o problema por meio da depuração de ponto único. Você precisa tentar compilar e depurar. Ao mesmo tempo, esta questão tem pouco a ver com o conteúdo do curso de aprendizagem por reforço, por isso não continuamos a perder tempo depurando a implementação do algoritmo QMIX em um ambiente SISL de processo único.
05
para concluir
Neste experimento de aprendizagem por reforço, nossa equipe conectou com sucesso um ambiente de teste de jogo para cenários de cooperação multiagente - SISL (Stanford Intelligent Systems Laboratory) à plataforma MindSpore e tentou usar os algoritmos QMIX e MAPPO para fazer isso. ambiente experimental. Depois de cumprir os vários requisitos indicados na tarefa, também temos uma compreensão mais profunda da arquitetura subjacente do MindSpore, o que nos ajudará a aplicar com mais habilidade a biblioteca MindSporeRL às nossas atividades de pesquisa científica no futuro.
referências
[1]. Mnih V, Kavukcuoglu K, Silver D, et al. Jogando Atari com aprendizado por reforço profundo[J]. Pré-impressão do arXiv arXiv:1312.5602, 2013.
[2]. Prata D, Huang A, Maddison CJ, et al. Dominando o jogo Go com redes neurais profundas e pesquisa em árvore [J]. natureza, 2016, 529(7587): 484-489.
[3]. Prata D, Schrittwieser J, Simonyan K, et al. Dominar o jogo go sem conhecimento humano[J]. natureza, 2017, 550(7676): 354-359.
[4]. Vinyals O, Babuschkin I, Czarnecki WM, et al. Nível Grandmaster em StarCraft II usando aprendizagem por reforço multiagente[J]. Natureza, 2019, 575(7782): 350-354.
[5]. Brockman G, Cheung V, Pettersson L, et al. Academia Openai[J]. Pré-impressão do arXiv arXiv:1606.01540, 2016.
[6]. Todorov E, Erez T, Tassa Y. Mujoco: Um mecanismo de física para controle baseado em modelo [C] // Conferência internacional IEEE/RSJ 2012 sobre robôs e sistemas inteligentes. IEEE, 2012: 5026-5033.
[7]. Mordatch I, Abbeel P. Emergência de linguagem composicional fundamentada em populações multiagentes[C]//Anais da conferência AAAI sobre inteligência artificial. 2018, 32(1).
[8]. Romo L, Jain M. Aprendizagem por Reforço PySC2 [J].
[9]. Samvelyan M, Rashid T, De Witt CS, et al. O desafio multiagente starcraft[J]. Pré-impressão do arXiv arXiv:1902.04043, 2019.
[10]. Yu C, Velu A, Vinitsky E, et al. A surpreendente eficácia do ppo em jogos cooperativos multiagentes[J]. Avanços em Sistemas de Processamento de Informação Neural, 2022, 35: 24611-24624.
[11]. Rashid T, Samvelyan M, De Witt CS, et al. Fatoração de função de valor monotônico para aprendizagem profunda por reforço multiagente [J]. The Journal of Machine Learning Research, 2020, 21(1): 7234-7284.
[12]. https://pettingzoo.farama.org/environments/sisl/
[13]. Schulman J, Wolski F, Dhariwal P, et al. Algoritmos de otimização de política proximal[J]. Pré-impressão do arXiv arXiv:1707.06347, 2017.
[14]. John Schulman, Philipp Moritz, Sergey Levine, Michael Jordan e Pieter Abbeel. Controle contínuo de alta dimensão usando estimativa de vantagem generalizada. Em Anais da Conferência Internacional sobre Representações de Aprendizagem (ICLR), 2016.
Um programador nascido na década de 1990 desenvolveu um software de portabilidade de vídeo e faturou mais de 7 milhões em menos de um ano. O final foi muito punitivo! Google confirmou demissões, envolvendo a "maldição de 35 anos" dos programadores chineses nas equipes Flutter, Dart e . Python Arc Browser para Windows 1.0 em 3 meses oficialmente GA A participação de mercado do Windows 10 atinge 70%, Windows 11 GitHub continua a diminuir a ferramenta de desenvolvimento nativa de IA GitHub Copilot Workspace JAVA. é a única consulta de tipo forte que pode lidar com OLTP + OLAP. Este é o melhor ORM. Nos encontramos tarde demais.