Ice Duel safe-start dynamics¶
Ice Duel now separates normal movement slide distances from shove slide distances:
slide_probscontrols normal movement and defaults to(0.90, 0.075, 0.025)over 1, 2, and 3 cells.shove_slide_probscontrols shove displacement and defaults to(0.90, 0.10)over 1 and 2 cells.- Passing
shove_slide_probs=Nonemakes shoves reuseslide_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.