Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,9 @@ to all forwards per chunk. See [`GPU_RESIDENT_CONV_PRD.md`](prd/GPU_RESIDENT_CON
`1e-3`, `BufferCapacity` `50k`, `BatchSize` `64`, `WarmupSteps` `1000`, `TrainEvery` `1`, `TargetSyncEvery`
`500`, `Epsilon` `LinearSchedule(1→0.05 over 10k)`, `MaxSteps` `100k`, `MaxGradNorm` `10`, `DoubleDqn`
`true`, `Dueling` `false`, `NoisyNets` `false` (implies Dueling), `NStep` `1`, `StartStates`/`StartStateProb`
(reverse-curriculum), `EvalEvery`/`EvalEpisodes`, `SolveThreshold`.
(reverse-curriculum), `EvalEvery`/`EvalEpisodes`, `SolveThreshold`, `DenseTargets`/`DenseTargetWeight`
(γ=0-only dense all-action regression — every legal action regressed toward a caller-supplied target so a
wrong action RANKING costs loss; Crazy Fruits reads targets off its shaped observation plane, PLAN M51).

```csharp
// DqnTrainer.cs — the TD target (n-step aware, masked, terminated-only bootstrap)
Expand Down Expand Up @@ -495,7 +497,7 @@ logic modules mirroring the C# envs by hand.
| [`snake-logic.ts`](../src/RLDemo.Web/ClientApp/src/app/snake/snake-logic.ts), [`mountaincar-logic.ts`](../src/RLDemo.Web/ClientApp/src/app/mountaincar/mountaincar-logic.ts), [`game-2048-logic.ts`](../src/RLDemo.Web/ClientApp/src/app/game-2048/game-2048-logic.ts), [`rush-hour-logic.ts`](../src/RLDemo.Web/ClientApp/src/app/rush-hour/rush-hour-logic.ts) | Browser-side rules for human play, mirroring the C# envs. |
| [`cube/cube.ts`](../src/RLDemo.Web/ClientApp/src/app/cube/cube.ts) | Three.js scene + manual turns + Kociemba/AI solver playback. |
| [`draughts/`](../src/RLDemo.Web/ClientApp/src/app/draughts/) `draughts_solver.ts` (generated, gitignored) · [`draughts-net.ts`](../src/RLDemo.Web/ClientApp/src/app/draughts/draughts-net.ts) · [`draughts-director.ts`](../src/RLDemo.Web/ClientApp/src/app/draughts/draughts-director.ts) · [`draughts.ts`](../src/RLDemo.Web/ClientApp/src/app/draughts/draughts.ts) | Draughts/checkers, fully client-side (the chess M40 pattern, PLAN M47.5): generated engine + **conv tower** + MCTS twin (edit `draughts_solver.pg` and build — the first CONV net in the browser); `.ckpt` parser for kind `selfplay-pv-conv` (byte reference: `DraughtsNetParityTests`); director (play + AI-vs-AI watch, tier manifest `wwwroot/models/draughts-difficulties.json`); board component. |
| [`crazy-fruits/`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/) `crazyfruits_solver.ts` (generated, gitignored) · [`crazyfruits-net.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazyfruits-net.ts) · [`crazy-fruits-game.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits-game.ts) · [`crazy-fruits-director.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits-director.ts) · [`crazy-fruits.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits.ts) | Crazy Fruits match-3, fully client-side (PLAN M49): generated engine incl. the scripted tiers + `PgCfDuelingNet` (edit `crazyfruits_solver.pg` and build); `.ckpt` parser for kind `dueling-q` (byte reference: `CrazyFruitsNetParityTests`); animating host driving the engine's **stepwise move API** (swap → clearStep → collapse → finishMove); watch director (tiers Random/Greedy/Expectimax/net); component with **unified pointer input** (drag-swap + tap-tap — one path for mouse and touch). |
| [`crazy-fruits/`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/) `crazyfruits_solver.ts` (generated, gitignored) · [`crazyfruits-net.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazyfruits-net.ts) · [`crazy-fruits-game.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits-game.ts) · [`crazy-fruits-director.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits-director.ts) · [`crazy-fruits.ts`](../src/RLDemo.Web/ClientApp/src/app/crazy-fruits/crazy-fruits.ts) | Crazy Fruits match-3, fully client-side (PLAN M49): generated engine incl. the scripted tiers + `PgCfDuelingNet` (edit `crazyfruits_solver.pg` and build); `.ckpt` parser for kind `dueling-q` (byte reference: `CrazyFruitsNetParityTests`); animating host driving the engine's **stepwise move API** (swap → clearStep → collapse → finishMove); watch director (tiers Random/Greedy/Specials-greedy/Expectimax/Expectimax-2/net, with a stale-ckpt guard: input width ≠ observation width → expectimax fallback, PLAN M51.1); component with **unified pointer input** (drag-swap + tap-tap — one path for mouse and touch). |
| [`screen-wake-lock.ts`](../src/RLDemo.Web/ClientApp/src/app/screen-wake-lock.ts) | Shared service: holds a screen wake lock during watch-AI; re-acquires on foreground. |

Each component has a `mode` signal: `'human'` (browser timer) vs `'watch'` (server WebSocket stream).
Expand Down
Loading
Loading