我通过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
can被表达为一个相当小的理性n/d
(在你的例子中3/2
),那么你可以使用
d * sum(positive_bags_) >= n * sum(negative_bags_)
作为你的约束。如果没有合适的小理性,那么你需要将变量channel变为FloatVars并使用FloatVar linear constraint。
如果隐式类型转换是个问题,您可以尝试:
(float) sum(positive_bags_) >= (gmin * (float) sum(negative_bags_))
假设gmin是一个浮点数。
隐式转换会将您的float转换为int。如果要控制要应用的舍入类型,请将结果包装到<math.h>
的roundf
或您选择的舍入函数中,具体取决于类型。