update
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# Math Problem Solving - MCTS Example
|
||||
|
||||
This example demonstrates using MCTS to solve a math problem by exploring different solution strategies.
|
||||
|
||||
```julia
|
||||
using LLMMCTS
|
||||
|
||||
# State represents the current state of problem solving
|
||||
# It contains the problem statement and the steps taken so far
|
||||
|
||||
function math_problem_transition(state::Dict, args::NamedTuple)
|
||||
current_step = get(state, :step, 0)
|
||||
problem = state[:problem]
|
||||
|
||||
# Example problem: Solve x^2 = 16
|
||||
if current_step == 0
|
||||
# First step: analyze the problem
|
||||
newstate = Dict(
|
||||
:step => 1,
|
||||
:thought => "This is a quadratic equation x^2 = 16",
|
||||
:action => "Take square root of both sides",
|
||||
:reward => 2.0,
|
||||
:isterminal => false
|
||||
)
|
||||
progressvalue = 5.0
|
||||
elseif current_step == 1
|
||||
# Second step: solve
|
||||
newstate = Dict(
|
||||
:step => 2,
|
||||
:thought => "Taking square root gives x = ±4",
|
||||
:action => "x = sqrt(16) or x = -sqrt(16)",
|
||||
:reward => 3.0,
|
||||
:isterminal => false
|
||||
)
|
||||
progressvalue = 7.0
|
||||
elseif current_step == 2
|
||||
# Third step: verify
|
||||
newstate = Dict(
|
||||
:step => 3,
|
||||
:thought => "Verify both solutions work",
|
||||
:action => "Check x=4: 4^2=16 ✓, Check x=-4: (-4)^2=16 ✓",
|
||||
:reward => 5.0,
|
||||
:isterminal => true # Problem solved!
|
||||
)
|
||||
progressvalue = 10.0
|
||||
else
|
||||
# Terminal state
|
||||
newstate = Dict(
|
||||
:step => current_step,
|
||||
:thought => "Problem solved",
|
||||
:action => "Solution complete",
|
||||
:reward => 10.0,
|
||||
:isterminal => true
|
||||
)
|
||||
progressvalue = 10.0
|
||||
end
|
||||
|
||||
return Dict(
|
||||
:newNodeKey => "step_$current_step",
|
||||
:newstate => newstate,
|
||||
:progressvalue => progressvalue
|
||||
)
|
||||
end
|
||||
|
||||
# Initial state
|
||||
initialstate = Dict(
|
||||
:step => 0,
|
||||
:problem => "Solve x^2 = 16",
|
||||
:reward => 0,
|
||||
:isterminal => false
|
||||
)
|
||||
|
||||
# Transition arguments
|
||||
transitionargs = ()
|
||||
|
||||
# Run MCTS
|
||||
result = runMCTS(
|
||||
initialstate,
|
||||
math_problem_transition,
|
||||
transitionargs;
|
||||
maxiterations = 15,
|
||||
explorationweight = 1.0,
|
||||
maxSimulationDepth = 3,
|
||||
horizontalSampleExpansionPhase = 3
|
||||
)
|
||||
|
||||
# Display results
|
||||
println("Problem: ", initialstate[:problem])
|
||||
println()
|
||||
println("Best solution trajectory:")
|
||||
println(" Step ", result.bestTerminalState[:step])
|
||||
println(" Thought: ", result.bestTerminalState[:thought])
|
||||
println(" Action: ", result.bestTerminalState[:action])
|
||||
println()
|
||||
println("Solution complete! ✓")
|
||||
println("Root node visits: ", result.root.visits)
|
||||
```
|
||||
Reference in New Issue
Block a user