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

时间:2017-11-23 15:17:58

标签: gecode

Gecode 中,我使用优点函数在分支时选择变量。

为了计算变量v的优点,我需要访问一些其他变量值,但看起来在调用merit函数时,空间变量还没有被赋予任何价值观:

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

我做错了吗?有没有办法在merit函数中访问变量值?

1 个答案:

答案 0 :(得分:3)

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

此问题有不同的解决方案,具体取决于您希望如何使用值域:

  • 针对单个值测试变量的最佳方法是使用in方法。如果值在变量的域中,则此方法返回true
  • 要相互检查变量,您通常会使用minmax方法来比较其域名。
  • 如果该值仅在分配时相关,那么在使用size方法之前,您将使用val方法检查基数(域的大小)是否为1。 / LI>

这些是最常见的情况,但有无数种方法可以与变量进行交互。请务必查看IntVar documentation,其中描述了IntVar类的这些和所有其他方法。