MiniZinc is a constraint programming system. There is a good Coursera class using MiniZinc.
https://www.coursera.org/learn/basic-modeling
https://www.coursera.org/learn/advanced-modeling
https://www.coursera.org/learn/solving-algorithms-discrete-o...
They are indeed excellent and highly enjoyable.