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

问题描述 投票:0回答:2

我通过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_大一倍,但我需要我的实验来定义gmin1.5

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

有没有办法用float gmin定义这个约束?

提前致谢!

c++ constraint-programming gecode
2个回答
2
投票

如果你的因子gmincan被表达为一个相当小的理性n/d(在你的例子中3/2),那么你可以使用

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

作为你的约束。如果没有合适的小理性,那么你需要将变量channel变为FloatVars并使用FloatVar linear constraint


0
投票

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

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

假设gmin是一个浮点数。

隐式转换会将您的float转换为int。如果要控制要应用的舍入类型,请将结果包装到<math.h>roundf或您选择的舍入函数中,具体取决于类型。

© www.soinside.com 2019 - 2024. All rights reserved.