Question

J'ai le problème simple suivant que je voudrais utiliser pour expérimenter Fondation MS Solver :

J'ai un calendrier où je dois avoir 2 travailleurs par jour pendant 30 jours. Je dois respecter les contraintes suivantes:

  • Aucun peuple ne doit travailler deux jours de suite.
  • À moins qu'une exception spéciale est appliquée, les gens ne devraient travailler une fois par semaine.
  • Certaines personnes ne peuvent travailler le week-end.
  • Certaines personnes ne peuvent travailler en semaine.

Je prévois d'utiliser C # pour alimenter le modèle, mais j'ai besoin d'aide pour commencer la modélisation. Je ne suis pas sûr de savoir comment configurer les décisions, les paramètres et les contraintes pour résoudre ce type de problème.

Mise à jour: Alors ire et-malédictions a un bon départ, je dois imaginer qu'il ya un plus déclarative moyen d'exprimer ces contraintes en utilisant le cadre plutôt que d'avoir à les coder individuellement pour chaque personne . Tout le monde plus familier avec MSF qui peut aider à cette construction?

Était-ce utile?

La solution

Si vous avez des gens n, vous devrez définir des paramètres entiers binaires 30n chacun indiquant si une personne travaille un jour spécifique ou non.

P<xx>D<yy> == 1 => Person <xx> works on day <yy>
P<xx>D<yy> == 0 => Person <xx> does not work on day <yy>

Ensuite, vous devez contraintes pour éviter de travailler sur deux jours en ligne. Ce sera des contraintes 29n.

P<xx>D<yy> + P<xx>D<yy+1> <= 1

Ensuite, vous devez contraintes de travailler qu'une seule fois par semaine. Ce sera le suivant pour la première semaine et similaire pour les trois prochaines semaines.

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 + P<xx>D05 + P<xx>D06 <= 1

La semaine dernière sera juste ce qui suit.

P<xx>D28 + P<xx>D29 <= 1

Cela donnera une autre contrainte de 5n. Puis ajouter des contraintes pour la semaine seulement

P<xx>D05 + P<xx>D06 == 0
P<xx>D12 + P<xx>D13 == 0
P<xx>D19 + P<xx>D20 == 0
P<xx>D26 + P<xx>D27 == 0

et le week-end uniquement

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 == 0
P<xx>D07 + P<xx>D08 + P<xx>D09 + P<xx>D10 + P<xx>D11 == 0
P<xx>D14 + P<xx>D15 + P<xx>D16 + P<xx>D17 + P<xx>D18 == 0
P<xx>D21 + P<xx>D22 + P<xx>D23 + P<xx>D24 + P<xx>D25 == 0
P<xx>D28 + P<xx>D29 == 0

et enfin ajouter une fonction cible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top