2017-09-11 7 views
1

Je suis un étudiant qui fait du bénévolat en tant que gestionnaire de programme pour une organisation de services communautaires locale. Une grande partie de mon travail consiste à faire correspondre les horaires de volontariat (soumis à moi par SMS et e-mail) avec les horaires de tutee (soumis par les enseignants via un formulaire google). Au cours des deux dernières années, j'ai jumelé manuellement les créneaux horaires demandés et les disponibilités des bénévoles avec des feuilles Excel et des codes couleur. Cela a été facile jusqu'ici parce que j'ai reçu un nombre relativement faible de demandes de tuteurs et d'inscriptions volontaires.Utilisation de l'optimisation contrainte - Création d'un horaire de bénévolat optimal pour l'organisation de service communautaire

Au cours des deux derniers mois, j'ai travaillé dur pour développer le programme de tutorat dans l'école que je gère. Ce semestre, j'ai reçu 18 formulaires de demande pour plus de 25 étudiants. Il me faudra des heures, sinon des jours, pour compléter les horaires de volontariat manuellement pour ces nombreuses personnes. Compte tenu de ma charge de travail, j'ai pensé qu'il devrait y avoir une meilleure façon d'aborder ce problème. Je suis curieux de savoir si l'un de vous avec une expérience de programmation contrainte peut m'aider à (1) résoudre mon problème de planification ou (2) recommander un logiciel qui peut aider. Ci-dessous, je vais décrire plus en détail le processus de planification et énumérer les contraintes qui doivent être prises en compte lors de la planification des quarts de travail.

LE PROCESSUS HORAIRES

Je demande à mes volontaires pour me faire parvenir leur lundi - jeudi la disponibilité dans un format comme ceci:

M: 9:30-12:00 T: 2h00 - 4:30 W: 12:00 - 1:30 Th: 10:00 - 11:30

L'école est à 15-20 minutes en voiture, alors je compte sur les «chauffeurs» pour faire du covoiturage avec d'autres bénévoles à leur quart d'heure. Si le volontaire a une voiture et est prêt à faire du covoiturage, j'essaie de jumeler au moins 2 autres volontaires avec la même disponibilité avec ce conducteur (étant donné que la voiture a assez de place et qu'un tuteur a été demandé par un enseignant pour ce créneau horaire)).

Je prie ensuite qu'un enseignant ait demandé un tuteur pour le créneau horaire de ce covoiturage. Si non, alors le covoiturage n'est pas bon et je dois trouver manuellement une autre solution.

LES CONTRAINTES ET VARIABLES

De toute évidence, il y a plusieurs contraintes et variables qui entrent en jeu lors de la planification. J'en énumérerai autant que je peux ci-dessous:

  • Le tuteur est-il un «pilote»?
  • Si le tuteur est un «pilote», combien de places a-t-il?
  • La disponibilité du pilote correspond-elle à l'une des plages horaires demandées?
  • Y a-t-il d'autres tuteurs non conducteurs qui ont la même disponibilité que le conducteur? (c.-à-d. quelqu'un peut-il faire du covoiturage avec le conducteur?)
  • Est-ce que tous les bénévoles du covoiturage ont un élève qu'ils pourraient instruire?
  • L'enseignant a-t-il demandé un tutorat individuel ou en groupe (c'est-à-dire un ou plusieurs tuteurs pour un ou plusieurs élèves)?
  • Si oui, combien de tuteurs l'enseignant at-il demandé?
  • SOUVENEZ-VOUS, un volontaire peut tuteur plus d'un étudiant

C'est une petite liste des contraintes et des variables que je peux venir avec le dessus de ma tête.

Donc, quelqu'un peut-il offrir une solution à ce problème de planification? Quelqu'un qui ne connaît pas la programmation par contraintes pourrait-il utiliser OptaPlanner pour résoudre ce problème?

Nous vous remercions d'avoir lu ce texte et de vous avoir conseillé.

Répondre

1

Vous pouvez utiliser OptaPlanner pour résoudre ce problème, mais il semble que Minizinc pourrait être une meilleure option. Mon point est que dans le cas de Minizinc vous décrivez propriétés requises d'une solution, au lieu de mettre en œuvre des flux de travail et des algorithmes pour gérer les variables, contraintes, analyseurs pour les données d'entrée etc, dans le cas d'OptaPlanner.

Si vous n'avez pas l'expérience de la satisfaction des contraintes, cela pourrait être beaucoup plus simple - décrivez simplement les configurations autorisées/non autorisées dans un fichier de configuration de texte et exécutez un solveur. Vous pouvez même fournir une interface graphique simple pour générer des données d'entrée.

+0

CaptainTrunky, Merci beaucoup pour votre réponse. Disons que je dois avoir fait cela d'ici mercredi et que j'ai seulement pris quelques cours de programmation d'introduction (expérience de programmation essentiellement zéro). Combien de temps pensez-vous qu'il me faudrait pour faire fonctionner une solution? En outre, vu ce programme étonnant codé par Geoffrey De Smet (https://www.youtube.com/watch?v=sOWC4qrXxFk) qui utilise OpenShift. Je me demande si je pourrais utiliser ce programme préfabriqué à la place. – Perry

+0

@Perry Je ne connais pas grand-chose à OpenSwift. De mon point de vue, Minizinc est beaucoup plus simple qu'OptaPlannet, surtout si vous n'êtes pas familier avec la programmation. Est-il possible de résoudre ce problème dans quelques jours sans aucune expérience - je n'en ai aucune idée, cela dépend vraiment de beaucoup de choses. – CaptainTrunky