在一种带有正面和负面示例的学习环境中,我通过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_
,...比gmin
大倍,但是我需要通过实验来定义{{1} },例如1.5
。
我检查了文档,但没有找到同时使用linear
/ Boolean
和Integer
变量的Float
定义。
是否可以使用浮点数gmin
定义此约束?
提前谢谢!
答案 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}}或根据类型选择的舍入函数中。