【问题标题】:Choco abs of an IntVar not workingIntVar 的 Choco abs 不工作
【发布时间】:2016-06-05 13:59:23
【问题描述】:

[我使用的是 Choco 3.3.3]

我有一个 IntVar a 和一个 int b。我想将差异保存到 IntVar[] 数组 d 中。我在代码的另一点以完全相同的方式完成了此操作,并且它没有问题地工作,但在这里我只是不让它工作。

d = VF.boundedArray("d", num_ts, -20, 20, solver);
for(int t=0; t < num_ts; t++){
    IntVar a = VF.bounded("a", 0, 10, solver);
    solver.post(ICF.sum(aa[t], a)); //values are [2,2,2,1,2,2]
    int b = bb[t][j]; //values are [2,3,2,2,2,2]
    IntVar c = VF.offset(a, -b);
    ...//see below
}

当我只使用 c (d[t] = c;) 时,打印出 d 的值时的结果是 [0, -1, 0, -1, 0, 0],但我需要绝对值那,所以 [0,1,0,1,0,0]

这些是我尝试过的不同的事情以及 d 的结果:

d[t] = VF.abs(c); //result [0,0,0,0,0,0]
solver.post(ICF.times(c, -1, d[t])); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.sum(new IntVar[]{VF.minus(a), VF.fixed(b, solver)}, d[t])); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.arithm(a, "+", d[t], "=", b)); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.distance(VF.fixed(b, solver), a, "=", d[t])); //result [-20, -20, -20, -20, -20, -20]

谁能告诉我我做错了什么?我特别困惑 [-7,-6,-7,-7,-7,-7] 来自哪里......

【问题讨论】:

    标签: java constraints modeling choco


    【解决方案1】:

    我不确定我是否理解您想要做什么以及您真正尝试了什么,但我的猜测是您没有“解决”模型(或者至少您没有传播约束)。如 javadoc 中所示, variable.getValue() 返回 LOWER BOUND 以防变量未实例化(将 -ea 传递给 JVM 参数时会引发异常)。所以添加 -ea,确保在询问变量值之前调用 solver.findSolution() 并查看它是否工作。如果没有,请发送可执行代码,以便我们重现问题。它解决了你的问题吗?

    让-纪尧姆,https://www.cosling.com/

    【讨论】:

    • 当添加 -ea 时,我确实得到一个带有很多“FAILURE >> ....”的 AssertionError 但我不知道问题出在哪里。在询问变量值之前,我明确地调用了solver.findOptimalSolution。我的怀疑是,因为在我的示例中 aa 是一个 IntVar[] ,其中只有少数条目具有约束。我认为如果数组中的条目没有约束,则只使用下限。我不知道如何改变这一点。不幸的是,我无法公开展示我的完整代码,而且我还没有找到产生相同问题的示例。
    • 在我的代码中的另一点我有同样的问题。我有一个 IntVar[] 并且只有前几个条目有一个约束,这取决于其他变量的分配。当我对这个数组求和时,我也得到了完全随机的解决方案,并且使用 -ea 我得到了一个 AssertionError
    • 你能把 findOptimalSolution 换成 findSolution 看看它是否有效吗?
    • 您是否指定了搜索启发式?如果是这样,您需要将所有变量传递给它。
    • 没有错误。问题是您的启发式搜索没有涵盖所有变量,因此解决过程结束时有些地方没有实例化。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2020-07-10
    相关资源
    最近更新 更多