Go-Explore
Go-Explore splits hard search in two: first map new states by returning to frontiers without noise, then train a sturdy policy from the best path.
Why Does This Exist?
Sparse long horizon games beat coupled methods. Montezuma style rooms need dozens of exact moves before any payoff, and standard noise fails twice. Detachment drops a frontier once local novelty fades, because weights hold no map. Derailment shakes the agent off the narrow path back, because noise runs during transit too.
Ecoffet and coauthors split the job in Nature 2021. Phase one maps with an explicit archive, returning to cells cleanly and branching only there. Phase two turns the best open loop into a closed loop policy under noise. Use count-based exploration for mild sparsity and curiosity-driven exploration for dense novelty; use Go-Explore when depth and bottlenecks dominate.
The one idea you need first
A cell is a downsampled state bucket, like an frame plus room and key flags. The archive stores per cell a path , visit count , and score . Search happens over cells, not raw pixels.
Think of It Like This
A surveyor with a teleport beacon
A normal caver restarts at the entrance daily and stumbles along known halls, forgetting last week staircase. The surveyor keeps a logbook of rooms plus the exact route back.
Each morning the surveyor picks a thinly visited high scoring room, teleports to its door with no wandering, takes a few bold steps into the dark, and logs new rooms. Once the treasure is mapped, a runner drills the full route under rain and loose rocks until it holds.
Where it stops: caves have walls. Pixels need bucketing, and teleport needs a simulator reset or exact replay.
How It Actually Works
Cells are sampled by novelty times promise:
In words: rarely picked cells weigh more, high scoring cells weigh more, scales score. Normalize for pick probability .
Then four steps repeat. Select by . Return with zero search noise by state restore or exact replay of , which removes derailment. Branch for noisy steps only from . Map each landing to a cell: add if new, replace if higher score or same score with shorter path. Permanent storage removes detachment.
Phase two robustifies. The backward method starts training near the end of best path and slides the start back to under sticky actions and noise, via cloning or PPO, until a neural runs it reliably.
Worked example
Archive holds , , with . Visits are , , ; scores are , , .
Weights are , , . Total is . Probabilities are percent, percent, percent. The frontier dominates.
Return replays steps to cleanly. Three search steps reach for . New cell enters with score , length , visits , while ticks to .
Code
Same weighting in code:
import math
def cell_weight(visits: int, score: float, s0: float = 100.0) -> float: """W(c) = 1/sqrt(V) * (1 + S/S0).""" return (1.0 / math.sqrt(visits)) * (1.0 + score / s0)
def probs(weights: list[float]) -> list[float]: total = sum(weights) return [round(w / total, 4) for w in weights]
ws = [cell_weight(10, 0.0), cell_weight(2, 50.0), cell_weight(1, 100.0)]print([round(w, 4) for w in ws]) # -> [0.3162, 1.0607, 2.0]print(round(sum(ws), 4)) # -> 3.3769print(probs(ws)) # -> [0.0936, 0.3141, 0.5923]Fractions match , and percent, and the new cell scores .
Watch Out For
Bucketing states too coarse or too fine
Too coarse merges key states, like with key versus without, into one hash, so the archive discards progress and stalls. Too fine treats flicker as new cells, so the archive explodes and weights go flat. The symptom is either zero new useful cells or thousands of junk cells per minute.
Include progress features like room and inventory beside pixels, prefer latent codes that ignore flicker, and watch creation rate versus score gain to tune granularity.
The Quick Version
- Coupled search forgets frontiers and shakes off narrow paths back.
- Archive holds cells with path, visit count and score, sampled by times score bonus.
- With visits 10, 2 and 1 and scores 0, 50 and 100, picks are 9.36, 31.41 and 59.23 percent.
- Clean return plus frontier only branching finds cell 4 at score 120 and length 18.
- Phase two trains backward under noise into a closed loop policy.