Constraint Satisfaction Problems [CSP] is an area of Optimization/Artificial-Intelligence (It was taught in the AI classes and mentioned in AI: A Modern Approach) that involves vague constraints, and a success goal state. With those constraints, a solver attempts to find either solutions or attempts to find the optimal solution. Typically this type of development has been left to the Prolog and Erlang languages. However, I recently found an engine for Java: OptaPlanner. 

At the moment I haven’t had time to look into this or investigate in it further, but from the surface: this looks pretty cool and useful. It claims to specialize in CSP type problems.