Traceback (most recent call last):
File "/home/bill/anaconda3/envs/uncertain/lib/python3.6/site-packages/julia/pseudo_python_cli.py", line 308, in main
python(**vars(ns))
File "/home/bill/anaconda3/envs/uncertain/lib/python3.6/site-packages/julia/pseudo_python_cli.py", line 59, in python
scope = runpy.run_path(script, run_name="__main__")
File "/home/bill/anaconda3/envs/uncertain/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/home/bill/anaconda3/envs/uncertain/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/home/bill/anaconda3/envs/uncertain/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "tiger.py", line 50, in <module>
policy = solve(solver, m)
RuntimeError: <PyCall.jlwrap (in a Julia function called from Python)
JULIA: UndefRefError: access to undefined reference
Stacktrace:
[1] getproperty(::Type{T} where T, ::Symbol) at ./Base.jl:28
[2] #s12#1 at /home/bill/.julia/packages/Tricks/Omjx9/src/Tricks.jl:20 [inlined]
[3] #s12#1(::Any, ::Any, ::Any, ::Any) at ./none:0
[4] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any,N} where N) at ./boot.jl:527
[5] reward(::QuickPOMDPs.QuickPOMDP{UUID("936c9395-802f-48a6-b0da-f1480db0aef3"),String,String,String,NamedTuple{(:stateindex, :isterminal, :obsindex, :states, :observations, :discount, :actions, :observation, :actionindex, :initialstate, :transition, :reward),Tuple{Dict{String,Int64},Bool,Dict{String,Int64},Array{String,1},Array{String,1},Float64,Array{String,1},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},Dict{String,Int64},POMDPModelTools.Uniform{Set{String}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}}}}}, ::String, ::String, ::String) at /home/bill/.julia/packages/QuickPOMDPs/ELi8v/src/quick.jl:227
[6] reward at /home/bill/.julia/packages/POMDPModelTools/cpJHo/src/underlying_mdp.jl:26 [inlined]
[7] macro expansion at /home/bill/.julia/packages/DiscreteValueIteration/FjeJj/src/vanilla.jl:120 [inlined]
[8] macro expansion at ./timing.jl:233 [inlined]
[9] solve(::DiscreteValueIteration.ValueIterationSolver, ::POMDPModelTools.UnderlyingMDP{QuickPOMDPs.QuickPOMDP{UUID("936c9395-802f-48a6-b0da-f1480db0aef3"),String,String,String,NamedTuple{(:stateindex, :isterminal, :obsindex, :states, :observations, :discount, :actions, :observation, :actionindex, :initialstate, :transition, :reward),Tuple{Dict{String,Int64},Bool,Dict{String,Int64},Array{String,1},Array{String,1},Float64,Array{String,1},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},Dict{String,Int64},POMDPModelTools.Uniform{Set{String}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}}}}},String,String}; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/bill/.julia/packages/DiscreteValueIteration/FjeJj/src/vanilla.jl:102
[10] solve at /home/bill/.julia/packages/DiscreteValueIteration/FjeJj/src/vanilla.jl:67 [inlined]
[11] solve(::QMDP.QMDPSolver{DiscreteValueIteration.ValueIterationSolver}, ::QuickPOMDPs.QuickPOMDP{UUID("936c9395-802f-48a6-b0da-f1480db0aef3"),String,String,String,NamedTuple{(:stateindex, :isterminal, :obsindex, :states, :observations, :discount, :actions, :observation, :actionindex, :initialstate, :transition, :reward),Tuple{Dict{String,Int64},Bool,Dict{String,Int64},Array{String,1},Array{String,1},Float64,Array{String,1},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},Dict{String,Int64},POMDPModelTools.Uniform{Set{String}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}},PyCall.var"#fn#26"{PyCall.var"#fn#25#27"{PyObject}}}}}) at /home/bill/.julia/packages/QMDP/tu6hY/src/vanilla.jl:34
[12] invokelatest(::Any, ::Any, ::Vararg{Any,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at ./essentials.jl:710
[13] invokelatest(::Any, ::Any, ::Vararg{Any,N} where N) at ./essentials.jl:709
[14] _pyjlwrap_call(::Function, ::Ptr{PyCall.PyObject_struct}, ::Ptr{PyCall.PyObject_struct}) at /home/bill/.julia/packages/PyCall/tqyST/src/callback.jl:28
[15] pyjlwrap_call(::Ptr{PyCall.PyObject_struct}, ::Ptr{PyCall.PyObject_struct}, ::Ptr{PyCall.PyObject_struct}) at /home/bill/.julia/packages/PyCall/tqyST/src/callback.jl:44
[16] macro expansion at /home/bill/.julia/packages/PyCall/tqyST/src/exception.jl:95 [inlined]
[17] #109 at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:43 [inlined]
[18] disable_sigint at ./c.jl:446 [inlined]
[19] __pycall! at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:42 [inlined]
[20] _pycall!(::PyObject, ::PyObject, ::Tuple{Array{String,1}}, ::Int64, ::Ptr{Nothing}) at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:29
[21] _pycall! at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:11 [inlined]
[22] #_#116 at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:86 [inlined]
[23] (::PyObject)(::Array{String,1}) at /home/bill/.julia/packages/PyCall/tqyST/src/pyfncall.jl:86
[24] top-level scope at none:4
[25] eval(::Module, ::Any) at ./boot.jl:331
[26] exec_options(::Base.JLOptions) at ./client.jl:272
[27] _start() at ./client.jl:506>
from quickpomdps import *
from julia.POMDPs import solve, pdf
from julia.QMDP import QMDPSolver
from julia.POMDPSimulators import stepthrough
from julia.POMDPPolicies import alphavectors
from julia.POMDPModelTools import SparseCat, Uniform, Deterministic
def transition_function(s, a):
if a == 'listen':
return Deterministic(s)
else:
return Uniform(['left','right'])
def observation(s, a, sp):
if a == 'listen':
if sp == 'left':
return SparseCat(['left', 'right'], [0.85,0.15])
else:
return SparseCat(['right', 'left'], [0.85, 0.15])
end
else:
return Uniform(['left', 'right'])
def reward(s, a):
if a == 'listen':
return -1.0
elif s == a: # the tiger was found
return -100.0
else: # the tiger was escaped
return 10.0
m = QuickPOMDP(states=['left','right'],
actions=['left','right', 'listen'],
observations=['left', 'right'],
initialstate=Uniform(['left','right']),
discount = 0.95,
transition=transition_function,
observation=observation,
reward=reward
)
solver = QMDPSolver()
policy = solve(solver, m)
print('alpha vectors:')
for v in alphavectors(policy):
print(v)
print()
rsum = 0.0
for step in stepthrough(m, policy, max_steps=10):
print('s:', step.s)
print('b:', [pdf(step.b, x) for x in S])
print('a:', step.a)
print('o:', step.o, '\n')
rsum += step.r
print('Undiscounted reward was', rsum)