0

我有一个关于 Choco 4 CP 求解器的技术问题。

每当我的模型中的某些布尔变量在搜索期间被分配或未分配时,我想调用一个方法(让我们称之为 f())。f() 的目的是更新传播者广泛使用的数据结构。

我的第一次尝试是实现一个自定义的 IVariableMonitor,但方法 onUpdate(Variable v, IEventType iEventType) 仅在变量被分配给 0/1 而不是未分配时才被调用。

我也尝试使用搜索监视器,但目前没有成功。

有没有办法执行这个任务?

谢谢!

4

1 回答 1

1

我已经想出了如何解决这个问题。

我真正需要的是一个支持自动撤销操作的数据结构。也就是说,在分配变量时进行修改,如果触发修改的相应变量未分配,则自动恢复。

幸运的是,choco 提供了这种可回溯的数据结构(参见 org.chocosolver.util.objects)。据我了解,可回溯数据结构的状态与决策级别相关联。当求解器回溯任何高于当前决策级别的修改时,都会恢复。

于 2020-08-03T16:17:42.507 回答