use dict string key
This commit is contained in:
+3
-3
@@ -64,10 +64,10 @@ function runMCTS(
|
|||||||
saveSimulatedNode::Bool=false,
|
saveSimulatedNode::Bool=false,
|
||||||
multithread=false,
|
multithread=false,
|
||||||
)::NamedTuple{(:root, :bestNextState, :bestTerminalState, :highValueStateList),
|
)::NamedTuple{(:root, :bestNextState, :bestTerminalState, :highValueStateList),
|
||||||
Tuple{MCTSNode,T,T,Vector{Dict{Symbol,Any}}}} where {T<:Any}
|
Tuple{MCTSNode,T,T,Vector{Dict{String,Any}}}} where {T<:Any}
|
||||||
|
|
||||||
root = MCTSNode("root", initialstate, 0, 0, 0, 0, false, nothing, Dict{String,MCTSNode}(),
|
root = MCTSNode("root", initialstate, 0, 0, 0, 0, false, nothing, Dict{String,MCTSNode}(),
|
||||||
Dict{Symbol,Any}())
|
Dict{String,Any}())
|
||||||
|
|
||||||
# storage for holding all high reward terminal nodes
|
# storage for holding all high reward terminal nodes
|
||||||
highValueState = Channel{Any}(100)
|
highValueState = Channel{Any}(100)
|
||||||
@@ -125,7 +125,7 @@ function runMCTS(
|
|||||||
bestTerminalState = selectBestTrajectoryNode(root)
|
bestTerminalState = selectBestTrajectoryNode(root)
|
||||||
|
|
||||||
# take all high value state from highValueState channel and put it in a list
|
# take all high value state from highValueState channel and put it in a list
|
||||||
highValueStateList = Vector{Dict{Symbol, Any}}()
|
highValueStateList = Vector{Dict{String, Any}}()
|
||||||
while !isempty(highValueState)
|
while !isempty(highValueState)
|
||||||
push!(highValueStateList, take!(highValueState))
|
push!(highValueStateList, take!(highValueState))
|
||||||
end
|
end
|
||||||
|
|||||||
+12
-12
@@ -120,14 +120,14 @@ end
|
|||||||
```jldoctest
|
```jldoctest
|
||||||
julia> using Revise
|
julia> using Revise
|
||||||
julia> using YiemAgent, DataStructures
|
julia> using YiemAgent, DataStructures
|
||||||
julia> initialState = Dict{Symbol, Any}(
|
julia> initialState = Dict{String, Any}(
|
||||||
:customerinfo=> Dict{Symbol, Any}(),
|
"customerinfo"=> Dict{String, Any}(),
|
||||||
:storeinfo=> Dict{Symbol, Any}(),
|
"storeinfo"=> Dict{String, Any}(),
|
||||||
|
|
||||||
:thoughtHistory=> OrderedDict{Symbol, Any}(
|
"thoughtHistory"=> OrderedDict{String, Any}(
|
||||||
:question=> "How are you?",
|
"question"=> "How are you?",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
julia> statetype = typeof(initialState)
|
julia> statetype = typeof(initialState)
|
||||||
julia> root = YiemAgent.MCTSNode(initialState, 0, 0.0, Dict{statetype, YiemAgent.MCTSNode}())
|
julia> root = YiemAgent.MCTSNode(initialState, 0, 0.0, Dict{statetype, YiemAgent.MCTSNode}())
|
||||||
julia> YiemAgent.isleaf(root)
|
julia> YiemAgent.isleaf(root)
|
||||||
@@ -247,7 +247,7 @@ function _expand(node::MCTSNode,transition::Function, transitionargs::NamedTuple
|
|||||||
"""
|
"""
|
||||||
if newNodeKey ∉ keys(node.children)
|
if newNodeKey ∉ keys(node.children)
|
||||||
newNode = MCTSNode(newNodeKey, newstate, 0, progressvalue, 0, newstate[:reward],
|
newNode = MCTSNode(newNodeKey, newstate, 0, progressvalue, 0, newstate[:reward],
|
||||||
newstate[:isterminal], node, Dict{String, MCTSNode}(), Dict{Symbol, Any}())
|
newstate[:isterminal], node, Dict{String, MCTSNode}(), Dict{String, Any}())
|
||||||
node.children[newNodeKey] = newNode
|
node.children[newNodeKey] = newNode
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -273,14 +273,14 @@ end
|
|||||||
# Return
|
# Return
|
||||||
- `simTrajectoryReward::Number`
|
- `simTrajectoryReward::Number`
|
||||||
Cumulative reward collected along the simulation trajectory
|
Cumulative reward collected along the simulation trajectory
|
||||||
- `terminalstate::Union{Dict{Symbol, Any}, Nothing}`
|
- `terminalstate::Union{Dict{String, Any}, Nothing}`
|
||||||
Final state if terminal state reached, nothing otherwise
|
Final state if terminal state reached, nothing otherwise
|
||||||
|
|
||||||
# Signature
|
# Signature
|
||||||
"""
|
"""
|
||||||
function simulate(node::MCTSNode, transition::Function, transitionargs::NamedTuple;
|
function simulate(node::MCTSNode, transition::Function, transitionargs::NamedTuple;
|
||||||
maxSimulationDepth::Integer=3, horizontalSample::Integer=3, multithread=false
|
maxSimulationDepth::Integer=3, horizontalSample::Integer=3, multithread=false
|
||||||
)::NamedTuple{(:simTrajectoryReward, :terminalstate), Tuple{<:Number, Union{Dict{Symbol, Any}, Nothing}}}
|
)::NamedTuple{(:simTrajectoryReward, :terminalstate), Tuple{<:Number, Union{Dict{String, Any}, Nothing}}}
|
||||||
|
|
||||||
simTrajectoryReward = 0.0
|
simTrajectoryReward = 0.0
|
||||||
terminalstate = nothing
|
terminalstate = nothing
|
||||||
@@ -319,7 +319,7 @@ end
|
|||||||
# Whether this state is terminal
|
# Whether this state is terminal
|
||||||
|
|
||||||
# # Return
|
# # Return
|
||||||
# - `Tuple{String, Dict{Symbol, <:Any}}`
|
# - `Tuple{String, Dict{String, <:Any}}`
|
||||||
# A tuple containing:
|
# A tuple containing:
|
||||||
# - A unique node key string
|
# - A unique node key string
|
||||||
# - A new state dictionary with updated thought history and metadata
|
# - A new state dictionary with updated thought history and metadata
|
||||||
@@ -333,7 +333,7 @@ end
|
|||||||
# """
|
# """
|
||||||
# function makeNewState(currentstate::T1, thoughtDict::T4, response::T2, select::Union{T3, Nothing},
|
# function makeNewState(currentstate::T1, thoughtDict::T4, response::T2, select::Union{T3, Nothing},
|
||||||
# reward::T3, isterminal::Bool
|
# reward::T3, isterminal::Bool
|
||||||
# )::Tuple{String, Dict{Symbol, <:Any}} where {T1<:AbstractDict, T2<:AbstractString, T3<:Number, T4<:AbstractDict}
|
# )::Tuple{String, Dict{String, <:Any}} where {T1<:AbstractDict, T2<:AbstractString, T3<:Number, T4<:AbstractDict}
|
||||||
|
|
||||||
# # Find the latest thought key and index from current state's thought history
|
# # Find the latest thought key and index from current state's thought history
|
||||||
# currentstate_latestThoughtKey, currentstate_latestThoughtIndice =
|
# currentstate_latestThoughtKey, currentstate_latestThoughtIndice =
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ mutable struct MCTSNode{T1<:AbstractDict, T2<:AbstractString}
|
|||||||
isterminal::Bool
|
isterminal::Bool
|
||||||
parent::Union{MCTSNode, Nothing}
|
parent::Union{MCTSNode, Nothing}
|
||||||
children::Dict{String, MCTSNode}
|
children::Dict{String, MCTSNode}
|
||||||
etc::Dict{Symbol, Any} # store anything
|
etc::Dict{String, Any} # store anything
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user