ferroplan 0.9.0

A fast, data-parallel PDDL planner in Rust — FF heuristic with ADL, numeric, derived axioms, PDDL3 preferences, PDDL2.1 temporal, and a goal decomposer
Documentation
fn main() {
    let a: Vec<String> = std::env::args().collect();
    let dom = std::fs::read_to_string(&a[1]).unwrap();
    let prob = std::fs::read_to_string(&a[2]).unwrap();
    eprintln!("parsing domain...");
    let d = ferroplan::parser::parse_domain(&dom).unwrap();
    eprintln!(
        "domain ok: {} actions, types={:?}",
        d.actions.len(),
        d.types
    );
    eprintln!("parsing problem...");
    let p = ferroplan::parser::parse_problem(&prob).unwrap();
    eprintln!(
        "problem ok: {} objects, {} init atoms",
        p.objects.len(),
        p.init_atoms.len()
    );
    let objs = ferroplan::ground::objects_by_type(&d, &p);
    let mut sizes: Vec<(String, usize)> = objs.iter().map(|(t, o)| (t.clone(), o.len())).collect();
    sizes.sort();
    eprintln!("objects_by_type: {:?}", sizes);
    for act in &d.actions {
        eprintln!("  action {} params={:?}", act.name, act.params);
    }
    let (d, p) = ferroplan::derived::compile(&d, &p).unwrap();
    eprintln!("derived ok");
    let t = std::time::Instant::now();
    let task = ferroplan::ground::ground_task(&d, &p, 4).unwrap();
    eprintln!(
        "ground: {:?} -> {} ops, {} facts",
        t.elapsed(),
        task.n_ops,
        task.n_facts
    );
}