| # RL and Fast Policy |
|
|
| ## Purpose |
|
|
| The fast mind must be good enough before RL. |
|
|
| The playable MVP should use a deterministic or heuristic fast mind first. A learned policy can later imitate or improve it. |
|
|
| Do not make the project depend on RL succeeding. |
|
|
| ## Fast mind responsibilities |
|
|
| Fast mind owns: |
|
|
| - primitive action choice, |
| - movement, |
| - consume/inspect/rest execution, |
| - immediate resource pressure, |
| - immediate fear/danger reaction, |
| - local target scoring, |
| - action legality handoff. |
|
|
| Fast mind does not own: |
|
|
| - narrative thoughts, |
| - long-term interpretation, |
| - beliefs as text, |
| - object compilation, |
| - user speech interpretation beyond structured social channels. |
|
|
| ## Primitive action space |
|
|
| Start with: |
|
|
| ```text |
| move_north |
| move_south |
| move_east |
| move_west |
| wait |
| inspect |
| consume |
| rest |
| vocalize |
| ``` |
|
|
| Movement is one cell per action unless changed later. |
|
|
| ## Higher-level directive resolution |
|
|
| Slow cognition may output high-level directives such as: |
|
|
| ```json |
| { |
| "mode": "seek", |
| "target": { |
| "type": "object", |
| "id": "obj_17" |
| }, |
| "strength": 0.35, |
| "urgency": 0.25, |
| "duration_ticks": 20 |
| } |
| ``` |
|
|
| The fast mind cannot execute “seek” directly. |
|
|
| Use a **directive resolver** to convert high-level directives into fast-policy inputs. |
|
|
| The resolver should produce: |
|
|
| - target vector, |
| - path-distance gradient, |
| - target-reachable flag, |
| - urgency scalar, |
| - directive strength, |
| - action priors, |
| - trait-seek/avoid/inspect modifiers. |
|
|
| Example: |
|
|
| ```json |
| { |
| "directive_features": { |
| "mode_seek": 1, |
| "mode_avoid": 0, |
| "target_dx": 2, |
| "target_dy": -1, |
| "path_distance": 5, |
| "target_reachable": true, |
| "strength": 0.35, |
| "urgency": 0.25, |
| "time_remaining": 18 |
| }, |
| "action_priors": { |
| "move_east": 0.2, |
| "move_north": 0.1 |
| } |
| } |
| ``` |
|
|
| The fast policy then chooses primitive actions. |
|
|
| A safety/resource arbiter validates the chosen action before applying it. |
|
|
| ## Safety/resource arbiter |
|
|
| The arbiter can override or reject actions when: |
|
|
| - the move is illegal, |
| - the target is unreachable, |
| - fear is extreme, |
| - health is at risk, |
| - the action repeats too long, |
| - the action conflicts with critical resource survival, |
| - the user directive would lead into severe danger. |
|
|
| This creates conditional obedience: |
|
|
| ```text |
| slow cognition proposes; |
| fast policy chooses; |
| arbiter validates; |
| world resolves. |
| ``` |
|
|
| ## Heuristic fast policy |
|
|
| The heuristic policy should be clear and inspectable. |
|
|
| It should score possible actions from: |
|
|
| - resource pressure, |
| - local object appraisals, |
| - memory valence, |
| - user/social signals, |
| - slow priority modifiers, |
| - directive features, |
| - terrain/path legality. |
|
|
| Minimum behaviors: |
|
|
| - seek food when hungry, |
| - seek water if thirst is enabled, |
| - rest when tired, |
| - inspect unfamiliar safe-ish objects, |
| - avoid high threat, |
| - move toward user call only when trust/safety allow, |
| - abandon unreachable or repeatedly failed targets. |
|
|
| ## Learned policy interface |
|
|
| A learned policy should use the same interface as the heuristic policy. |
|
|
| Observation should include: |
|
|
| - local grid channels, |
| - resources, |
| - user/social channels, |
| - memory/appraisal channels, |
| - directive features, |
| - priority modifiers, |
| - recent action loop/stuck indicators. |
|
|
| Output should be a primitive action. |
|
|
| The learned policy must not receive raw text. |
|
|
| ## Should imitated users appear in training? |
|
|
| Yes. |
|
|
| If the user exists in the real simulation, the policy must experience user-like entities during training/evaluation. |
|
|
| Training should include simulated users that: |
|
|
| - stand still, |
| - move randomly, |
| - call the creature, |
| - stand near food, |
| - stand near danger, |
| - helpfully call from safe locations, |
| - misleadingly call from unsafe locations, |
| - place objects if supported by training environment. |
|
|
| This prevents distribution shift. The policy should not encounter social channels for the first time only in the real app. |
|
|
| ## Training strategy |
|
|
| Preferred order: |
|
|
| 1. Build heuristic policy. |
| 2. Record heuristic traces. |
| 3. Train small imitation policy. |
| 4. Evaluate on randomized scenarios. |
| 5. Optionally add RL fine-tuning. |
| 6. Ship heuristic or hybrid if learned policy is weak. |
|
|
| ## Training environments |
|
|
| Training environments should be rich enough to exercise the interface. |
|
|
| Include scenarios: |
|
|
| - food seeking, |
| - food vs heat conflict, |
| - shelter/rest, |
| - unknown object inspection, |
| - user safe call, |
| - user unsafe call, |
| - ambiguous food with delayed harm, |
| - repeated unreachable target, |
| - memory-influenced avoidance. |
|
|
| Do not train only on final demo scenes. |
|
|
| ## Reward design |
|
|
| Do not reward “interestingness” directly. |
|
|
| Reward event patterns that produce watchable, coherent behavior: |
|
|
| - staying alive, |
| - reducing hunger/thirst when high, |
| - resting when depleted, |
| - inspecting unknown objects once, |
| - consuming useful objects, |
| - avoiding known harm, |
| - responding to safe user calls, |
| - ignoring unsafe user calls, |
| - following safe slow directives, |
| - ignoring unsafe slow directives, |
| - avoiding repeated loops. |
|
|
| Use diminishing returns for repeated actions. |
|
|
| Penalize: |
|
|
| - wall bump loops, |
| - oscillation, |
| - repeated failed target pursuit, |
| - consuming known harmful objects, |
| - ignoring critical resources, |
| - following directive into severe danger, |
| - doing nothing without rest/fear reason. |
|
|
| ## Evaluation |
|
|
| Evaluate behavior on seeded maps. |
|
|
| Metrics should include: |
|
|
| - survival duration, |
| - hunger/thirst satisfaction, |
| - useful consumption count, |
| - inspection/discovery count, |
| - avoidance/fear conflict count, |
| - safe user-call response rate, |
| - unsafe user-call refusal rate, |
| - stuck-loop count, |
| - repeated action count, |
| - directive-following when safe, |
| - directive-overriding when unsafe. |
|
|
| The UI should expose policy mode: |
|
|
| ```text |
| heuristic |
| learned |
| hybrid |
| ``` |
|
|
| If learned policy is weak, keep heuristic default. |
|
|