如果复数变量满足约束,如何在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();
}
}发布于 2017-09-23 22:30:28
CP依赖于变量和约束。您应该先创建变量,然后再对它们进行post约束。请不要调用“约束”一个整数数组,它只是你的问题的一些输入。
你可以在这里找到一个简单的巧克力例子:- https://www.cosling.com/choco-solver/hello-world我认为这个问候词足以满足你的需要。如果你想深入了解,请阅读以下内容:http://choco-tuto.readthedocs.io/en/latest/
发布于 2019-11-06 05:43:01
可能有一种更好的方法可以做到这一点,但您可以创建一个名为IntVar的初始配置(范围在0和配置数量之间)。然后为每个元素(elementA、elementB、elementC等)分隔IntVar。
然后,您可以添加这样的逻辑:
if config = 0 then elementA = 20
if config = 0 then elementB = 24
...最重要的是,您可以根据元素添加进一步的约束以返回您的解决方案。
https://stackoverflow.com/questions/46347324
复制相似问题