我是钢筋加固领域的新手,可能需要一些帮助。
我试图实现自己的非常简单的机器人环境。所不同的是,我想使用6个单轴的角度代替TCP的笛卡尔坐标作为观察。因此,观察空间总和为一个包含13个元素的向量。前6个:当前轴值,后6个:目标值,最后一个是当前状态的分数。我减去实际位置和目标位置,计算出每个动作的“得分”。然后,我将总和超过绝对值,然后将其除以六。这样,我在演员执行的每个步骤中得到的分数在0到100之间。如果当前步骤是一个好步骤(得分>分数,旧),那么我将以+1奖励,如果不是,则以-2奖励。对于击中目标的演员,演员可获得200分的奖励
我的动作空间包括6轴的连续角运动。
我使用开放式AI基准PPO2作为强化算法来测试我的环境。 (https://stable-baselines.readthedocs.io/en/master/modules/ppo2.html)
我第一次尝试达到单点。因此,我在每个情节之后将目标值重置为特定点。 第一次测量时,我只雇用了一名工人,学习曲线看起来非常好(见图:橙色)。 然后,我将工人最多堆积了12位,并且在我的想象中应该有相同的结果,但是更快? 我对结果感到有些失望,也不知道为什么结果如此糟糕(请参见图形:蓝色)。
为了对环境进行矢量化处理,我使用了与stable_baselines.common中的make_vec_env类似的函数
def make_MY_vec_env(envCallback, n_envs=1, accuracy=100, seed=None, start_index=0,
monitor_dir=None, wrapper_class=None,
env_kwargs=None, vec_env_cls=None, vec_env_kwargs=None,name=""):
"""
Based on stabel_baselines/common/cmd_util.py
"""
env_kwargs = {} if env_kwargs is None else env_kwargs
vec_env_kwargs = {} if vec_env_kwargs is None else vec_env_kwargs
def make_env(rank):
def _init():
env = envCallback(accuracy,name=name)
# Wrap the env in a Monitor wrapper
# to have additional training information
monitor_path = os.path.join(monitor_dir, str(rank)) if monitor_dir is not None else None
# Create the monitor folder if needed
if monitor_path is not None:
os.makedirs(monitor_dir, exist_ok=True)
env = Monitor(env, filename=monitor_path)
# Optionally, wrap the environment with the provided wrapper
if wrapper_class is not None:
env = wrapper_class(env)
return env
return _init
# No custom VecEnv is passed
if vec_env_cls is None:
# Default: use a DummyVecEnv
vec_env_cls = DummyVecEnv
return vec_env_cls([make_env(i + start_index) for i in range(n_envs)], **vec_env_kwargs)
原始函数使用环境ID代替回调函数。这是我用以下代码替换的代码:
env = envCallback(准确性,名称=名称)。
if isinstance(env_id, str):
env = gym.make(env_id)
if len(env_kwargs) > 0:
warnings.warn("No environment class was passed (only an env ID) so `env_kwargs` will be ignored")
else:
env = env_id(**env_kwargs)
if seed is not None:
env.seed(seed + rank)
env.action_space.seed(seed + rank)
我目前不使用种子,因为PPO2基线示例中的示例也未使用它。 有谁知道为什么我的向量化环境学习如此糟糕?