У меня есть следующая простая проблема, которую я хотел бы использовать для экспериментов с [MS Solver Foundation] [1]:
У меня есть 10 слотов, которые мне нужно заполнить целыми числами в диапазоне от 1 до 5. Я хочу применить только два ограничения:
- слот [n]! = Слот [n + 1]
- сумма всех слотов должна быть больше 20
Я мог бы просто создать следующие решения:
Decision s1 = new Decision(Domain.IntegerRange(1, 5), "slot1");
Decision s2 = new Decision(Domain.IntegerRange(1, 5), "slot2");
Decision s3 = new Decision(Domain.IntegerRange(1, 5), "slot3");
Decision s4 = new Decision(Domain.IntegerRange(1, 5), "slot4");
Decision s5 = new Decision(Domain.IntegerRange(1, 5), "slot5");
Decision s6 = new Decision(Domain.IntegerRange(1, 5), "slot6");
Decision s7 = new Decision(Domain.IntegerRange(1, 5), "slot7");
Decision s8 = new Decision(Domain.IntegerRange(1, 5), "slot8");
Decision s9 = new Decision(Domain.IntegerRange(1, 5), "slot9");
Decision s10 = new Decision(Domain.IntegerRange(1, 5), "slot10");
А затем установить ограничения вручную, как в
model.AddConstraints("neighbors not equal",
s1 != s2, s2 != s3, s3 != s4, s4 != s5,
s5 != s6, s6 != s7, s7!= s8, s8 != s9, s9 != s10
);
model.AddConstraint("sum",
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 > 20 );
Однако я должен представить, что есть лучший способ сделать это - надеюсь, в более сродни декларативному синтаксису.