0

複雑な変数が制約を満たしているかどうかを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();
        }
}
4

2 に答える 2

0

おそらくこれを行うためのより良い方法がありますが、config と呼ばれる初期 IntVar を作成することができます (0 と構成の数の間でバインドされます)。次に、要素ごとに IntVar を分離します (elementA、elementB、elementC など)。

次に、次のようなロジックを追加できます。

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

これに加えて、要素に基づいてさらに制約を追加して、ソリューションを返すことができます。

于 2019-11-05T21:43:00.607 に答える