0

如果复杂变量满足约束条件,如何检查 Choco?例如,如果我有以下配置列表:

int[][] configurations = new int[][] {
        {20, 24, 10, 3, 4},  
        {20, 13, 1, 3, 4}};

其中 config1 = {20, 24, 10, 3, 4} 和 config2 = {20, 13, 1, 3, 4}

int[] constraints = new int[]{21, 15, 2, 10, 10};

是一个约束列表,对于给定的配置,配置中的每个元素都需要高于(或低于)对应的约束。例如:config1 = {20, 24, 10, 3, 4} 约束 = {21, 15, 2, 10, 10}

check if config1[0] < constraints[0] AND config1[1] < constraints[1] AND ... 

如果满足所有约束,则只需将其标记为解决方案。这就是我所拥有的

// c = number of configurations
// q = number of elements in each configuration
// p = configurations matrix

for (int i = 0; i < c; i++) {
        for (int j = 0; j < q; j++) {
            model.arithm(model.intVar(p[i][j]), "<", model.intVar(k[j])).post();
        }
}
4

2 回答 2

1

CP 依赖于变量和约束。您应该首先创建变量,然后对它们发布约束。请不要将“约束”称为整数数组,这只是您问题的一些输入。

您可以在这里找到一个简单的 choco 示例:- https://www.cosling.com/choco-solver/hello-world 我认为这个 hello 词足以满足您的需要。如果您想更深入,请阅读以下内容:http ://choco-tuto.readthedocs.io/en/latest/

于 2017-09-23T14:30:28.423 回答
0

可能有更好的方法来做到这一点,但您可以创建一个名为 config 的初始 IntVar(绑定在 0 和配置数量之间)。然后为每个元素(elementA、elementB、elementC 等)分离 IntVar。

然后,您可以添加如下逻辑:

if config = 0 then elementA = 20
if config = 0 then elementB = 24
 ...

最重要的是,您可以根据元素添加更多约束以返回您的解决方案。

于 2019-11-05T21:43:00.607 回答