Gecode:使用浮点值约束整数变量

时间:2019-03-14 10:41:25

标签: c++ constraint-programming 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约束为3negative_bags_,...比gmin大倍,但是我需要通过实验来定义{{1} },例如1.5

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

是否可以使用浮点数gmin定义此约束?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

作为您的约束。如果没有合适的小有理数,则需要将变量channel移至FloatVars并使用FloatVar linear constraint

答案 1 :(得分:0)

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

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

假设gmin是浮点数。

隐式转换会将您的float转换为int。如果要控制要应用的舍入类型,请将结果包装到<math.h>的{​​{1}}或根据类型选择的舍入函数中。