Avec les mêmes contraintes, des procédures de calculs avancées permettent d'élaborer des plannings plus équitables que ceux construits de bonne foi avec les outils classiques...
Avec les mêmes contraintes, des procédures de calculs avancées permettent d'élaborer des plannings plus équitables que ceux construits de bonne foi avec les outils classiques...
LA PLANIFICATION OPTIMALE ET EQUITABLE S'INSPIRE DU COMPORTEMENT DES FOURMIS
🐜🐜
Normal ! la fourmi est "travailleuse" !!!
Résumé
Ce document présente une méthode automatisée de planification annuelle des gardes pour une équipe de 6 vétérinaires, combinant trois approches successives : un assignement séquentiel (script R), une heuristique gloutonne séquentielle (HGS) implémentée en VBA (Visual Basic for Application, Microsoft), puis une amélioration par échanges (SWAP) en VBA également. Dans le cadre d’un scénario imposé, l’objectif est d’obtenir une répartition équitable de 365 gardes de nuit et 113 gardes de jour tout en respectant les contraintes réglementaires et individuelles (repos, CP, RTT, options BLOQUE). Le processus réduit le temps de production d’un planning et améliore la transparence et la traçabilité des choix.
Contexte et contraintes principales
Ressources : 6 vétérinaires, chacun avec 30 jours de congés payés et 11 RTT ; 3 semaines de congés en bloc « Vacances » (un seul bloc simultané autorisé pour la structure).
Événements : 365 gardes de nuit ; 113 gardes de jour (samedis, dimanches, jours fériés).
Contraintes temporelles : 12 heures non prestées obligatoires avant et après chaque garde ; interdiction d’affecter un vétérinaire deux demi‑périodes (pas de jour immédiatement après une nuit pour le même intervenant).
Options individuelles : environ 20 mentions BLOQUE permettant d’exclure temporairement un vétérinaire d’un pool de recrutement des gardes (pour les ponts les week-ends du bloc « Vacances », formations, réunions, etc.).
Données d’entrée : fichier Excel centralisant indisponibilités et options pour l’année développé sur 2 demi-périodes de 12 heures (730 demi-périodes). La structure est la suivante :
Approches méthodologiques (synthèse)
1. Assignement séquentiel (script développé en langage R)
Chaque garde est considérée comme un événement séquentiel. Nous construisons la séquence suivante en posant le principe que les vétérinaires sont recrutés selon l'ordre inchangé (ici de VETO_1 à VETO_6) successivement de 1 à 6.
En cas d’indisponibilité du vétérinaire pressenti selon l’incrémentation de la boucle en raison de CP, RTT ou BLOQUE, le système passe au vétérinaire suivant.
Cependant, avant l’affectation définitive de la garde à un collaborateur, le système vérifie que celui-ci respecte une période de 12 heures non prestée avant la prise de la garde. Ensuite il assure un repos de 12 heures après la garde en l’écartant du pool de recrutement pour la garde suivante (travail de jour normal ou garde de jour après une garde de nuit, soit garde de nuit après une activité de jour).
Le résultat théorique, en absence de contraintes supplémentaires est le suivant :
Les attributions séquentielles sont exécutées par un script R (RStudio) pour prendre en compte les indisponibilités, les repos avant et après la garde. Le script génère un fichier Excel de synthèse qui est donné ci-dessous :
Limite : la méthode est simple mais non robuste pour garantir l’équité globale ; sensible à l’ordre de parcours.
2. Heuristique Gloutonne Séquentielle (*) (HGS, script développé en VBA)
Le module applique une heuristique gloutonne séquentielle (HGS) : Pour chaque garde, parcourue dans l’ordre séquentiel du calendrier, l’algorithme sélectionne, parmi le pool de vétérinaires disponibles ce jour-là, la meilleure affectation selon le critère d’équité défini.
Pour chaque garde, on construit le pool des vétérinaires éligibles (pas de BLOQUE/CP/RTT, respect du repos).
Critère d’affectation : choisir le vétérinaire ayant le moins d’affectations cumulées (minimiser la charge locale).
Ajustement aléatoire contrôlé : petite probabilité d’introduire une perturbation pour éviter les biais déterministes.
Avantage : rapide et stable ; Inconvénient : optimisation locale seulement, risque d’optimum local.
Homogénéité du total des gardes, mais grosses amplitudes tant pour les gardes de JOUR (+13) que pour les gardes de NUIT (+13) substistent.
(*) Note : Selon la terminologie anglaise, Greedy algorithm désigne un algorithme qui fait, étape par étape, le choix qui paraît optimal sur le moment, sans revenir en arrière. En français, cette stratégie du meilleur choix immédiat est désignée par algorithme glouton, algorithme gourmand ou heuristique gloutonne selon le contexte.
3. Amélioration par échanges (SWAP, script développé VBA)
Le module SWAP compare la solution courante pour une garde donnée à l’ensemble des voisins définis par l’algorithme. Dans notre implémentation, le voisinage porte sur les 113 gardes de jour (samedis, dimanches et jours fériés) car l’optimisation sur le critère Gardes de NUIT reviendrait à tester les swaps sur 365 événements.
Partant de la solution HGS, le module SWAP teste des échanges entre paires de gardes (voisinage défini) et applique les swaps qui améliorent une métrique globale (best‑improvement) pour chaque garde de JOUR considérée.
Métrique à optimiser : somme des carrés des écarts par rapport à la cible (T) selon la formule :
Cette méthode pénalise fortement les gros écarts tels que ceux observés dans le module HGS.
Résultat observé : convergence rapide ; exemple : 11 itérations nécessaires pour atteindre la solution finale dans le cas étudié.
Conclusion
Le modèle SWAP présenté s’appuie sur le scénario qui a été développé ici pour les 2 autres modèles. Néanmoins, il est aisé de l’adapter pour prendre en compte des considérations propres à chaque structure ou à chaque collaborateur (travail à 4/5, journées dédiées à la formation ou la gestion, etc…). Cette souplesse, combinée à la rapidité de calcul permet d’adapter le planning aux événements survenant en cours d’exercice pour optimiser l’affection des ressources pour le reste de l’année. La méthode devient un outil fiable et adaptable pour les cliniques vétérinaires, réduisant le temps de production et améliorant l’équité entre collaborateurs.
En passant d’un processus manuel, fragile et chronophage à une solution automatisée, robuste et transparente, les cliniques gagnent en efficacité, en équité et en sérénité.
Si vous aussi souhaitez vous libérer de la charge administrative imposée par l'organisation des plannings, n'hésitez pas à me contacter via ce formulaire
Et les fourmis dans tout cela ?
🐜 1. Le principe du GPS des fourmis (Ant Colony Optimization, ACO)
Dans la nature, les fourmis :
explorent plusieurs chemins,
déposent des phéromones sur les bons trajets,
abandonnent les chemins moins efficaces,
renforcent progressivement les solutions les plus courtes.
En optimisation, cela devient :
une solution de référence (le meilleur chemin actuel),
des explorations locales (modifications, swaps, permutations),
une règle d’acceptation :
si c’est meilleur → on garde,
si c’est pire → on rejette (ou on garde avec une faible probabilité dans certaines variantes).
🧠 2. algorithme glouton + swaps = comportement de fourmis
Dans cet exemple :
✔️ Étape 1 : Heuristique gloutonne (HGS)
L’algorithme commence par construire une solution initiale en appliquant une règle simple et locale (= à chaque étape) :
Pour chaque garde, choisir le vétérinaire le plus “léger” (celui avec le plus faible compteur de Gardes de JOUR)
Respecter les contraintes (disponibilité, garde précédente, etc.).
Conserver la meilleure option locale disponible.
Cette solution devient la référence initiale, notée HGS.
Cette première solution “raisonnable” → c’est le chemin initial.
✔️ Étape 2 : Swaps locaux
Explorer des variantes en échangeant des gardes ou des vétérinaires → ce sont les chemins alternatifs.
✔️ Étape 3 : Règle d’acceptation stricte
Si la nouvelle solution réduit la somme des carrés, elle est retenue → renforcement du chemin.
Si elle l’augmente, elle est rejetée → abandon du chemin.
C’est exactement le mécanisme de renforcement positif des fourmis
Le rapport complet