Java choco中的复变量
如果一个复杂变量满足约束条件,如何签入Choco?例如,如果我有以下配置列表:Java choco中的复变量,java,constraints,constraint-programming,choco,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}; 是一个约束列表,对于给定的配
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};
是一个约束列表,对于给定的配置,配置中的每个元素都需要高于(或低于)相应的约束。例如:
配置1={20,24,10,3,4}
约束={21,15,2,10,10}
check if config1[0] < constraints[0] AND config1[1] < constraints[1] AND ...
检查config1[0]
如果满足所有约束条件,则只需将其标记为解决方案。这就是我所拥有的
// 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();
}
}
//c=配置数
//q=每个配置中的元件数量
//p=配置矩阵
对于(int i=0;i “CP依赖于变量和约束。您应该首先创建变量,然后对其施加约束。请不要将“约束”称为只是您问题的一些输入的int数组
您可以在这里找到一个简单的choco示例:
-
我认为这个hello单词足以满足您的需要。如果您想深入了解,请阅读以下内容:可能有更好的方法,但您可以创建一个名为config的初始IntVar(绑定在0和配置数之间)。然后为每个元素(elementA、elementB、elementC等)分别设置IntVar
然后,您可以添加这样的逻辑:
if config = 0 then elementA = 20
if config = 0 then elementB = 24
...
除此之外,您还可以根据元素添加更多约束以返回您的解决方案。我的问题是,如何定义约束和变量以使其包含整个配置。例如,如果我的配置有3个元素(a、b、c)和一组约束(x、y、z),除了满足我希望最小化(和最大化)其中一些约束之外,我如何编写