DDO is a truly generic framework to develop MDD-based combinatorial
optimization solvers in Rust. Its goal is to let you describe your
optimization problem as a dynamic program (see
Problem) along with a
Relaxation. When the dynamic program of the problem is considered as a
transition system, the relaxation serves the purpose of merging different
nodes of the transition system into an other node standing for them all.
In that setup, the sole condition to ensure the correctness of the
optimization algorithm is that the replacement node must be an over
approximation of all what is feasible from the merged nodes.
As a side benefit from using
ddo, you will be able to exploit all of your
hardware to solve your optimization in parallel.
This module and its submodule provide the definition and implementation of all traits and structures that are required to develop an MDD-based optimization solver.