0

我发布了一个标量约束,我希望能够在我得到解决方案时打印出它的结果。所以我想以某种方式将它缓存在IntVar中……</p>

我用旧的 Choco 语法找到了一个旧的答案,但我无法让它与现代 Choco 一起工作:

pb.post(eq(y, pb.scalar(new IntDomainVar(){x1,x2,...,xn}, new int[]{1,1...,1})));

也许这不是我想要的,因为y可能只是一个int常量而不是IntVar ...</p>

无论如何,你知道这样做的方法吗?目前,当我得到解决方案时,我可以从值中重新计算标量,但我计划根据这些标量的平均值添加一个最小化目标……</p>

我试图通过将标量分解为几个变量来解决这个问题,但现在我得到了零解决方案:

IntVar[][] scalarResults = new IntVar[x][y];
IntVar[] sumsOfScalars = new IntVar[x];
IntVar[] sumsOfScalars = model.intVarArray(x, 0, ub);

for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {

        scalarResults[i][j] = model.intScaleView(mainValues[i][j], coeffs[j]);
        // Works great.

        model.sum(scalarResults[i], "=", sumsOfScalars[i]).post();
    }
}

我究竟做错了什么?谢谢你的帮助!

4

0 回答 0