在Gecode中,从评价函数访问家庭/空间变量值

Sil*_*pur 2 gecode

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

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

Exception: IntVar::val: Attempt to access value of unassigned variable.
Run Code Online (Sandbox Code Playgroud)

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

Dek*_*er1 5

问题是,当您仍在搜索变量时,它不仅有 1 个值,而且其定义域仍然大于 1。这意味着变量可能仍然可以采用不同的值。除非其域中只剩下一个值,否则不允许使用该val方法。

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

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

这些是最常见的情况,但与变量交互的方式有无数种。请务必检查IntVar 文档IntVar,其中描述了该类的这些方法和所有其他方法。