在解决方案级别计算转换

Calculating transitions at solution level

在我的调度问题中,我必须在每次移动时计算位于规划实体中的变量的转换次数。

这个变量反映了系统的状态,在考试问题中可以看作是计算房间从使用到未使用的次数。

这种计算在 Drools 中真的很难描述,所以我想找到另一种方法。我尝试在解决方案 class 级别的方法上使用 @ProblemFactCollectionProperty,但它似乎没有足够的调用来准确计算转换。

Is @ProblemFactCollectionProperty on method,与 TopicConflict computation in Examination example 一样,实现这个的好方法或者是还有别的办法吗?

当然,这背后的目标是尽量减少转换次数。

编辑

什么时候调用这样的 @ProblemFactCollectionProperty 方法?在规划解决方案克隆或每次访问 Drools 规则中的事实时?

solvingStarted() 期间调用了 @ProblemFactCollectionProperty 方法,而不是在计划克隆期间或分数计算期间调用。

需要Drools/ConstraintStreams分数计算,但只需要一次(单线程,至少不重复求解),以填充工作事实。

计划克隆不会影响分数计算,因为它从工作解决方案克隆到新的最佳解决方案(因此工作解决方案未被修改,分数主管也不会注意到它)。