0

Gecode通过它的C++API 在一种带有正面和负面例子的学习环境中使用。在这种情况下,我有两个BoolVarArray:positive_bags_negative_bags_.

而且我想做的事情似乎很简单:我想根据用户参数以最小的增长率约束来约束这些袋子gmin

因此,约束应如下所示:sum(positive_bags_) >= gmin * sum(negative_bags_). 它使用这样rel定义的函数工作:rel(*this, sum(positive_bags_) >= gmin * sum(negative_bags_))但我的问题是,在我的情况下gmin是一个浮点数,但被转换rel为整数。

因此,我只能将其限制positive_bags_2, 3, ... 倍,negative_bags_但我需要将我的实验定义gmin1.5例如。

我检查了文档,没有找到linear同时使用Boolean/IntegerFloat变量的定义。

有没有办法使用 float 来定义这个约束gmin

提前致谢!

4

2 回答 2

2

如果您的因素gmin可以表示为一个相当小的有理数n/d3/2在您的示例中),那么您可以使用

d * sum(positive_bags_) >= n * sum(negative_bags_)

作为你的约束。如果没有合适的小理性,那么您需要将变量引导到 FloatVars 并使用 FloatVar线性约束

于 2019-03-14T13:11:28.233 回答
0

如果隐式类型转换是一个问题,您可以尝试:

(float) sum(positive_bags_) >= (gmin * (float) sum(negative_bags_))

假设 gmin 是一个浮点数。

隐式转换会将您的浮点数转换为 int。如果要控制要应用的舍入类型,请将结果包装到<math.h>'sroundf或您选择的舍入函数中,具体取决于类型。

于 2019-03-14T13:34:08.847 回答