Gecode:使用浮点值限制整数变量
Gecode: constraining integer variables using a float value
i在具有正面和负面示例的学习上下文中,通过其C++
API使用Gecode
。在这种情况下,我有两个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
。
我检查了该文档,但找不到使用Boolean
/Integer
和Float
变量的linear
的定义。
是否有某种方法可以使用Float gmin
定义此约束?
预先感谢!
如果您的因子gmin
可以表示为相当小的有理n/d
(您的示例中的3/2
),则可以使用
d * sum(positive_bags_) >= n * sum(negative_bags_)
作为您的约束。如果没有合适的理性,那么您需要将变量引导到floatvars并使用floatvar线性约束。
如果隐式类型铸造是一个问题,则可以尝试:
(float) sum(positive_bags_) >= (gmin * (float) sum(negative_bags_))
假设Gmin是浮点。
隐式铸造将使您的浮子转换为int。如果要控制要应用哪种类型的舍入,请将结果包装到<math.h>
的roundf
或您选择的圆形功能中,具体取决于类型。
相关文章:
- enum是C++中的宏变量还是整数变量
- 对已具有设定值的整数变量的加法
- 如何使用C++将字符串中的字符转换为整数变量
- 如果用户输入在整数变量中浮动怎么办?
- 在c++中读取文件时,它如何自动将字符放入字符数组,将数字放入整数变量
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- C++ 两个线程,共享几个整数变量
- 常量整数变量和数字的不同类型推导
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 整数变量的值在传递给 c++ 中的函数后发生变化
- 整数变量与整数字面变化的乘法结果
- 在 C++ 中,当我声明一个整数变量 int a = 200L 或 int a = 200F 或 int a = 200
- 当我使用我的向量名称后跟包含整数变量的括号时,括号是什么意思
- 如何有效地检测4个整数变量中的对称性
- Gecode:使用浮点值限制整数变量
- 将 std::sort 与指向整数变量的指针一起使用会产生意外的输出
- 在 c++ 中,浮点变量除以整数变量时的结果类型
- C++将一组整数变量映射到值的有效方法
- 检查是否在整数变量中设置了标志
- 类型转换问题:字符数组的元素转换为整数变量