我们可以用choco求解器检查2个分号之间的相等性吗?
我有一个二维数组,对于它的每个元素,它们的域是具有相同形式的不同数字:由6位数字组成的数字(元素可以具有的一些值示例:781010、680101、391111) 。 我的问题是,如何只比较一个数字而不是整个数字?
我必须做些看起来像这样的事情:
Model model = new Model();
IntVar[][] array = new IntVar[height][width];
....
// getting the domains for each element of array
....
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
model.arithm(array[i][j]3rdDigit, "=", array[i+1][j]4thDigit);
}
}
能帮我吗?
答案 0 :(得分:1)
您可以考虑将数字分解为一系列数字:对于当前的每个IntVar,您可以创建一个数组arr为6(因为您的数字始终为6个数字)IntVars,并为该值设置另一个IntVar,并具有以下约束:
IntVar value = model.intVar(0,999999);
model.scalar(arr, new int[]{100000, 10000, 1000, 100, 10, 1}, "=", value).post();
然后您可以将其他约束发布到值上(如您已经做的那样,可以将其存储在矩阵中)。
另一种可能较慢的可能性是发布以下约束(不为数字创建变量):
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
IntVar thirdDigit = model.intVar(0,9);
model.mod(array[i][j], 1000, thirdDigit).post();
IntVar fourthDigit = model.intVar(0,9);
model.mod(array[i+1][j], 100, fourthDigit).post();
model.arithm(thirdDigit, "=", fourthDigit).post();
}
}