Skip to content

Translate the whole tyr benchmark dataset: 6 failure classes #50

Description

@MBus123

Swept the tyr dataset (planning-and-learning/planning-benchmarks-numeric, the suite tyr itself uses) with the translator, smallest instance per domain, 30 s budget each.

261 of 329 domains translated so far (sweep still running over ~470). One class already fixed in 11e5c26. The rest group into five.

What the dataset needs, and what we accept

The dataset ships repaired requirement declarations (strict_clean) plus committed requirements.*.json. Across all 468 domains exactly 11 requirements appear:

:strips :typing :negative-preconditions :action-costs :numeric-fluents
:equality :disjunctive-preconditions :existential-preconditions
:universal-preconditions :conditional-effects :derived-predicates

All 11 are in SUPPORTED_REQUIREMENTS. Nothing in the dataset is out of scope by declaration; :adl never appears because strict_clean expands it into its constituents.

1. Parameterised static cost functions — 19 domains

The largest class, and it is mainstream rather than exotic: elevators (4), agricola (2), data-network (2), cavediving, and more.

panicked at translate.rs:740:
cost expression PNE travel-slow(?f1, ?f2) of action (move-up-slow slow0-0 n2 n3)
has no numeric variable

The action is ground but its cost expression still carries ?f1, ?f2. The idiom is the standard one for IPC action costs:

(:functions (total-cost) - number (travel-slow ?f1 - count ?f2 - count) - number)
(:action move-up-slow :parameters (?lift ?f1 ?f2)
  :effect (and ... (increase (total-cost) (travel-slow ?f1 ?f2))))

travel-slow is static: assigned in :init, never modified. Action::instantiate does pass var_mapping to the cost, and instantiate_expression substitutes and folds a static PNE with a known init value into a constant. So the substitution is written but something on this path is not applying it. Worth checking whether the cost reaching sas_operator_cost is the lifted one.

2. Condition atom with no SAS variable — 11 domains

caldera (4), caldera-split, folding (2), others.

panicked at translate.rs:354:
condition atom Atom { predicate: "prop_host", args: ["id_birat", "id_zhost"] }
has no SAS variable; it is neither reachable nor statically decided

The assertion is right to fire; the question is why an atom survives Condition::instantiate_action without being resolved either way.

3. settlers — 2 domains

panicked at translate.rs:283. Not examined.

4. either types — 1 domain

storage: Expected atom, got list: List([Atom("either"), Atom("storearea"), Atom("crate")]). PDDL's disjunctive type (either t1 t2) in a typed list is unsupported by the type parser. Fast Downward supports it.

5. pipesworld-tankage, schedule — 2 domains

panicked at parsing_functions.rs:703. Not examined.

6. Grounding blow-up — 31 timeouts

All 16 mine-pddl (Minecraft) domains plus large classical instances. Not a support gap: mine-pddl/Bridge_Easy reaches 30.7 M relevant atoms, 70.7 M auxiliary, 101 M queue entries and is still going after two minutes. The repository already excludes two Minecraft fixtures as too slow for test builds. Worth a separate issue about grounding scale rather than lumping with the correctness bugs above.

Fixed already

normalize.rs:964 (2 Minecraft domains) was a regression from the silent-skip sweep: the new assertion rejected a conjunction nested in a conjunction, which is harmless. Fixed in 11e5c26.

Suggested test

A test that translates one instance per domain from this dataset, skipped when the checkout is absent. Every bug in this list was invisible to the repository's own fixtures.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions