【问题标题】:Complex variable in chocochoco 中的复变量
【发布时间】:2017-09-21 15:02:32
【问题描述】:

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

是一个约束列表,对于给定的配置,配置中的每个元素都需要高于(或低于)对应的约束。例如: 配置1 = {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();
        }
}

【问题讨论】:

    标签: java constraints constraint-programming choco


    【解决方案1】:

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

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

    【讨论】:

    • 我的问题是,我如何定义约束和变量以使其采用整个配置。例如,如果我的配置有 3 个元素(a、b、c)和一组约束(x、y、z),并且除了满足我想要最小化(和最大化)其中一些约束之外,我该如何写 a
    【解决方案2】:

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

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

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

    在此之上,您可以根据元素添加更多约束以返回您的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多