#dynamic-programming #combinatorial-optimization #python #rc

dypdl-heuristic-search

Heuristic search solvers for Dynamic Programming Description Language (DyPDL)

18 releases

0.9.0 Mar 12, 2025
0.8.0 Jun 7, 2024
0.7.3 Apr 5, 2024
0.7.2 Mar 9, 2024
0.3.3 Mar 21, 2023

#4 in #dynamic-programming

Download history 9/week @ 2024-12-04 12/week @ 2024-12-11 2/week @ 2025-02-12 160/week @ 2025-03-12 10/week @ 2025-03-19

170 downloads per month
Used in 2 crates

MIT/Apache

3.5MB
79K SLoC

dypdl-heuristic-search

Actions Status crates.io minimum rustc 1.65 License License: MIT

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

~4.5–9.5MB
~86K SLoC