Closed clburks9 closed 5 years ago
Hi @clburks9 ,
The error results because you have created a new function actions
(or Main.actions
) instead of creating a new method of POMDPs.actions
.
Observe that the output of methods(actions)
has only 1 method, while the output of methods(POMDPs.actions)
has many methods, but none for D2Diffs
In order to create new methods of the interface functions in the POMDPs
module, you need to import them with the import
keyword instead of using
, or qualify each new definition with POMDPs
, e.g. POMDPs.actions(::D2Diffs) = [0,1,2,3,4]
.
More documentation can be found here: https://docs.julialang.org/en/v1/manual/modules/
You may also want to use this package: https://github.com/NTimmons/ImportAll.jl
Hope that all makes sense!
@zsunberg , Thanks for the quick response!
Your suggestion fixed the error related to the actions function, but now I'm getting a similar, but slightly different error with the observation function. The methods(POMDPs.observation) returns a result with observation(::D2Diffs, s::Array). The error given below seems to be looking for a ::Float64 instead of an array.
ERROR: LoadError: MethodError: no method matching observation(::D2Diffs, ::Float64)
Closest candidates are:
observation(::POMDP, ::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:81
observation(::POMDP, ::Any, !Matched::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:90
observation(!Matched::POMDPModelTools.FullyObservablePOMDP, ::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPModelTools/eHEjm/src/fully_observable_pomdp.jl:23
...
Stacktrace:
[1] observation(::D2Diffs, ::Int64, ::Float64) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:81
[2] observation(::D2Diffs, ::Array{Float64,1}, ::Int64, ::Float64) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:90
[3] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:92 [inlined]
[4] generate_o(::D2Diffs, ::Array{Float64,1}, ::Int64, ::Float64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:91
[5] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:129 [inlined]
[6] generate_so(::D2Diffs, ::Array{Float64,1}, ::Int64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:127
[7] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:168 [inlined]
[8] generate_sor(::D2Diffs, ::Array{Float64,1}, ::Int64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:167
[9] simulate(::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::Array{Float64,1}, ::BasicPOMCP.POMCPObsNode{Int64,Int64}, ::Int64) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:90
[10] search(::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::ParticleCollection{Array{Float64,1}}, ::BasicPOMCP.POMCPTree{Int64,Int64}, ::Dict{Symbol,Any}) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:32
[11] #action_info#4(::Bool, ::Function, ::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::ParticleCollection{Array{Float64,1}}) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:6
[12] action_info at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:2 [inlined]
[13] action at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:19 [inlined]
[14] simulate at /home/cohrint/.julia/packages/POMDPSimulators/xyfJM/src/rollout.jl:100 [inlined]
[15] simulate(::RolloutSimulator{MersenneTwister}, ::D2Diffs, ::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::BasicParticleFilter{D2Diffs,D2Diffs,LowVarianceResampler,MersenneTwister,Array{Array,1}}, ::MvNormal{Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},Distributions.ZeroVector{Float64}}) at /home/cohrint/.julia/packages/POMDPSimulators/xyfJM/src/rollout.jl:61
[16] top-level scope at none:0
[17] include at ./boot.jl:317 [inlined]
[18] include_relative(::Module, ::String) at ./loading.jl:1044
[19] include(::Module, ::String) at ./sysimg.jl:29
[20] exec_options(::Base.JLOptions) at ./client.jl:231
[21] _start() at ./client.jl:425
in expression starting at /home/cohrint/juliaPOMCP/D2DiffsTest.jl:160
'''
This error is caused because transition
is returning a state instead of a
distribution over states
Note the difference between the explicit and generative model interfaces: http://juliapomdp.github.io/POMDPs.jl/latest/def_pomdp/
(sent from phone)
On Wed, Dec 12, 2018, 11:56 Luke Burks <notifications@github.com wrote:
@zsunberg https://github.com/zsunberg , Thanks for the quick response!
Your suggestion fixed the error related to the actions function, but now I'm getting a similar, but slightly different error with the observation function. The methods(POMDPs.observation) returns a result with observation(::D2Diffs, s::Array). The error given below seems to be looking for a ::Float64 instead of an array.
ERROR: LoadError: MethodError: no method matching observation(::D2Diffs, ::Float64) Closest candidates are: observation(::POMDP, ::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:81 observation(::POMDP, ::Any, !Matched::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:90 observation(!Matched::POMDPModelTools.FullyObservablePOMDP, ::Any, !Matched::Any) at /home/cohrint/.julia/packages/POMDPModelTools/eHEjm/src/fully_observable_pomdp.jl:23 ... Stacktrace: [1] observation(::D2Diffs, ::Int64, ::Float64) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:81 [2] observation(::D2Diffs, ::Array{Float64,1}, ::Int64, ::Float64) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/pomdp.jl:90 [3] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:92 [inlined] [4] generate_o(::D2Diffs, ::Array{Float64,1}, ::Int64, ::Float64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:91 [5] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:129 [inlined] [6] generate_so(::D2Diffs, ::Array{Float64,1}, ::Int64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:127 [7] macro expansion at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:168 [inlined] [8] generate_sor(::D2Diffs, ::Array{Float64,1}, ::Int64, ::MersenneTwister) at /home/cohrint/.julia/packages/POMDPs/JiYXY/src/generative_impl.jl:167 [9] simulate(::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::Array{Float64,1}, ::BasicPOMCP.POMCPObsNode{Int64,Int64}, ::Int64) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:90 [10] search(::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::ParticleCollection{Array{Float64,1}}, ::BasicPOMCP.POMCPTree{Int64,Int64}, ::Dict{Symbol,Any}) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:32 [11] #action_info#4(::Bool, ::Function, ::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::ParticleCollection{Array{Float64,1}}) at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:6 [12] action_info at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:2 [inlined] [13] action at /home/cohrint/.julia/packages/BasicPOMCP/01DOC/src/solver.jl:19 [inlined] [14] simulate at /home/cohrint/.julia/packages/POMDPSimulators/xyfJM/src/rollout.jl:100 [inlined] [15] simulate(::RolloutSimulator{MersenneTwister}, ::D2Diffs, ::POMCPPlanner{D2Diffs,BasicPOMCP.SolvedPORollout{RandomPolicy{MersenneTwister,D2Diffs,BeliefUpdaters.NothingUpdater},BeliefUpdaters.NothingUpdater,MersenneTwister},MersenneTwister}, ::BasicParticleFilter{D2Diffs,D2Diffs,LowVarianceResampler,MersenneTwister,Array{Array,1}}, ::MvNormal{Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},Distributions.ZeroVector{Float64}}) at /home/cohrint/.julia/packages/POMDPSimulators/xyfJM/src/rollout.jl:61 [16] top-level scope at none:0 [17] include at ./boot.jl:317 [inlined] [18] include_relative(::Module, ::String) at ./loading.jl:1044 [19] include(::Module, ::String) at ./sysimg.jl:29 [20] exec_options(::Base.JLOptions) at ./client.jl:231 [21] _start() at ./client.jl:425 in expression starting at /home/cohrint/juliaPOMCP/D2DiffsTest.jl:160 '''
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/JuliaPOMDP/POMDPModels.jl/issues/55#issuecomment-446722545, or mute the thread https://github.com/notifications/unsubscribe-auth/AEC0a-5-ZhMv4rQqad7S_j7CX7CVykjsks5u4V93gaJpZM4ZQLQh .
Thank you! The error has been resolved
Cool. Also, something to be aware of - having an abstract type or UnionAll
like Array
as your state type may result in very poor performance. Consider using a concrete type like Vector{Float64}
or check out StaticArrays.jl for even better performance if the size is static.
I'm going to close this issue now since it appears to have been resolved.
Recreating the LightDark1D problem in a 2D toy problem called D2Diffs. When the simulate command is run with arguments for rollout_sim, pomdp, planner, filter, and belief, the following error is thrown with respect to the function actions(::D2Diffs):
This is despite the function being defined prior to the simulate call, show in the code posted below. Changes to the LightDark1D example which may affect something include the use of a 2D state and the lack of a defined struct for D2DiffsState and D2DiffsStateDist, passing a Multivariate normal to simulate instead.