在一种带有正面和负面示例的学习环境中,我通过其Gecode API使用C++
在这种情况下,我有两个BoolVarArraypositive_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_约束为23,...比negative_bags_大倍,但是我需要进行实验以将gmin定义为1.5

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

有什么方法可以使用float gmin定义此约束?

提前致谢!

最佳答案

如果您的因子gmin可以表示为合理的小有理n/d(在您的示例中为3/2),则可以使用

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


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

09-26 14:39