【问题标题】:Using neural network approximator in reinforcementlearning.jl在强化学习.jl 中使用神经网络逼近器
【发布时间】:2021-05-14 15:41:41
【问题描述】:

我正在尝试使用reinforcementlearning.jl 创建一个同时多代理环境
我已经成功地代表了环境,它适用于每个代理的 RandomPolicy。

但是我的状态空间很大(实际上它是一个 14 元组,每个值都在一定范围内)。所以我不能使用表格近似器来估计 Q 或 V 值。这就是我决定使用神经网络逼近器的原因。但是文档并没有对此进行太多讨论,也没有任何使用神经网络逼近器的示例。我被困在如何弄清楚如何使用这种逼近器。如果有人可以解释如何去做,或者参考任何例子,那将会很有帮助。

此外,我从文档中发现使用神经网络逼近器需要我们使用CircularArraySARTTrajectory。但是定义这个轨迹需要一个叫做容量的关键词参数。我不知道它是什么意思,也没有在文档和 GitHub 中讨论过。

我尝试编写使用神经网络逼近器的代码,但出现错误。

# Create a flux based DNN for q - value estimation
STATE_SIZE = length(myenv.channels) # 14
ACTION_SIZE = length(values)        # 2

model = Chain(
      Dense(STATE_SIZE, 24, tanh),
      Dense(24, 48, tanh),
      Dense(48, ACTION_SIZE)
  ) |> gpu

η = 1f-2 # Learning rate
η_decay = 1f-3
opt = Flux.Optimiser(ADAM(η), InvDecay(η_decay))

policies = MultiAgentManager(
   (
       Agent(
           policy = NamedPolicy(
              p => VBasedPolicy(;
                  learner = BasicDQNLearner(;
                     approximator = NeuralNetworkApproximator(;
                         model = model,
                         optimizer = opt
                    )
                 )
             )
         ),
         trajectory = CircularArraySARTTrajectory(;
             capacity = 14,
             state=Array{Float64, 1},
             action=Int,
             terminal = Bool
         )
     )
     for p in players(myenv)
 )...
)

错误/堆栈跟踪

MethodError: no method matching iterate(::Type{Array{Float64,1}})
Closest candidates are:
  iterate(::Plots.NaNSegmentsIterator) at 
C:\Users\vchou\.julia\packages\Plots\lzHOt\src\utils.jl:124
  iterate(::Plots.NaNSegmentsIterator, ::Int64) at 
C:\Users\vchou\.julia\packages\Plots\lzHOt\src\utils.jl:124
  iterate(::LibGit2.GitBranchIter) at 
C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\LibGit2\src\reference.jl:343
  ...

Stacktrace:
 [1] first(::Type{T} where T) at .\abstractarray.jl:341
 [2] (::ReinforcementLearningCore.var"#53#54"{Int64})(::Type{T} where T) at C:\Users\vchou\.julia\packages\ReinforcementLearningCore\NWrFY\src\policies\agents\trajectories\trajectory.jl:46
 [3] map(::ReinforcementLearningCore.var"#53#54"{Int64}, ::Tuple{DataType,DataType}) at .\tuple.jl:158
 [4] map(::Function, ::NamedTuple{(:state, :action),Tuple{DataType,DataType}}) at .\namedtuple.jl:187
 [5] CircularArrayTrajectory(; capacity::Int64, kwargs::Base.Iterators.Pairs{Symbol,DataType,Tuple{Symbol,Symbol},NamedTuple{(:state, :action),Tuple{DataType,DataType}}}) at C:\Users\vchou\.julia\packages\ReinforcementLearningCore\NWrFY\src\policies\agents\trajectories\trajectory.jl:45
 [6] Trajectory{var"#s57"} where var"#s57"<:(NamedTuple{(:state, :action, :reward, :terminal),var"#s16"} where var"#s16"<:(Tuple{var"#s15",var"#s14",var"#s12",var"#s84"} where var"#s84"<:CircularArrayBuffers.CircularArrayBuffer where var"#s12" <:CircularArrayBuffers.CircularArrayBuffer where var"#s14"<:CircularArrayBuffers.CircularArrayBuffer where var"#s15"<:CircularArrayBuffers.CircularArrayBuffer))(; capacity::Int64, state::Type{T} where T, action::Type{T} where T, reward::Pair{DataType,Tuple{}}, terminal::Type{T} where T) at C:\Users\vchou\.julia\packages\ReinforcementLearningCore\NWrFY\src\policies\agents\trajectories\trajectory.jl:76
 [7] (::var"#24#25")(::String) at .\none:0
 [8] iterate(::Base.Generator{Array{String,1},var"#24#25"}) at .\generator.jl:47
 [9] top-level scope at In[18]:15
 [10] include_string(::Function, ::Module, ::String, ::String) at .\loading.jl:1091

【问题讨论】:

    标签: julia reinforcement-learning


    【解决方案1】:

    这里的capacity 表示体验回放缓冲区的最大长度。在应用 DQN 相关算法时,我们通常使用循环缓冲区来存储每一步的转换。

    你上面贴的错误说明你在定义CircularArraySARTTrajectory的时候忘记定义状态的大小。

    -              state=Array{Float64, 1},
    +              state=Array{Float64, 1} => (STATE_SIZE,),
    

    您可以找到一些示例用法here。我建议您在该包中创建一个问题,因为CircularArraySARTTrajectory 的文档字符串肯定应该包含在文档中。

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      相关资源
      最近更新 更多