我正在尝试在 OpenAI Gym 环境中使用强化学习解决方案,该环境具有 6 个具有连续值的离散动作,例如将参数 1 增加为 2.2,将参数 1 减少为 1.6,将参数 3 减少为 1 等。
我在这段代码中看到,这样的动作空间被实现为一个连续空间,其中第一个值近似于离散值(例如,如果小于 1,则为 0,如果小于 2 且大于 1,则为 2)。
有人知道上述解决方案是否是实现这种行动空间的正确方法吗?还是健身房提供另一种方式?
我正在尝试在 OpenAI Gym 环境中使用强化学习解决方案,该环境具有 6 个具有连续值的离散动作,例如将参数 1 增加为 2.2,将参数 1 减少为 1.6,将参数 3 减少为 1 等。
我在这段代码中看到,这样的动作空间被实现为一个连续空间,其中第一个值近似于离散值(例如,如果小于 1,则为 0,如果小于 2 且大于 1,则为 2)。
有人知道上述解决方案是否是实现这种行动空间的正确方法吗?还是健身房提供另一种方式?
这是一个演示这一点的示例环境。它依赖环境成功过滤出正确的连续控制元素
import gym
from gym.spaces import Dict, Discrete, Box, Tuple
import numpy as np
class SampleGym(gym.Env):
def __init__(self, config={}):
self.config = config
self.action_space = Tuple((Discrete(2), Box(-10, 10, (2,))))
self.observation_space = Box(-10, 10, (2, 2))
self.p_done = config.get("p_done", 0.1)
def reset(self):
return self.observation_space.sample()
def step(self, action):
chosen_action = action[0]
cnt_control = action[1][chosen_action]
if chosen_action == 0:
reward = cnt_control
else:
reward = -cnt_control - 1
print(f"Action, {chosen_action} continuous ctrl {cnt_control}")
return (
self.observation_space.sample(),
reward,
bool(np.random.choice([True, False], p=[self.p_done, 1.0 - self.p_done])),
{},
)
if __name__ == "__main__":
env = SampleGym()
env.reset()
env.step((1, [-1, 2.1])) # should say use action 1 with 2.1
env.step((0, [-1.1, 2.1])) # should say use action 0 with -1.1
```