Using OptaPlanner 6.0.1.Final and following the documentation for real-time planning: "Alternatively, you can subscribe to the BestSolutionChangedEvent. A BestSolutionChangedEvent doesn't guarantee that every ProblemFactChange has been processed already, so check Solver.isEveryProblemFactChangeProcessed() and ignore any BestSolutionChangedEvent fired while that method returns false."
However, Solver.isEveryProblemFactChangeProcessed() return true before the last fact change is processed. This is documented in the code DefaultSolver.java: *// TODO bug: the last ProblemFactChange might already been polled, but not processed yet* I believe this can be fixed using the following code in DefaultSolver.checkProblemFactChanges: ProblemFactChange problemFactChange = problemFactChangeQueue*.peek()*; while (problemFactChange != null) { score = doProblemFactChange(problemFactChange); *problemFactChangeQueue.poll();* count++; problemFactChange = problemFactChangeQueue*.peek()*; } This way the queue will not be empty until the fact change is processed. -- View this message in context: http://drools.46999.n3.nabble.com/OptaPlanner-Solver-isEveryProblemFactChangeProcessed-return-true-before-the-last-fact-change-is-procd-tp4029389.html Sent from the Drools: User forum mailing list archive at Nabble.com. _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users