Skip to content

Ice Duel safe-start dynamics

Ice Duel now separates normal movement slide distances from shove slide distances:

  • slide_probs controls normal movement and defaults to (0.90, 0.075, 0.025) over 1, 2, and 3 cells.
  • shove_slide_probs controls shove displacement and defaults to (0.90, 0.10) over 1 and 2 cells.
  • Passing shove_slide_probs=None makes shoves reuse slide_probs, which preserves the old single-distribution behaviour for custom experiments.

Random resets also default to safe_player_0_start=True. With this flag, player_0 is sampled from the interior cells with maximum distance from the lethal edge. On the default 7x7 rink this means player_0 starts at (3, 3), while player_1 is sampled from the remaining interior cells.

The reason is shield feasibility rather than gameplay preference. If shoves can move 2 cells, a player_0 start at edge distance 2 can still be killed immediately by an outward shove. The default 7x7 centre start and 2-cell shove support were checked with the exact Ice Duel transition dynamics: all 24 possible default starts with player_0=(3, 3) are in the robust almost-sure-safe set for player_0 under arbitrary player_1 actions. This gives the shield a zero-risk fallback action at reset, so budgets such as max_risk=0.2 or 0.3 are feasible from the default start distribution.

The exact legal and true-shield graph builders read env.shove_slide_probs when present, so regenerated graph artifacts match the runtime environment. Existing exported wm/env_transition_graph.pkl, true-shield graphs, and transition-shield bundles should be rebuilt after changing these dynamics.