C++ Gecode:使用浮点值约束整数变量
我通过它的C++ Gecode:使用浮点值约束整数变量,c++,constraint-programming,gecode,C++,Constraint Programming,Gecode,我通过它的C++API在一种学习环境中使用Gecode,有正面和负面的例子。 在这种情况下,我有两个BoolVarArray:positive\u bags\u和negative\u bags\u 我想做的似乎很简单:我想根据用户参数gmin以最小的增长率约束约束这些行李 因此,约束应该如下所示:sum(正)>=gmin*sum(负)。 它使用如下定义的rel函数工作:rel(*this,sum(positive_-bags)>=gmin*sum(negative_-bags))但我的问题是,在
C++
API在一种学习环境中使用Gecode
,有正面和负面的例子。
在这种情况下,我有两个BoolVarArray
:positive\u bags\u
和negative\u bags\u
我想做的似乎很简单:我想根据用户参数gmin
以最小的增长率约束约束这些行李
因此,约束应该如下所示:sum(正)>=gmin*sum(负)
。
它使用如下定义的rel
函数工作:rel(*this,sum(positive_-bags)>=gmin*sum(negative_-bags))
但我的问题是,在我的情况下gmin
是一个浮点,但由rel
作为整数进行转换
因此,我只能将positive\u bags\u
约束为2
,3
。。。比negative\u bags\uuu
大几倍,但我的实验需要将gmin
定义为1.5
我查看了文档,没有找到同时使用布尔值
/整数
和浮点变量的线性
定义
是否有某种方法可以使用浮点gmin
定义此约束
提前谢谢 如果您的系数gmin
可以表示为合理的小有理数n/d
(3/2
),那么您可以使用
d * sum(positive_bags_) >= n * sum(negative_bags_)
作为你的约束。如果没有合适的小rational,那么您需要将变量转换为FloatVar并使用FloatVar 如果您的系数gmin
可以表示为合理的小有理数n/d
(3/2
),那么您可以使用
d * sum(positive_bags_) >= n * sum(negative_bags_)
作为你的约束。如果没有合适的小rational,那么您需要将变量转换为FloatVar并使用FloatVar 如果隐式类型转换是一个问题,您可以尝试:
(float) sum(positive_bags_) >= (gmin * (float) sum(negative_bags_))
假设gmin是一个浮点数
隐式强制转换将浮点转换为整数。如果要控制要应用的舍入类型,请将结果包装到
的舍入函数中,或根据类型选择舍入函数。如果隐式强制转换是一个问题,您可以尝试:
(float) sum(positive_bags_) >= (gmin * (float) sum(negative_bags_))
假设gmin是一个浮点数
隐式强制转换将您的浮点转换为整数。如果您想控制要应用的舍入类型,请将结果封装到
的舍入f
或您根据类型选择的舍入函数中。请指向“求和”方法的文档。似乎您的变量被隐式强制转换,这造成了一个问题。请指向“sum”方法的文档。看起来你的变量被隐式转换了,这造成了一个问题。Sum是Gecode中的一个函数,它(在本例中)返回一个IntExpr,而这个IntExpr不能转换为浮点。这就是我的想法,但我无法在Gecode站点上轻松找到该文档,因此我要求提供一个链接。Sum是Gecode中的一个函数,它(在本例中)返回一个IntExpr,它不是可以转换成浮点的东西。这是我的想法,但我无法在gecode网站上轻松找到该文档,因此我请求了一个链接。