192ページの「容量を超えてはいけない」という制約が理解できません。
IntSetArgs c(n_warehouses);
for(int w = 0; w < n_warehouses; ++w){
c[w] = IntSet(0, capacity[w]);
//IntSet(0, 1) == {}, {0}, {1}, {0, 1}
}
count(*this, supplier, c, ICL_DOM);
ドキュメントは、カウント機能が「容量を超えない」に等しい制約を構築すると述べています。しかし、私は理由を知りませんか?
1 : ICL_DOM がある場合とない場合の違いは何ですか?
2 : 4.4.8(pg 63)による
c がセットではなく IntArrayArgs であり、ICL_DOM がない場合、次のように制約を投稿するようなものですか?
int capacity[] = {1, 4, 2, 1, 3};
supplier[0] == 0 == c[0] == 1
supplier[0] == 1 == c[1] == 4
supplier[0] == 2 == c[2] == 2
supplier[0] == 3 == c[3] == 1
supplier[0] == 4 == c[4] == 3
supplier[1] == 0 == c[0] == 1 //and so on
c がセットの場合はどうなりますか? これは、制約が次のようになることを意味しますか
supplier[0] == 0 == c[0] == 0, 1
supplier[0] == 1 == c[1] == 0, 1, 2, 3, 4
//....
supplier[1] == 0 == c[0] == 0, 1
supplier[1] == 1 == c[1] == 0, 1, 2, 3, 4 //and so on?
これにより、「容量を超えないでください」という制約が保持される理由がわかりません。
私にとって、それは(疑似コード)であるべきです
rel(*this, sum(supplier == 0) <= 1);
rel(*this, sum(supplier == 1) <= 4);
rel(*this, sum(supplier == 2) <= 2);
rel(*this, sum(supplier == 3) <= 1);
rel(*this, sum(supplier == 4) <= 3);