在一种带有正面和负面示例的学习环境中,我通过其Gecode
API使用C++
。
在这种情况下,我有两个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_
大倍,但是我需要进行实验以将gmin
定义为1.5
。
我检查了文档,但没有找到同时使用linear
/ Boolean
和Integer
变量的Float
定义。
有什么方法可以使用float gmin
定义此约束?
提前致谢!
最佳答案
如果您的因子gmin
可以表示为合理的小有理n/d
(在您的示例中为3/2
),则可以使用
d * sum(positive_bags_) >= n * sum(negative_bags_)
作为您的约束。如果没有适合的小有理数,则需要将变量channel移至FloatVars并使用FloatVar linear constraint。