gpt4 book ai didi

java - 巧克力解算器 : define a constraint on a part of an intVar

转载 作者:行者123 更新时间:2023-11-30 05:22:26 25 4
gpt4 key购买 nike

我们可以使用 choco 求解器检查两个部分数之间的相等性吗?

我有一个二维数组,对于它的每个元素,它们的域是具有相同形式的不同数字:由 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);
}
}

你能帮我吗?

最佳答案

您可以考虑将数字分解为一系列数字:对于当前的每个 IntVar,您可以创建一个包含 6 个 IntVar 的数组 arr(因为您的数字始终有 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();
}
}

关于java - 巧克力解算器 : define a constraint on a part of an intVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59337103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com