#combinatorial-optimization #heuristic #dynamic-programming #python3 #heuristics

dypdl-heuristic-search

Heuristic search solvers for Dynamic Programming Description Language (DyPDL)

10 releases (4 breaking)

0.5.0 Aug 11, 2023
0.4.1 Jul 31, 2023
0.4.0 May 25, 2023
0.3.4 May 13, 2023
0.1.0 Feb 20, 2023

#4 in #combinatorial-optimization

Download history 10/week @ 2023-06-03 12/week @ 2023-06-10 28/week @ 2023-06-17 18/week @ 2023-06-24 35/week @ 2023-07-01 7/week @ 2023-07-08 10/week @ 2023-07-15 14/week @ 2023-07-22 42/week @ 2023-07-29 46/week @ 2023-08-05 35/week @ 2023-08-12 9/week @ 2023-08-19 14/week @ 2023-08-26 26/week @ 2023-09-02 11/week @ 2023-09-09 9/week @ 2023-09-16

60 downloads per month
Used in 2 crates

MIT/Apache

3MB
62K SLoC

crates.io minimum rustc 1.64 License License: MIT

dypdl-heuristic-search

dypdl-heuristic-search is a library of heuristic search solvers for DyPDL.

API Documentation

Example

use dypdl::prelude::*;
use dypdl_heuristic_search::{CabsParameters, create_dual_bound_cabs, FEvaluatorType};
use std::rc::Rc;

let mut model = Model::default();
let variable = model.add_integer_variable("variable", 0).unwrap();
model.add_base_case(
    vec![Condition::comparison_i(ComparisonOperator::Ge, variable, 1)]
).unwrap();
let mut increment = Transition::new("increment");
increment.set_cost(IntegerExpression::Cost + 1);
increment.add_effect(variable, variable + 1).unwrap();
model.add_forward_transition(increment.clone()).unwrap();
model.add_dual_bound(IntegerExpression::from(0)).unwrap();

let model = Rc::new(model);
let parameters = CabsParameters::default();
let f_evaluator_type = FEvaluatorType::Plus;

let mut solver = create_dual_bound_cabs(model, parameters, f_evaluator_type);
let solution = solver.search().unwrap();
assert_eq!(solution.cost, Some(1));
assert_eq!(solution.transitions, vec![increment]);
assert!(!solution.is_infeasible);

Dependencies

~1.5MB
~25K SLoC