在 Gecode 中,从评价函数访问 home/space 变量值

In Gecode, accessing home/space variables values from merit function

Gecode 中,我在分支时使用 评价函数 到 select 变量。

为了计算变量 v 的价值,我需要访问 一些其他变量值 ,但看起来在调用价值函数时,space 变量尚未分配任何值:

Exception: IntVar::val: Attempt to access value of unassigned variable.

我是不是做错了什么?有没有办法访问评价函数中的变量值?

问题是,当您仍在搜索时,变量不会只有 1 个值,它的域仍然大于 1。这意味着变量可能仍然可以采用不同的值。在其域中只剩下一个值之前,您不得使用 val 方法。

根据您希望如何使用值域,此问题有不同的解决方案:

  • 根据单个值测试变量的最佳方法是使用 in 方法。此方法returns true 如果值在变量的域中。
  • 要相互检查变量,您通常会使用 minmax 方法来比较它们的域。
  • 如果该值仅在分配时相关,那么在使用 val 方法之前,您将使用 size 方法检查基数(域的大小)是否为 1 .

这些是最一般的情况,但是与变量交互的方式有无数种。请务必检查 IntVar documentation,其中描述了 IntVar class 的这些方法和所有其他方法。