In [ ]:
push!(LOAD_PATH,joinpath("..","src"))
push!(LOAD_PATH,joinpath("..","..","..","POMCP.jl","src"))
using Multilane
using POMCP
using POMDPToolbox
using GenerativeModels
using MCTS
using JLD

In [ ]:
nb_lanes = 4
pp = PhysicalParam(nb_lanes,lane_length=100.) #2.=>col_length=8\n",
_discount = 1.
nb_cars=10
dmodel = NoCrashIDMMOBILModel(nb_cars, pp)

N = 10

POMCP.node_tag(a::MLAction) = string("(",a.acc,",", a.lane_change, ")")
POMCP.tooltip_tag(::MLAction) = ""

POMCP.node_tag(::Any) = ""
POMCP.tooltip_tag(::Any) = ""

models = JLD.load("rmodels.jld")
rmodels = models["rmodels"]

In [ ]:
rmodel = rmodels[1]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=3.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[2]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=5.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5
policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[3]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=20.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[4]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=50.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[5]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=150.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[6]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=300.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[7]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=600.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[8]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=1500.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[9]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=3000.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
rmodel = rmodels[10]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=5000.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

a = action(policy, b)

visualize(pomdp, s, a, s)

POMCPTreeVisualizer(b)

In [ ]:
using ProfileView

In [ ]:
rmodel = rmodels[1]

pomdp = NoCrashPOMDP(dmodel, rmodel, _discount)

bu = ParticleUpdater(100, pomdp, MersenneTwister(555))

rng = MersenneTwister(12345) # w/ seed=1, get crash!

solver = POMCPDPWSolver(eps=0.01,
                     c=3.0,
                     tree_queries=100,
                    alpha_observation=0.75, # 10 higher -> widens faster
                    k_observation=0.3, # 0.5 higher -> widens faster
                    alpha_action=5., #10
                    k_action=0.5,
rollout_solver=SimpleSolver()) #0.5

policy = POMDPs.solve(solver, pomdp)
state = rng.seed
s = initial_state(pomdp, rng)
_b = create_belief(bu,s)
q = rand(rng,_b)

b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())

In [ ]:
function POMCP.extract_belief(::POMDPToolbox.FastPreviousObservationUpdater{MLObs}, node::RootNode)
  rand(MersenneTwister(1),node.B)
end

POMCP.initialize_belief(u::FastPreviousObservationUpdater{MLObs}, o::Union{MLState,MLObs}) = o

POMCP.create_belief(u::FastPreviousObservationUpdater{MLObs}) = nothing

POMCP.extract_belief(::POMDPToolbox.FastPreviousObservationUpdater{MLObs}, node::BeliefNode) = node.label[2]


policy = POMDPs.solve(solver, pomdp)
a = action(policy, b)

In [ ]:
b = RootNode(0, _b, Dict{Any,POMCP.ActNode}())
Profile.clear()
@profile for i = 1:10000; action(policy2, s); end
ProfileView.view()

In [ ]:
policy2 = solve(SimpleSolver(),pomdp)

In [ ]: