MiniZinc is a free and open-source constraint modeling language.
You can use MiniZinc to model constraint satisfaction and optimization problems in a high-level, solver-independent way, taking advantage of a large library of pre-defined constraints. Your model is then compiled into FlatZinc, a solver input language that is understood by a wide range of solvers.
We have developed an extensive online course! Head over to Coursera's Basic Modeling for Discrete Optimization and Advanced Modeling for Discrete Optimization courses for an in-depth introduction to constraint modeling using MiniZinc.