巧克力中的复杂变量

时间:2017-09-21 15:02:33

标签: java constraints constraint-programming choco

如果复杂变量满足约束条件,如何检查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();
        }
}

2 个答案:

答案 0 :(得分:1)

CP依赖于变量和约束。您应首先创建变量,然后在它们上发布约束。请不要拨打#34;约束&#34;一系列整数,只是你问题的一些输入。

您可以在此处找到一个简单的巧克力示例: - https://www.cosling.com/choco-solver/hello-world 我认为这个问候语足以满足您的需求。如果您想深入了解,请阅读:http://choco-tuto.readthedocs.io/en/latest/

答案 1 :(得分:0)

也许有更好的方法,但是您可以创建一个初始的IntVar,称为config(介于0和配置数之间)。然后为每个元素(elementA,elementB,elementC等)分别分配IntVar。

然后您可以添加说明以下内容的逻辑:

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

除此之外,您还可以根据元素添加更多约束以返回解决方案。