J'ai le problème simple suivant que je voudrais utiliser pour expérimenter avec [MS Foundation Solver] [1]:Microsoft Solver Foundation Services de syntaxe déclarative
J'ai 10 emplacements que je dois remplir avec des nombres entiers la plage de 1 à 5. Je veux appliquer seulement deux contraintes:
-
sous
- [n] = fente [n + 1]
- la somme de tous les logements devraient être plus de 20
Je pourrais il suffit de créer les décisions suivantes:
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");
Et puis des contraintes de configuration manuellement comme dans
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);
Cependant, je dois imaginer qu'il ya une meilleure façon de le faire - je l'espère en quelque chose de plus proche de déclarative syntaxe.
Pourriez-vous poster la solution ici aussi? – Larsenal