在 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
如果值在变量的域中。
- 要相互检查变量,您通常会使用
min
和 max
方法来比较它们的域。
- 如果该值仅在分配时相关,那么在使用
val
方法之前,您将使用 size
方法检查基数(域的大小)是否为 1 .
这些是最一般的情况,但是与变量交互的方式有无数种。请务必检查 IntVar documentation,其中描述了 IntVar
class 的这些方法和所有其他方法。
在 Gecode 中,我在分支时使用 评价函数 到 select 变量。
为了计算变量 v 的价值,我需要访问 一些其他变量值 ,但看起来在调用价值函数时,space 变量尚未分配任何值:
Exception: IntVar::val: Attempt to access value of unassigned variable.
我是不是做错了什么?有没有办法访问评价函数中的变量值?
问题是,当您仍在搜索时,变量不会只有 1 个值,它的域仍然大于 1。这意味着变量可能仍然可以采用不同的值。在其域中只剩下一个值之前,您不得使用 val
方法。
根据您希望如何使用值域,此问题有不同的解决方案:
- 根据单个值测试变量的最佳方法是使用
in
方法。此方法returnstrue
如果值在变量的域中。 - 要相互检查变量,您通常会使用
min
和max
方法来比较它们的域。 - 如果该值仅在分配时相关,那么在使用
val
方法之前,您将使用size
方法检查基数(域的大小)是否为 1 .
这些是最一般的情况,但是与变量交互的方式有无数种。请务必检查 IntVar documentation,其中描述了 IntVar
class 的这些方法和所有其他方法。