Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Gecode:使用浮点值约束整数变量_C++_Constraint Programming_Gecode - Fatal编程技术网

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网站上轻松找到该文档,因此我请求了一个链接。