从 PyEnvironment 继承的方法会导致错误,因为函数名称开头有下划线



我收到以下错误。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [3], in <cell line: 30>()
27     def observation_spec(self):
28         return self._observation_spec
---> 30 env = connect4_env(4)
TypeError: Can't instantiate abstract class connect4_env with abstract methods _reset, _step

我从来没有真正使函数_reset所以它一定来自py_environment。PyEnvironment

下面的代码

from tf_agents.environments import py_environment
from tf_agents.environments import tf_environment
from tf_agents.environments import tf_py_environment
from tf_agents.environments import utils
from tf_agents.specs import array_spec
from tf_agents.environments import wrappers
from tf_agents.environments import suite_gym
from tf_agents.trajectories import time_step as ts
class connect4_env(py_environment.PyEnvironment):

def __init__(self , num_slots):

self._action_spec = array_spec.BoundedArraySpec(
shape=(), dtype=np.int32, minimum=0, maximum=num_slots-1, name='play')
self._observation_spec = array_spec.BoundedArraySpec(
shape=(1,num_slots), dtype=np.int32, minimum=0, maximum=1, name='board')
self._state = [0 for num in num_slots]
self._episode_ended = False

def action_spec(self):
return self._action_spec

def observation_spec(self):
return self._observation_spec
env = connect4_env(4)

我该如何解决这个问题?

为什么会这样?如果它来自py_environment。PyEnvironment不是内置的吗?为什么内置函数的名称会破坏一切?

####

以下额外信息

IM 使用 Anaconda

IM 使用 tf_agents 版本 0.13.0

我按照本教程(但略有不同)https://towardsdatascience.com/creating-a-custom-environment-for-tensorflow-agent-tic-tac-toe-example-b66902f73059

我相信问题如标题中所述,但我不确定

#####

更新

我进行了这些更改

from tf_agents.environments import py_environment , _reset, _step

class connect4_env(py_environment.PyEnvironment):
@_reset 
@_step
def __init__(self , num_slots):

因为我相信我需要从 tf_agents.Environment 导入_reset并在创建我的类时使用@_reset但现在收到此错误。

ImportError: cannot import name '_reset' from 'tf_agents.environments' (C:Userstgmjackanaconda3libsite-packagestf_agentsenvironments__init__.py)

生病继续寻找

我似乎无法导入抽象函数

请在此处阅读有关抽象类的信息或在Google上查找。

您需要在继承自它的子类中实现py_environment.PyEnvironment中定义的所有抽象方法。

相关内容

  • 没有找到相关文章

最新更新