MaxiCP-rs
This project aims at implementing a fast, and clean constraint programming solver with a focus on correctness, simplicity, maintainability and performance. It is largely inspired by both minicp (https://www.minicp.org) and maxicp (https://pschaus.github.io/maxicp/).
NOTE: This is pretty much a pet project and a work in progress. We'll see where this leads.
Roadmap to minimum viable product
- State
- Implement a trailing mechanism
- Implement reversible sparse set
- Implement reversible interval
- Engine
- Implement bool var
- Implement int variables
- Define constraint and propagator traits
- Implement the solver with propagation fixpoint
- Test the solver propagation
- Implement views
- Implement the basic constraints
- Abs value :: x == |y|
- not equal const :: x != v
- not equal :: x != y
- is not equal :: b <==> (x != v)
- is not equal (var) :: b <==> (x != y)
- equal :: x == y
- is equal :: b <==> x == v
- is equal (var) :: b <==> x == y
- LE :: x <= v
- LE :: x <= y
- GE :: x >= v
- GE :: x >= y
- is LE :: b <==> x <= v
- is LE (var) :: b <==> x <= y
- is GE :: b <==> (x >= v)
- is GE (var) :: b <==> (x >= y)
- is or (var) :: b <==> (x || y)
- must be true x
- maximum
- sum
- All diff binary
- All diff dc
- All diff fwc
- All diff binary
- circuit
- cumulative
- cumulative decomp
- disjunctive
- element_1d
- element_1d DC
- element_2d
- Search
- Implement search strategies
- Bindings
- For Python3 (with pyo3)
- For C++ (with cxx)
- For Java (maybe consider)
Maybe later
- State
- Implement reversible lazy sparse set
- Implement fast and efficient bitsets
- Implement reversible bitset
- Implement reversible tri partition
- Implement reversible stack (push only)
- Engine
- Implement sequence variables
- Implement more constraints (tables)