Я хотел бы использовать пакет DeepQLearning.jl из https://github.com/JuliaPOMDP/DeepQLearning.jl. Для этого мы должны сделать что-то похожее на
using DeepQLearning
using POMDPs
using Flux
using POMDPModels
using POMDPSimulators
using POMDPPolicies
# load MDP model from POMDPModels or define your own!
mdp = SimpleGridWorld();
# Define the Q network (see Flux.jl documentation)
# the gridworld state is represented by a 2 dimensional vector.
model = Chain(Dense(2, 32), Dense(32, length(actions(mdp))))
exploration = EpsGreedyPolicy(mdp, LinearDecaySchedule(start=1.0, stop=0.01, steps=10000/2))
solver = DeepQLearningSolver(qnetwork = model, max_steps=10000,
exploration_policy = exploration,
learning_rate=0.005,log_freq=500,
recurrence=false,double_q=true, dueling=true, prioritized_replay=true)
policy = solve(solver, mdp)
sim = RolloutSimulator(max_steps=30)
r_tot = simulate(sim, mdp, policy)
println("Total discounted reward for 1 simulation: $r_tot")
В строке mdp = SimpleGridWorld()
мы создаем MDP. Когда я пытался создать MDP, у меня была проблема с очень большим пространством состояний. Состояние в моем MDP - это вектор в {1,2,...,m}^n
для некоторых m
и n
. Итак, при определении функции POMDPs.states(mdp::myMDP)
я понял, что должен перебрать все состояния, которые очень большие, то есть m^n
.
Я неправильно использую пакет? Или мы должны перебирать состояния, даже если их экспоненциально много? Если второе, то в чем смысл использования Deep Q Learning? Я подумал, что Deep Q Learning может помочь, когда пространство действий и состояний очень велико.