如果复杂变量满足约束条件,如何检查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();
}
}
答案 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
...
除此之外,您还可以根据元素添加更多约束以返回解决方案。