3 ms·
As others have said, using a combinatorial solver like Z3 (SMT solver) or MiniZinc (which is a modelling language and can interface to different types of solver
by mzl 4y ago
As others have said, using a combinatorial solver like Z3 (SMT solver) or MiniZinc (which is a modelling language and can interface to different types of solvers, including several constraint programming and mixed integer programming solvers, can be driven via minizicn-python) is probably the way to go. CPMpy is a new Python modelling framework that might also be of interest that interfaces to different solvers
If you have a lot of constraints that are on the bit representation, then it is more likely that an SMT solver is a better solution. If on the other hand more of your constraints are arithmetic and perhaps some structural constraints, then it might be interesting to look into other types of solvers. It all depends on the specifics of your problem instances.
There are a couple of Coursera courses for modelling with MiniZinc that are quite nice (https://www.coursera.org/learn/basic-modeling https://www.coursera.org/learn/basic-modeling is the first one) that are useful if you want to learn more about how to think when doing combinatorial modelling. These are usefule even if you end up using some other tool or technology, as the mindset is similar.