A Toolkit for Constraint Programming in Julia!
The Julia Constraints organization serves as a hub for resources to create, understand, and solve optimization through the lens of Constraint Programming. Our goal is to make Constraint Programming accessible and efficient for users at all levels of expertise, by providing a comprehensive suite of tools.
Most tools integrate seamlessly with JuMP, a popular Julia package for mathematical optimization.
The foundation of common packages that provide essential features for constraint programming ensures that users possess the fundamental tools required for their projects.
- ConstraintCommons.jl is designed to make constraint programming solutions in Julia interoperable. It provides shared structures, abstract types, functions, and generic methods used by both basic feature packages and learning-oriented packages.
- ConstraintDomains.jl focuses on the definition and manipulation of variable domains, which are used to solve constraint programming problems. This package provides the infrastructure needed to specify both discrete and continuous domains, allowing a wide range of constraint programming applications.
- Constraints.jl is a key component, specifically designed to facilitate the definition, manipulation, and application of constraints in constraint programming. This package is central to handling both standard and complex constraints, making it an indispensable tool for developers and researchers working in CP.
- ConstraintModels.jl is a package for Julia Constraints' solvers that stores Constraint Programming models.
A collection that bridges the gap between the ease of modeling and computational efficacy. These tools learn from constraints or convert natural language problems into constraint programming solutions, requiring minimal input from the user beyond the model itself.
- CompositionalNetworks.jl provides interpretable compositional networks (ICN), a combinatorial variant of neural networks that allows the user to obtain interpretable results, unlike regular artificial neural networks.
- QUBOConstraints.jl is a package that can (automatically) learn QUBO matrices from optimization constraints.
- ConstraintsTranslator.jl (tentative name, WIP) is a tool for converting problems expressed in natural language into optimization models.
- ConstraintLearning.jl is a common interface that integrates the various components outlined above.
We offer a variety of solvers, from native Julia solvers to interfaces with JuMP for external CP solvers, to cater to various problem-solving needs.
- LocalSearchSolvers.jl is a Julia native framework to (semi-)automatically build Constraint-based Local Search solvers. It serves as a basic for the experimental design or core and learning oriented packages in Julia Constraints.
- CBLS.jl a MOI/JuMP interface for the above framework!
- CPLEXCP.jl a Julia interface for CPLEX CP Optimizer.
- Chuffed.jl a wrapper for the constraint-programming solver Chuffed to Julia.
- JaCoP.jl a Julia interface for the JaCoP constraint-programming solver.
Constraint Programming is slowly making steps into the main JuMP components. However, some extra resources are available as
- ConstraintProgrammingExtensions.jl provides extensions to MathOptInterface to support constraint programming.
- JuCP.jl similarly provides extensions to JuMP.
MetaStrategist.jl is a meta-solving package in its formative stages, which aims to harness the strengths of CP and JuMP. Its goal is to formulate tailored strategies that take into consideration the unique hardware and software resources at hand, offering a new horizon in problem-solving efficiency and adaptability. Stay tuned!
We've made a tool for cross-version performance checking that ensures the high efficiency and reliability of our solutions. By facilitating clear and simple performance evaluations, PerfChecker.jl enhances both development and maintenance, contributing to the overall health and progress of Julia (Constraints)'s growing library of resources.
The Julia Constraints community would not be where it is today without the collective efforts of many talented individuals and organizations. We extend our heartfelt thanks to:
- IIJ Research Lab: The driving force behind more than half of this project!
- JuMP-dev Community: For their extensive contributions to the development of our packages.
- Individual Contributors: Numerous developers and researchers who have dedicated their time and skills to enhance our tools.