Hacker News new | past | comments | ask | show | jobs | submit login

We have been working with Optaplanner for the past 15 months. We switched from Drools to our custom score calculation rules and found it much easier to express business logic that way (on the one hand, we were unfamiliar with Drools and found the documentation unclear; on the other hand, our constraints are very complex).

One of the greatest features of Optaplanner with respect to alternatives, such as OR-tools, MiniZinc and the likes, is that you can express your rules in plain Java, which anybody with an imperative programming background can figure out (this is partially due to the simplicity of the Local Search model that Optaplanner is based on).

Most other tools function differently: most fundamentally, they do not use Local Search but rather Constraint Programming or Mixed Integer Programming. This means they offer you a way to encode your constraints by providing a variety of patterns for the various types of constraints they support. We found that this approach is generally harder (it requires a different mindset at the very least) and requires far more planning in advance when deciding how to represent your variables. We couldn't afford this as our process of requirements discovery went on for well over a year.

All in all, I would recommend Optaplanner. And props to Geoffrey who is helpful and responsive on various platforms!




Thank for the analysis. You really get how OptaPlanner is not your father's solver!

It is a team effort. Credit is due the rest of the team too (Lukas, Radovan, Jiri, Christopher, Julian, Karina, Duncan, Michal, Anna, Emily, Michael, Mario, ... and everyone I am forgetting to mention).


I gave up on Drools because I couldn't figure out how to read the error messages that came from it's half rule-language, half-Java compiler.

There are other rule languages where I find the error messages hard to read (Jena Rules, clara) but in those cases I can read the source of the compiler and/or run it in the debugger to understand what is going wrong and it would take me too long to figure out how to do that with Drools.


Are you using ConstraintStreams instead?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: