Skip to content

CookingZoo

CookingZoo is an Overcooked-style kitchen benchmark. Agents collect ingredients, use stations, and deliver recipes. The safety story is kitchen etiquette: agents should avoid bad deliveries, teammate-only ingredients, and blocking important station access.

Global Safety Formula

The default experiment formula is:

kitchen_etiquette =
G(!({agent}_bad_delivery_attempt |
    {agent}_holding_teammate_only_ingredient |
    {agent}_blocking_delivery_access |
    {agent}_blocking_cutboard_access))

In the two-player experiment, this specializes to:

(G(!(player_0_bad_delivery_attempt |
     player_0_holding_teammate_only_ingredient |
     player_0_blocking_delivery_access |
     player_0_blocking_cutboard_access))) &
(G(!(player_1_bad_delivery_attempt |
     player_1_holding_teammate_only_ingredient |
     player_1_blocking_delivery_access |
     player_1_blocking_cutboard_access)))

Local Alphabets

For the default two-player coop_contract experiment, the exhaustive contract-local alphabets are:

player_0:
  player_0_recipe_role_ok
  player_0_delivery_station_ok
  player_0_cutboard_station_ok
  player_0_station_clearance_ok
  player_0_bad_delivery_attempt
  player_0_holding_teammate_only_ingredient
  player_0_blocking_delivery_access
  player_0_blocking_cutboard_access

player_1:
  player_1_recipe_role_ok
  player_1_delivery_station_ok
  player_1_cutboard_station_ok
  player_1_station_clearance_ok
  player_1_bad_delivery_attempt
  player_1_holding_teammate_only_ingredient
  player_1_blocking_delivery_access
  player_1_blocking_cutboard_access

The diagnostic alphabet can also expose held-object, ready-to-deliver, ready-to-chop, and recipe-completion facts.

Emitted Labels

The safety model emits labels for:

  • player positions and station access or facing state,
  • held object kinds and dish completion status,
  • own-required and teammate-requested ingredient facts,
  • bad delivery attempts,
  • delivery and cutboard blocking,
  • recipe-role, station-clearance, delivery-station, and cutboard-station protocol facts,
  • recipe completion and all-recipes-completed status.

Contract Intuition

Kitchen coordination often requires one player to trust that another will keep a station clear, follow recipe ownership, or avoid invalid deliveries. Certified profiles can expose those obligations without weakening the global etiquette monitor. The expected advantage over local/factorised Shielded-* baselines is not looser safety; it is that the contract mask can rely on certified station or recipe-role obligations instead of treating the other player as arbitrary.

Current Contract Profiles

With the current core alphabet and experiment synthesis parameters, the no-seed normal search-built feasibility audit certifies 2 nontrivial CookingZoo profiles, including 1 additional-obligation profile. The canonical useful profile is profile_0004: both players satisfy the global etiquette exclusions, and player_0 additionally guarantees delivery-station access safety.

player_0:
G(!player_0_bad_delivery_attempt) &
G(!player_0_holding_teammate_only_ingredient) &
G(!player_0_blocking_delivery_access) &
G(!player_0_blocking_cutboard_access) &
G(player_0_delivery_station_ok)

player_1:
G(!player_1_bad_delivery_attempt) &
G(!player_1_holding_teammate_only_ingredient) &
G(!player_1_blocking_delivery_access) &
G(!player_1_blocking_cutboard_access)

This certifies the same kitchen-etiquette global formula while adding one station protocol obligation. It does not currently certify a broad profile that adds every station-clearance and recipe-role obligation to both players. The local exports do not yet contain clean paired Shielded/Contract reward runs for this environment, so reward dominance still needs fresh paired training runs.

Reward-optimality status: medium pending rerun. The contract mechanism is plausible because delivery-station obligations reduce the worst-case teammate assumptions that make ordinary station access conservative. The broad etiquette formula may still be anti-reward if it forbids useful staging, so paired runs and narrower ablations are important.

Reward Function

The default experiment uses this reward scheme:

recipe_reward = 20
recipe_penalty = -40
max_time_penalty = -5
recipe_node_reward = 0
max_steps = 300

CookingZoo computes rewards once all active agents have supplied an action for the joint kitchen step. For recipe/player index i, the reward is:

r_i =
  (sum(goals_before_i) - sum(goals_after_i)) * recipe_node_reward
  + completed_now_i * recipe_reward
  + regressed_now_i * recipe_penalty
  + max_time_penalty / max_steps

In the default two-player coop_contract experiment, recipe_node_reward=0, so intermediate recipe-graph progress is not directly rewarded. Each player pays a per-step time cost of -5 / 300, receives +20 when its recipe first becomes complete, and receives -40 if a previously complete recipe becomes incomplete. The experiment uses end_condition_all_dishes=true, so the episode continues until all configured recipes are complete or the time limit is hit.

Spaces

For the default lean coop_contract experiment (meta_file="contract_core", num_agents=2, action_scheme="scheme1", feature-vector observations):

Space Size
Per-player observation Box(shape=(129,), dtype=float32), flat dim 129
Joint observation concatenated flat dim 258
Per-player action Discrete(8)
Joint action 8^2 = 64 discrete joint actions
Global state Box(shape=(129,), dtype=float32), flat dim 129