In many fields of optimization, there is often a tradeoff between efficiency and the simplicity of the model. ConstraintLearning.jl is an interface to several tools designed to smooth that tradeoff.
Applications are not limited to Constraint Programming, but are focused on it.
In Constraint Programming, a problem can be modeled as simply as
Often, efficient solvers expect more complex models to provide additional efficiency. For instance, Constraint-Based Local Search (CBLS) solvers have significant speedups when the constraint is encoded as a more refined function than a predicate. We designed CompositionalNetworks.jl to learn those functions from simple predicates, effectively removing the modeling complexity.
Similarly, we designed QUBOConstraints.jl such that QUBO matrices are learned from simple predicates. Among other things, QUBO encoding can be used on QUBO based solvers and quantum annealing machines.
Finally, ConstraintLearning.jl provides a common interface for both learning techniques. It also effectively allows both packages to only contains minimal data structures and generic solving interfaces to be including in appropriate solvers.