The key change is tweaks to the branchers to avoid some pathological cases with complex problems.
Choosing the package_versions variable to be INT_VAR_SIZE_MIN causes us to spend a large amount of time permuting variables that don't generate many propagations. Switching that to INT_VAR_DEGREE_MAX causes the solver to focus on the most 'influential' package versions first.
Also included are some refactors; a cleanup to avoid segfaulting with the new timer code.
Finally there's preliminary support for the GIST solve visualization tool; that was very helpful to tune the branchers.
Rearrange constrain code
Refactor to return error code w/o segfault
Refactor for gist
Refactor brancher, and add improved brancher
Some paths are very much slower than others; choosing the right
branching strategy can generate a 100000x speedup.
Support Gecode 4.x
Update tests to use new Solve() method
cc @danielsdeleo @lamont-granquist
I'm not very familiar with the stuff that interfaces directly with gecode, but it looks sane. I'm a bit wary of potentially changing the solutions we spit out for complicated graphs, but lots of people are suffering from the performance of some of the pathological cases so I think that tips the balance in favor. 👍