在解决方案级别计算转换
Calculating transitions at solution level
在我的调度问题中,我必须在每次移动时计算位于规划实体中的变量的转换次数。
这个变量反映了系统的状态,在考试问题中可以看作是计算房间从使用到未使用的次数。
这种计算在 Drools 中真的很难描述,所以我想找到另一种方法。我尝试在解决方案 class 级别的方法上使用 @ProblemFactCollectionProperty
,但它似乎没有足够的调用来准确计算转换。
Is @ProblemFactCollectionProperty
on method,与 TopicConflict computation in Examination example 一样,实现这个的好方法或者是还有别的办法吗?
当然,这背后的目标是尽量减少转换次数。
编辑
什么时候调用这样的 @ProblemFactCollectionProperty
方法?在规划解决方案克隆或每次访问 Drools 规则中的事实时?
在 solvingStarted()
期间调用了 @ProblemFactCollectionProperty
方法,而不是在计划克隆期间或分数计算期间调用。
需要Drools/ConstraintStreams分数计算,但只需要一次(单线程,至少不重复求解),以填充工作事实。
计划克隆不会影响分数计算,因为它从工作解决方案克隆到新的最佳解决方案(因此工作解决方案未被修改,分数主管也不会注意到它)。
在我的调度问题中,我必须在每次移动时计算位于规划实体中的变量的转换次数。
这个变量反映了系统的状态,在考试问题中可以看作是计算房间从使用到未使用的次数。
这种计算在 Drools 中真的很难描述,所以我想找到另一种方法。我尝试在解决方案 class 级别的方法上使用 @ProblemFactCollectionProperty
,但它似乎没有足够的调用来准确计算转换。
Is @ProblemFactCollectionProperty
on method,与 TopicConflict computation in Examination example 一样,实现这个的好方法或者是还有别的办法吗?
当然,这背后的目标是尽量减少转换次数。
编辑
什么时候调用这样的 @ProblemFactCollectionProperty
方法?在规划解决方案克隆或每次访问 Drools 规则中的事实时?
在 solvingStarted()
期间调用了 @ProblemFactCollectionProperty
方法,而不是在计划克隆期间或分数计算期间调用。
需要Drools/ConstraintStreams分数计算,但只需要一次(单线程,至少不重复求解),以填充工作事实。
计划克隆不会影响分数计算,因为它从工作解决方案克隆到新的最佳解决方案(因此工作解决方案未被修改,分数主管也不会注意到它)。