Definindo espaços de observação e ação em ambientes personalizados do Gym
Tópicos:
Introdução
Neste vídeo, vamos abordar a definição do método Init para o ambiente personalizado do gym no problema de gerenciamento de inventário. O método Init deve definir o espaço de observação e o espaço de ação do ambiente nas variáveis de instância self.observation_space
e self.action_space
, respectivamente. Além disso, qualquer outro código necessário para instanciar o ambiente também deve ser incluído aqui. Vamos nos concentrar na definição do espaço de observação e espaço de ação.
O Método Init do Ambiente Gim Personalizado
Ao definir o espaço de observação ou ação para qualquer ambiente personalizado, é necessário decidir três coisas. Primeiro, os limites superior e inferior da observação ou ação, que definirão os limites para o espaço. Segundo, o tipo da observação ou ação, que determinará qual tipo de espaço deve ser escolhido. A tabela abaixo lista os três casos mais comuns. Você pode encontrar a lista completa na documentação do Gym (acesse aqui para acessar a documentação do Gym). Terceiro, é necessário definir a forma da observação ou ação, caso seja uma matriz.
Tipo |
Descrição |
Discrete(n) |
Espaço discreto com n elementos |
`Box(low, high, ...) |
Espaço contínuo com valores entre low e high |
MultiBinary(n) |
Espaço de vetor binário de tamanho n |
Neste problema de gerenciamento de inventário, vamos definir o espaço de ação. Primeiro, os limites inferior e superior. Sabemos que a ação representa o número de produtos a serem pedidos em um determinado dia. Portanto, o limite inferior é 0, enquanto o limite superior é a capacidade máxima de armazenamento. Por exemplo, se a capacidade máxima for de 4.000 unidades, esse será o limite superior.
Em relação ao tipo de ação, como só podemos fazer pedidos de um número inteiro de unidades, a ação naturalmente é um número inteiro. No entanto, ao invés de escolher o tipo de espaço discreto, vamos escolher o tipo de espaço box. Isso ocorre porque, em problemas em que o número de ações possíveis é grande, como nesse caso, podemos simplificar o problema aproximando a ação usando um único número de ponto flutuante. Dessa forma, se treinarmos o agente para maximizar as recompensas usando ações de ponto flutuante, podemos simplesmente arredondar a previsão do agente para um número inteiro durante a inferência, sem perda significativa de desempenho. No contexto desse problema, a natureza inteira da ação não desempenha um papel crucial.
Portanto, vamos definir o espaço de ação como self.action_space = spaces.Box(...)
. No entanto, ainda não decidimos a forma do espaço de ação. Como os dados do tipo box são representados por matrizes em numpy, precisamos decidir a forma dessa matriz. Nesse caso, a matriz precisa representar apenas um número de ponto flutuante, então podemos usar uma matriz de classificação zero. Portanto, a forma será [1]
. Além disso, o limite inferior do espaço de ação será 0 e o limite superior será a capacidade máxima (self.max_capacity
).
Definindo o Espaço de Observação
Agora, vamos definir o espaço de observação. Novamente, precisamos decidir sobre três pontos-chave: limites, tipo e forma do espaço. A forma da observação depende do lead time, e o comprimento da matriz de observação self.obs_dim
será igual a self.lead_time + 4
.
Para os limites da observação, podemos defini-los individualmente para cada elemento da matriz de observação. Como todos os elementos da matriz de observação são positivos, o limite inferior para todos os elementos será 0. Portanto, podemos usar uma matriz preenchida com zeros como limite inferior.
O limite superior dos primeiros cinco elementos da matriz será dado pela capacidade de armazenamento, pois nem o inventário disponível nem as ações podem exceder isso. O limite superior dos outros parâmetros será definido por nós mesmos, para garantir que o ambiente cubra uma ampla gama de valores para a demanda, os preços e o custo de armazenamento.
Escolhemos arbitrariamente Max Daily Demand = 200
para a demanda diária máxima, Max Selling Price = 200
para o preço máximo de venda e Max Holding Cost per Unit = 5
para o custo de armazenamento máximo por unidade.
Dessa forma, podemos definir o limite superior da matriz de observação como obs_high = np.array([self.max_capacity, self.max_capacity, self.max_capacity, self.max_capacity, max_daily_demand, max_daily_demand, max_daily_demand, max_daily_demand, max_selling_price, max_selling_price, max_holding_cost, max_holding_cost])
.
Quanto ao tipo de espaço, mais uma vez escolheremos o tipo de dados box, já que pelo menos um elemento (por exemplo, os preços) é um número de ponto flutuante. Portanto, o espaço de observação pode ser escrito como self.observation_space = spaces.Box(...)
. Definiremos o limite inferior e superior do espaço box usando obs_low
(preenchido com zeros) e obs_high
, respectivamente.
Conclusão
Neste vídeo, discutimos a definição do método Init para o ambiente personalizado do Gym no problema de gerenciamento de inventário. Definimos o espaço de observação e o espaço de ação, levando em consideração os limites, o tipo e a forma desses espaços. No próximo vídeo, mostraremos como implementar o método Reset para o ambiente de gerenciamento de inventário personalizado.
Destaques
- Definir o método Init para um ambiente personalizado do Gym no problema de gerenciamento de inventário.
- Decidir os limites, o tipo e a forma do espaço de observação e ação.
- Utilizar o tipo de espaço Box para aproximar as ações de ponto flutuante.
- Definir os limites inferior e superior para os espaços de observação e ação.
FAQ
Q: Por que escolher o tipo de espaço Box para aproximar as ações de ponto flutuante?
A: A escolha do tipo de espaço Box permite simplificar o problema, aproximando as ações usando um único número de ponto flutuante. Treinando o agente para maximizar as recompensas usando ações contínuas, podemos arredondar facilmente as previsões do agente para números inteiros durante a inferência sem perda significativa de desempenho.
Q: Posso definir um ambiente de gerenciamento de inventário com espaço de ação discreto em vez de espaço de ação contínuo?
A: Sim, você pode definir um ambiente de gerenciamento de inventário com espaço de ação discreto em vez de contínuo. No entanto, é importante considerar o desempenho e a eficácia do agente nesse tipo de configuração. Experimentar diferentes configurações de espaços de ação pode ser um projeto interessante para os cursos de curso.