Skip to content

Commit

Permalink
First optimizations (#1)
Browse files Browse the repository at this point in the history
* Compiler pass-based restructure

* Added mutable compiler context enum

* After adding basic inertia - decided to make it more abstract

* Added basic inertia optimization

* Updated Readme and comment cleanup

* Version increment

* Running rustfmt
  • Loading branch information
Hexorg committed Nov 8, 2023
1 parent 708b29a commit c3800b6
Show file tree
Hide file tree
Showing 14 changed files with 2,578 additions and 1,048 deletions.
7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "pddl_rs"
version = "0.2.1"
version = "0.3.0"
edition = "2021"
description = "PDDL parser"
license = "MIT"
Expand All @@ -9,7 +9,12 @@ repository = "https://github.com/Hexorg/pddl_rs/"
[lib]
name = "pddl_rs"

[profile.release]
debug = true

[dependencies]
enumset = "1.0.12"
ariadne = "0.3.0"
nom = "7.1.3"
lazy_static = "1.4.0"
rand = "0.8.5"
35 changes: 13 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,20 @@ From PDDL4J's Readme:

```rust
use std::fs;
use pddl_rs::{compiler::{CompiledProblem, compile_problem}, search::a_star, parser::{parse_domain, parse_problem}};
let domain_filename = "sample_problems/simple_domain.pddl";
let problem_filename = "sample_problems/simple_problem.pddl"
let domain_src = fs::read_to_string(domain_filename).unwrap();
let domain = match parse_domain(&domain_src) {
Err(e) => {e.report(domain_filename).eprint((domain_filename, ariadne::Source::from(&domain_src))); panic!() },
Ok(d) => d,
};
let problem_src = fs::read_to_string(problem_filename).unwrap();
let problem = match parse_problem(&problem_src, domain.requirements) {
Err(e) => {e.report(problem_filename).eprint((problem_filename, ariadne::Source::from(&problem_src))); panic!() },
Ok(p) => p
};
let c_problem = match compile_problem(&domain, &problem) {
Err(e) => {e.report(problem_filename).eprint((problem_filename, ariadne::Source::from(&problem_src))); panic!() },
Ok(cd) => cd,
};
use std::path::PathBuf;
use pddl_rs::{Sources, Objects, search::{a_star, AstarInternals}};
let domain_filename = PathBuf::from("sample_problems/simple_domain.pddl");
let problem_filename = PathBuf::from("sample_problems/simple_problem.pddl");
let sources = Sources::load(domain_filename, problem_filename);
let (domain, problem, c_problem) = sources.compile();
println!("Compiled problem needs {} bits of memory and uses {} actions.", c_problem.memory_size, c_problem.actions.len());
let solution = a_star(&c_problem);
println!("Solution is {} actions long.", solution.len());
for action_id in &solution {
let action = c_problem.actions.get(*action_id).unwrap();
println!("\t{}{:?}", action.name.1, action.args.iter().map(|(_, s)| *s).collect::<Vec<&str>>());
let mut args = AstarInternals::new();
if let Some(solution) = a_star(&c_problem, &mut args) {
println!("Solution is {} actions long.", solution.len());
for action_id in &solution {
let action = c_problem.actions.get(*action_id as usize).unwrap();
println!("\t{}{:?}", domain.actions[action.domain_action_idx as usize].name(), action.args.iter().map(|(row, col)| problem.objects.get_object(*row,*col).item.1).collect::<Vec<&str>>());
}
}
```

Expand Down

0 comments on commit c3800b6

Please sign in to comment.