ROYAUME DE MAROC UNIVERSITE ABDELMALEK ESSAIDI Ecole Nationale des Sciences Appliquées Al-Hoceima 2021/2022 La Recherche Opérationnelle Génie informatique 1 Mise en page : Encadré par : BENMAMOUN Nassim EL AJHAR Majda ADIL Ayoub AZEROUAL Omayma Mr. LAHJOUJI EL IDRISSI Ahmed Travaux réalisés par: BENMAMOUN Nassim EL AJHAR Majda HARAM Oumaima CHENTOUI Abdelali KHOUILI Khadija EL BAHRY Ahlame ASAGH Anouar AFIF Ikram DARDOURI Chaimae NAOUI KHIR El Mahdi HADDIOUI Fatima OUALI Chaymaa SABIR Kawtar ET-TAYYEB Oumayma ADIL Ayoub FARAJI Anouar ESSABRI Fatima Zahrae BOUTINKHAR Hassan ELHASSANI Wafae LAKHALIFI Jamila ELBERNOUSSI Yasmina BADDA Youssra AZIZ Mohammed AHACHI Hossain EL KHANTACH Yassine AZELMAT Mouhcine AFKIR Mohamed BERHI Othmane HAIM Redouane BELKADI El Hassan LAMINI Abdellah TOUHAMI Wiam ACHBAB Al Mahdi EL HAJOUI Meriyem RAKIB Douha NAJI Walid AZEROUAL Omayma WIRAN Larbi CHBIROU Aymane EN-NASSIBI Mohamed ETTAJRINI Safae BOUALI Salma EL HADADDI Mohamed EL HANKARI Ouijdan ERRAHOUTI Aissam OUTAMART Marouane FAKRACH Jihad ARBIB Adil 1 Table des matières Introduction générale_________________________________________5 Chapitre 1 : Les théories utilisées en recherche opérationnelle________________________________________________ 6 1 2 NP-Complétude ________________________________________ 6 1.1 Introduction _____________________________________________________________ 6 1.2 Théorie de la complexité ___________________________________________________ 6 1.3 Classes de complexité ______________________________________________________ 9 1.4 NP-Complet _____________________________________________________________ 14 Théorie des jeux ______________________________________ 19 2.1 Introduction ____________________________________________________________ 19 2.2 Formalisation d’un jeu ____________________________________________________ 19 2.3 Catégories des jeux _______________________________________________________ 19 2.4 Elimination des stratégies dominées _________________________________________ 22 2.5 Equilibre de Nash ________________________________________________________ 23 2.6 Critère de Pareto_________________________________________________________ 25 2.7 La guerre des sexes _______________________________________________________ 26 Chapitre 2 : Les problèmes de la recherche opérationnelle_______________________________________________30 3 L’Optimisation multi-objectif _____________________________ 30 3.1 Introduction ____________________________________________________________ 30 3.2 Exemple ________________________________________________________________ 33 2 3.3 4 5 6 La différence entre l’optimisation multi-objectif et mono-objectif _________________ 33 Problème de tournées de véhicules _________________________ 35 4.1 Introduction ____________________________________________________________ 35 4.2 Généralités _____________________________________________________________ 35 4.3 Les méthodes de résolution du VRP _________________________________________ 39 Problème de voyageur de commerce ________________________ 47 5.1 Introduction ____________________________________________________________ 47 5.2 Formalisation ___________________________________________________________ 47 5.3 Domaines d’application ___________________________________________________ 48 5.4 Méthodes de résolution ___________________________________________________ 49 5.5 Complexité _____________________________________________________________ 52 Problème de transport avec coût fixe ________________________ 53 6.1 Introduction ____________________________________________________________ 53 6.2 Le problème de transport avec coût fixe ______________________________________ 53 6.3 Un aperçu de certaines des solutions développées par les chercheurs pour résoudre le FCTP 56 7 Problème de planification JSP (Job- shop scheduling problem) _____ 60 7.1 Problème d’ordonnancement ______________________________________________ 60 7.2 Job shop scheduling ______________________________________________________ 65 Chapitre 3 : Les méthodes de résolution_____________________ 74 8 9 Les méthodes exactes _________________________________ 74 8.1 La programmation dynamique ______________________________________________ 74 8.2 Branch & Bound _________________________________________________________ 88 Les méthodes approchées_____________________________ 104 9.1 Chaines de Markov ______________________________________________________ 104 9.2 La recherche locale ______________________________________________________ 110 9.3 Algorithme de Colonies de Fourmis _________________________________________ 117 9.4 Les réseaux de neurones _________________________________________________ 125 9.5 Les algorithmes génétiques _______________________________________________ 137 9.6 L’optimisation par essaims de particules_____________________________________ 142 9.7 Système immunitaire artificiel _____________________________________________ 150 9.8 La recherche tabous _____________________________________________________ 154 3 Chapitre4 : Les solveurs d'optimisation________________164 10.1 Introduction ___________________________________________________________ 164 10.2 Définition d’un solveur de programmation mathématique ______________________ 164 10.3 Les différents types des solveurs d’optimisation ______________________________ 165 10.4 Des solveurs d’optimisation _______________________________________________ 166 10.5 Comparaison des solveurs Inconvénients des solveurs d’optimisation _____________ 169 10.6 Quelques exemples d’application __________________________________________ 170 Conclusion__________________________________________________179 Bibliographie/ Webographie________________________________179 4 Introduction générale Prendre une décision nécessite généralement de considérer un nombre potentiellement important d’alternatives, chacune devant être évaluée selon un ou plusieurs critères, afin de déterminer laquelle ou lesquelles sont « les meilleures ». C’est pour aider le décideur dans ces choix parfois complexes qu’est apparue la Recherche Opérationnelle. La Recherche Opérationnelle (RO) peut être définie comme la discipline qui utilise des modèles mathématiques, statistiques et des algorithmes pour modeler et résoudre des problèmes relativement complexes, en déterminant la meilleure solution (optimale) et en améliorant la prise de décisions. Dès le XVIIe siècle, La RO a commencé de manière systématique, des mathématiciens comme Christiaan Huygens ou Blaise Pascal (problème des partis) tentent de résoudre des problèmes de décision dans l'incertain avec l'espérance mathématique. Au début du XXe siècle, l'étude de la gestion de stock peut être considérée comme étant à l'origine de la recherche opérationnelle moderne avec la formule du lot économique (dite formule de Wilson) proposée par Harris en 1913. Mais ce n'est qu'avec la Seconde Guerre mondiale que la RO est apparue pour résoudre certains problèmes tels que le problème de positionnement de radars de surveillance, le problème de sac à dos et le problème d’organisation des convois d'approvisionnement. Le livre est réparti en quatre chapitres. Le premier chapitre expose quelques théories utilisées en recherche opérationnelle comme la NP-complétude et la théorie des jeux. Le deuxième chapitre est consacré à étudier quelques problèmes classiques de la recherche opérationnelle tels que le problème du voyageur de commerce (TSP), le problème de tournées de véhicules (VRP) …etc. Le troisième chapitre se concentre sur les méthodes de résolution des problèmes de la recherche opérationnelle, ces méthodes peuvent être exactes (Ex : Branch & Bound) ou approchées (Heuristiques et métaheuristiques). Le quatrième chapitre présente quelques logiciels utilisés dans la RO, ces logiciels sont appelés les solveurs d’optimisation. On clôture ce travail par une conclusion, qui présente une synthèse des travaux réalisés et une webographie. 5 Chapitre 1 Les théories utilisées en recherche opérationnelle 1 NP-Complétude 1.1 Introduction Pour résoudre n’importe quel problème on ’est toujours besoin d’un plan qui contient des étapes successives liés logiquement entre eux. Et cela se qu’on appelle un ALGORITHME. Et D’après la structure et la nature de cet algorithme on peut déterminer le dégrée de difficultés d’un problème donné. Nous avons écrit des algorithmes efficaces pour résoudre des problèmes complexes, comme le plus court chemin, le graphe d’Euler, l’arbre couvrant minimum, etc. Ce sont tous des exemples de réussite des concepteurs d’algorithmes. Dans cet article, des histoires d’échec de l’informatique sont discutées. QST : Est-ce que Tous les problèmes de calcul peuvent-ils être résolus par un ordinateur ? 1.2 Théorie de la complexité 1.2.1 Définition La théorie de la complexité est le domaine des mathématiques, et plus précisément de l'informatique théorique, qui étudie formellement d'abord le temps de calcul, mais aussi l'espace mémoire (et plus marginalement la taille d'un circuit, le nombre de processeurs, …) requis par un algorithme pour résoudre un problème algorithmique. Il s'agit donc d'étudier la difficulté intrinsèque des problèmes, de les organiser par classes de complexité et d'étudier les relations entre les classes de complexité. 6 La théorie de la complexité étudie principalement (mais pas uniquement) les problèmes de décision. Exemple des problèmes algorithmiques : Problème du voyageur de commerce : -La donnée du problème est un ensemble de villes et de distances séparant ces villes. -L'objectif du problème est de trouver un plus court-circuit qui passe une et une seule fois par toutes les villes. -Il existe un problème de décision associé : étant donné un ensemble de villes, les distances entre villes et un entier k, déterminer s'il existe un circuit qui passe une et une seule fois par toutes les villes de longueur inférieure à k. Ainsi on distingue deux types de problèmes : 1. Problèmes de décision : Les problèmes de décision posent une question dont la réponse est oui ou non, dans le cas du problème du voyageur de commerce : existe-il oui ou non un circuit de longueur inférieure à k ? 2. Problèmes de recherche : Les problèmes de recherche d'une solution comportent une question ou plutôt une injonction de la forme « renvoyer un élément tel que… » dont la réponse consiste à fournir un tel élément ; dans le cas du problème du voyageur de commerce, exhiber un circuit de longueur minimale. Il s'agit donc d'un problème fonctionnel, et il sera donc catégorisé dans une classe fonctionnelle, par exemple FP si la solution est calculée en temps polynomial. 1.2.2 Complexité d'un problème algorithmique La théorie de la complexité vise à savoir si la réponse à un problème peut être donnée très efficacement ou au contraire être inatteignable en pratique, avec des niveaux intermédiaires de difficulté entre les deux extrêmes, pour cela, elle se fonde sur une estimation — théorique — des temps de calcul et des besoins en mémoire informatique. Dans le but de mieux comprendre comment les problèmes se placent les uns par rapport aux autres, la théorie de la complexité établit des hiérarchies de difficulté entre les problèmes algorithmiques, dont les niveaux sont appelés des « classes de complexité » qu’on va aborder suivant. Ces hiérarchies comportent des ramifications, suivant que l'on considère des calculs déterministes— l'état suivant du calcul est « déterminé » par l'état courant — ou non déterministes. 1.2.3 Modèles de calcul L'analyse de la complexité est étroitement associée à un modèle de calcul. L'un des modèles de calcul les plus utilisés, car il permet de mesurer le temps de calcul et la mémoire utilisée, est celui de la machine de Turing proposé par Alan Turing en 1936. 7 Un calcul est constitué d'étapes élémentaires, à chaque étape, la machine exécute une action élémentaire (changer d'état interne et déplacer la tête de lecture) en fonction de sa configuration courante (état interne et du symbole lu par la tête de lecture). Voici quelques modèles de calcul permettent d'étudier la complexité existante : • Machines de Turing non-déterministes (il peut y avoir plusieurs choix possibles d'actions • • • • • • • • • • à effectuer dans une configuration donnée). Machines de Turing alternantes . Machines de Turing probabilistes . La machine RAM (Random Access Machine). Les circuits booléens et les programmes straight-line. Les fonctions récursives, dues à Kleene . Le lambda-calcul . Les automates cellulaires . La logique linéaire . Les Peebles games. … ➢ Machine de Turing En informatique théorique, une machine de Turing est un modèle abstrait du fonctionnement des appareils mécaniques de calcul, tel un ordinateur. Ce modèle a été imaginé par Alan Turing en 1936, en vue de donner une définition précise au concept d’algorithme ou de « procédure mécanique ». Il est toujours largement utilisé en informatique théorique, en particulier dans les domaines de la complexité algorithmique et de la calculabilité. À l'origine, le concept de machine de Turing, inventé avant l'ordinateur, était censé représenter une personne virtuelle exécutant une procédure bien définie, en changeant le contenu des cases d'un ruban infini, en choisissant ce contenu parmi un ensemble fini de symboles. D'autre part, à chaque étape de la procédure, la personne doit se placer dans un état particulier parmi un ensemble fini d'états. La procédure est formulée en termes d'étapes élémentaires du type : « si vous êtes dans l'état 42 et que le symbole contenu sur la case que vous regardez est « 0 », alors remplacer ce symbole par un « 1 », passer dans l'état 17, et regarder maintenant la case adjacente à droite ». ?? ➢ La différence entre la machine de Turing « déterministe et non déterministe » La machine est dite déterministe s’il n’y a qu’une seule action possible à chaque étape. Il est dit non déterministe s’il y a un nombre fini d’actions possibles à chaque étape. Aussi Une machine de Turing déterministe peut être décrite comme une machine de Turing non déterministe dont la relation de transition est fonctionnelle. 8 La différence est qu'étant donnée une entrée, une machine déterministe n'a qu'une seule suite de configurations possible. 1.3 Classes de complexité 1.3.1 Définition En informatique théorique, et plus précisément en théorie de la complexité, une classe de complexité est un ensemble de problèmes algorithmiques dont la résolution nécessite la même quantité d'une certaine ressource. une classe est souvent définie comme l'ensemble de tous les problèmes qui peuvent être résolus sur un modèle de calcul M, utilisant une quantité O(f(n)) de ressources du type R, où n, est la taille de l'entrée. Une classe de complexité regroupe les problèmes de même complexité, souvent à une réduction polynomiale près. Les classes usuelles sont définies en utilisant les machines de Turing comme modèles de calcul et les ressources sont le temps et l'espace. 1.3.2 Les classes usuelles Les classes les plus usuelles sont celles définies sur des MACHINE DE TURING, avec des contraintes de TEMPS DE CALCUL ou d’ESPACES. On peut par exemple citer les classes P, NP et NP-HARD. 1- Classe P P : La classe des problèmes décidés en temps polynomial par une machine déterministe. Ces problèmes sont souvent considérés comme ceux pour lesquels il existe un algorithme efficace, faisables et faciles à résoudre (dans le sens où on peut le faire relativement rapidement). on dit qu’un problème est dans P si : • • il est soluble en temps polynomial on peut vérifier sa solution en temps polynomial En générale la classe P est formé des problèmes de décision qui peuvent être résolues par un algorithme polynomial Exemples de problèmes P : -Problème de "être premier" qui à tout entier naturel associe oui s’il est premier, non sinon. -Problème de "Etre pair" est P QST : c’est quoi un Temps polynomial ? Temps polynomial : on dit qu’un algorithme est soluble en temps polynomiale si le nombre des étapes nécessaires pour compléter l’algorithme pour une entré donné est O(nk) pour « k » appartient à N+ où « n » est la complexité du problème 9 -Pour mieux comprendre cette définition on cite l’exemple d’algorithme d’affichage suivant : Le tableau suivant présente le nombre des étapes (le temps) d’exécution des opérations dans chaque ligne On prend l’exemple de la ligne numéro 2 : On a int i =1 ; une opération qui va être exécutée une seule fois i<=n ; une opération qui va être exécutée 3*(n+1) fois i++ ; une opération qui va être exécutée 3*n fois Alors : int i =1 => 1 opération i<=n => 3*(n+1) opération i++ =>3*n opération En total pour la ligne numéro 2 on a 1+3*(n+1) +3*n opérations ce qui nous donne le temps nécessaire pour exécuter ces opérations dans cette ligne « unit time » = 6*n+4. En ajoutant tous les « unit time » de tous les lignes on obtient le T le temps total d’exécution de l’algorithme qui vaut dans ce cas T= 9*n2 +11*n +5 En ignorant +11*n +5 et 9 on obtient le temps de complexité de cet algorithme qui vaut O(n2). Puisque le temps de complexité de cet algorithme s’écrit sous la forme O(nk) alors on dit que cet algorithme s’exécute dans le temps polynomial. En vérité O(nk) « le temps polynomial » est une des fonctions de Big-O !!! 10 (n = size of input, c = some constant) Voici quelques fonctions de Big-O : • • • • • • • • O(1) - constant time O(log(n)) - logarithmic time O((log(n))c) - polylogarithmic time O(n) - linear time O(n2) - quadratique time O(nc) - polynomial time O(cn) - exponential time O(n!) - factorial time Voici le graphe modèle représentant la complexité Big-O de certaines fonctions 2- Classe NP NP : est une classe très importante de la théorie de la complexité. L'abréviation NP signifie « non déterministe polynomial ». Un problème de décision est dans NP s'il est décidé par une machine de Turing non déterministe en temps polynomial par rapport à la taille de l'entrée. Intuitivement, cela revient à dire qu'on peut vérifier « rapidement » si une solution candidate est bien solution, on dit qu’un problème est dans NP si : • • Il n’est pas soluble en temps polynomial (par exemple soit soluble en temps exponentiel) Si on peut vérifier sa solution en temps polynomial En général la classe NP est formé des problèmes de décision qui peuvent être résolues par un algorithme polynomial non déterministe. 11 Exemples de problèmes NP • Problème des puzzles -Supposons que j’ai prétendu d’avoir résolue un puzzle, il vous sera très facile de vérifier si je dis la vérité, tous ce que vous auriez à faire est de parcourir chaque pièce de puzzle est de vérifier s’il est correctement connecté à ses voisins Mais si je vous donne une boite pleine de pièces de puzzles et vous a ensuite demander s’il est possible d’utiliser toutes les pièces pour créer un puzzle complet -Pour dire qu’il n’est pas résoluble, vous pouvez essayer toutes les possibilités et de dire que si aucune configuration ne nous donne une image complète, voir la figure ci-dessous : Ce programme prendra énormément de temps qui va être bien sûr strictement supérieur au temps polynomiale presque O(kn ,n!) Alors ce problème de puzzle est vérifiable en temps polynomiale n’est pas soluble dans ce temps Il y on a plusieurs autres exemples des problèmes de cette classe comme : • Problème du sac à dos : Il modélise une situation analogue au remplissage d’un sac è dos, ne pouvant supporter plus d'un certain poids, avec tout ou partie d'un ensemble donné d'objets ayant chacun un poids et une valeur. Les objets mis dans le sac à dos doivent maximiser la valeur totale, sans dépasser le poids maximum • Coloration de graphe : consiste à attribuer une couleur à chacun de ses sommets de manière que deux sommets reliés par une arête soient de couleur différente. On cherche souvent à utiliser le nombre minimal de couleurs 12 3- Classe NP-hard NP-Hard : Un problème est dans NP-hard si tous les problèmes de NP sont réductibles en temps polynomiale même s’il n’est pas dans NP QST : Réductibles ? Pour qu’on puisse comprendre la définition du classe NP-HARD on doit plutôt comprend la notion de réductibilité Supposons qu’on a deux problèmes P1 et P2 : Supposons qu’il existe un algorithme pour résoudre P2 mais pas pour P1, Si on peut résoudre le problème P1 en utilisant l’algorithme de P2 donc on n’a pas besoin de trouver un algorithme pour résoudre P1 Dans ce cas on dit que P1 est réductible à P2 (on écrit P1 ≤ P2) « comme nous pouvant résoudre P1 avec l’aide de P2 » D’une manière générale : Soit deux problèmes A et B On dit que A est réductible à B ou (A ≤ B) Il existe une fonction f : β*->α* tel que -pour tout x ∈ A, x∈ β* f(x) ∈ B Si f s’exécute en temps polynomiale dans ce cas on dit que A est réductible en temps polynomiale à B on note (A ≤p B) Puisqu’on a défini la notion de la réduction polynomiale on retourne maintenant à la définition de NP-hard Soit la figure ci-dessous 13 Supposons que la classe NP ne contient que les problèmes (A, B, C, D), soit le problème X Si A ≤p X et A ≤p X et A ≤p X et A ≤p X => X∈ NP-hard Exemples de problèmes NP-hard : • Halting Problem: Déterminer pour un algorithme déterministe arbitraire A et une entrée I si l'algorithme A avec l'entrée I se termine un jour (ou entre dans une boucle infinie). Ce problème est dans NP-hard, mais n’est pas dans NP. Hatling problem est indécidable, il n'existe donc aucun algorithme pour résoudre ce problème => alors il n’est pas dans NP. Construisons un algorithme A dont l'entrée est une formule prépositionnelle X. Supposons que X a « n » variables. - L'algorithme A essayé toutes les 2n affectations de vérité possibles et vérifie si X est satisfiable. - S'il est satisfait alors A s'arrête. - Si X n'est pas satisfiable, alors A entre dans une boucle infinie. - Donc A s'arrête sur l'entrée si X est satisfiable. - Si nous avions un algorithme en temps polynomial pour le problème d'arrêt, alors nous pourrions résoudre le problème de satisfiabilité en temps polynomial en utilisant A et X en entrée de l'algorithme pour le problème d'arrêt. - Le problème d'arrêt est donc un problème NP-difficile qui n'est pas dans NP. 1.4 NP-Complet 1.4.1 Définition Un problème est NP-complet lorsqu'il peut être résolu par une classe restreinte d’algorithmes de recherche de force brute et qu'il peut être utilisé pour simuler tout autre problème avec un algorithme similaire. Plus précisément, chaque entrée au problème doit être associé à un ensemble de solutions de longueur polynomiale, dont la validité peut être testée rapidement (en polynôme time, par exemple) que la sortie pour toute entrée est « oui » si la solution set est non vide et "non" s'il est vide. La classe de complexité des problèmes de cette forme est appelée NP, abréviation de " temps polynomial non déterministe ". On dit qu'un problème est NP-difficile si tout en NP peut être transformé en temps polynomial en un problème, et un problème est NP-complet s'il est à la fois dans NP et NPdifficile. Les problèmes NP-complets représentent les problèmes les plus difficiles en NP. Si tout problème NP-complet a un algorithme polynomial, tous les problèmes de NP le sont. L'ensemble des problèmes NP-complets est souvent désigné par NP-C ou NPC. 14 Bien qu'une solution à un problème NP-complet puisse être vérifiée "rapidement", il n'existe aucun moyen connu de trouver une solution rapidement. C'est-à- dire que le temps nécessaire pour résoudre le problème en utilisant n'importe quel algorithme couramment connu augmente rapidement avec la taille du problème. En conséquence, déterminer s’il est possible de résoudre rapidement ces problèmes, appelé problème P versus NP, est l’un des problèmes fondamentaux non résolus en informatique de nos jours. Tandis qu'une méthode permettant de calculer les solutions aux problèmes NP-complets reste rapidement à découvrir, les informaticiens et les programmeurs rencontrent encore fréquemment des problèmes NP-complets Les problèmes NP-complets sont souvent traités en utilisant des méthodes heuristiques et des algorithmes d'approximation 1.4.2 La relation entre les classes P et NP 1- Présentation informelle La Présentation par l'Institut Clay : Supposons que vous soyez chargé de loger un groupe de quatre cents étudiants. Le nombre de places est limité, seuls cent étudiants se verront attribuer une place dans la résidence universitaire. Pour compliquer les choses le doyen vous a fourni une liste de paires d'étudiants incompatibles, et demande que deux étudiants d'une même paire ne puissent jamais apparaître dans votre choix final. C'est un exemple de ce qu'un informaticien appelle un problème NP. En effet, il vous est facile de vérifier qu'une liste de cent étudiants fournis par un collègue est correcte, c'est-à-dire que les étudiants d'une même paire de la liste du doyen n'apparaissent jamais tous deux dans la liste de votre collègue. 15 Toutefois, produire une telle liste à partir de zéro paraît tellement difficile qu'elle en est même impraticable, car le nombre de façons de regrouper cent étudiants parmi quatre cents dépasse le nombre d'atomes de l'univers ! Pour cette raison, aucune civilisation du futur ne peut même espérer construire un super-ordinateur capable de résoudre ce problème par force brute, c'est-à-dire en testant toutes les combinaisons de cent étudiants. Peut-être que cette apparente difficulté ne fait que refléter le manque d'ingéniosité de nos programmeurs. Il s'avère que l'une des questions les plus importantes de la science informatique est de savoir s'il existe des problèmes dont la solution peut être vérifiée rapidement, mais qui requièrent un temps incroyablement long pour être résolus par un quelconque procédé. […] Stephen Cook et Leonid Levin ont formulé indépendamment le problème P (facile à trouver) vis-à-vis de NP (facile à vérifier) en 1971. 2- QST : est-ce-que P= NP ou P ! =NP ?? La question « P = NP ? » est l’un de sept problèmes sélectionnés par l’Institut Clay en l’an 2000 : comme pour les six autres, une somme d’un million de dollars attend celle, celui ou ceux qui le résoudront. Certains affirment que c’est le plus important des sept problèmes et donc la principale énigme des mathématiques d’aujourd’hui. Il semble aussi être le seul dont la résolution aurait des conséquences pratiques et sa portée philosophique est la plus grande : la question « P = NP ? » concerne la nature de la recherche de solution(s) dans un ensemble exponentiel de possibilités, ce qui est le problème même de la recherche scientifique. 3- Importance et implications de P = NP Un des aspects essentiels de ce problème provient du fait qu'il existe une classe de problèmes très importants dits « NP-complets » qui est la sous-classe de NP dont les problèmes sont au moins aussi durs que tous les problèmes de NP, autrement dit les problèmes les plus durs de NP. Ils sont importants à double titre : 16 D’une part, ils possèdent souvent une importance intrinsèque (de nombreux problèmes fondamentaux, à incidences pratiques, dans plusieurs domaines étant NP-complets) et, d'autre part, par définition de la NP-complétude, si on trouve une solution en temps polynomial à l'un de ces problèmes, alors cette solution peut être utilisée pour résoudre, en temps polynomial, tous les problèmes NP-complets, et plus généralement tous les problèmes NP. Le théorème de Cook montre que le problème SAT est NP-complet, ce résultat a ensuite été largement réutilisé pour établir une liste de problèmes NP-complets. Les problèmes NP-complets concernent un grand nombre de domaines différents : - La biologie, avec par exemple l'algorithme de détermination de la séquence d'ADN qui correspond le mieux à un ensemble de fragments, ou le calcul de solutions optimales en économie, ou dans les processus de fabrication ou de transport. Les problèmes NP-complets concernent un grand nombre de domaines différents : la biologie, avec par exemple l'algorithme de détermination de la séquence d'ADN qui correspond le mieux à un ensemble de fragments, ou le calcul de solutions optimales en économie, ou dans les processus de fabrication ou de transport. Trouver un algorithme qui résout un problème NP-complet, comme le problème du voyageur de commerce, en temps polynomial suffirait à démontrer que P = NP, ce serait alors toute une série de problèmes très importants qui se trouveraient résolus (et, dans un même temps, si le polynôme est de degré petit, les systèmes de cryptographie à clé publique seraient cassés). Même sans exhiber un algorithme, une preuve pourrait donner des indices précieux pour construire un tel algorithme, ou pour le moins en relancer sérieusement la recherche, car on le saurait alors possible avec certitude. En admettant que les degrés des polynômes impliqués soient accessibles, l'existence de cet algorithme pourrait remettre en question l'utilisation des systèmes de cryptographie à clé publique, qui servent notamment pour la sécurisation des transactions bancaires. La sécurité repose sur l'assertion que ce n'est pas possible en temps polynomial. 4- Implications de P ≠ NP S'il est démontré que P ≠ NP, il serait alors impossible de résoudre tous les cas des problèmes NP-complets dans un temps polynomial, et ces problèmes seraient alors hors de la classe des problèmes qui peuvent être traités — théoriquement — de manière efficace. Cela signifierait également qu'il est, fondamentalement, plus difficile de chercher la solution d'un problème que de vérifier qu'une réponse donnée a priori est effectivement une solution valable du problème. Mais cette situation n'aurait pas que des inconvénients. La cryptographie à clé publique et la sécurité bancaire seraient assurées, mais plus encore : il est démontré que si P ≠ NP, chaque problème NP (et non P) a alors une preuve à divulgation nulle de connaissance assurée et démontrée, ce qui rend de grands services en matière d'authentification. Une preuve de P ≠ NP serait également un approfondissement de la théorie de la complexité algorithmique : elle donnerait sans doute des réponses à la question de savoir « pourquoi » il est impossible de faire mieux que la force brute pour certains problèmes, et apporterait des pistes pour améliorer tout de même l'efficacité des algorithmes résolvant les problèmes NPcomplets (sans les rendre polynomiaux pour autant, bien entendu) et pour démontrer plus formellement la sécurité des systèmes cryptographiques 17 5- Cook-levin théorème Ce théorème présente une idée qui montre qu’un problème appeler SAT est le problème le plus difficile dans NP. D’autre mots nous pouvons utiliser un solveur pour SAT pour résoudre toute autres dans NP SAT encapsule tous les problèmes à l’intérieur de NP signifiant que n’importe quel problème dans NP peut être transformé en une version SAT avec ceci nous pourrions prouver que la résolution de SAT est facile cela signifierait que tous les problèmes NP sont facile 18 2 Théorie des jeux 2.1 Introduction La théorie des jeux permet une analyse formelle des problèmes posés par l’interaction stratégique d’un groupe d’agents rationnels poursuivant des buts qui leur sont propres 2.2 Formalisation d’un jeu 2.2.1 Qu’est-ce qu’un jeu ? . Qui ? (Joueurs) . Quoi ? (Les actions disponibles) . Quand ? (Déroulement du jeu) . Combien ? Quelle est la valeur pour chaque joueur des différents résultats possibles du jeu ? 2.2.2 Utilité Une hypothèse de base de la théorie des jeux est de considérer que les agents sont rationnels, c’est-à-dire qu’ils tentent d’arriver à la situation la meilleure pour eux. 2.3 Catégories des jeux 2.3.1 Jeux coopératifs Exemple : Vendeur et acheteur négocient le prix d’un bien ou d’un service 2.3.2 Jeux non-coopératifs Les éléments qui caractérisent les jeux non-coopératifs sont les suivants ➢ ➢ Un petit nombre d’agents (les joueurs) qui interagissent. Les décisions de chaque agent influencent les gains des autres. 19 ➢ La prise en compte de l’information dont chaque agent dispose au moment de prendre sa décision. ➢ La prise en compte du déroulement des décisions dans le temps (décisions simultanées ou séquentielles) Décisions simultanées matrice de jeu (jeux en forme normale). Décisions séquentielles arbre de jeu (jeux en forme extensive). Exemple : Deux entreprises concurrentes supposent que le comportement des autres déterminants, séparément le pricing et la stratégie marketing pour gagner des parts de marché. 2.3.3 Jeux sous formes stratégique Définis par : . Un ensemble N = {1,...,n} de joueurs. . Pour chaque joueur i un ensemble d’actions Si = {s1,...,sni}. . Pour chaque joueur i une fonction d’évaluation µi : S1 ×...× Sn →IR, qui à chaque ensemble d’actions associe les gains du joueur i. 2.3.4 Le dilemme des prisonniers Enoncé Deux individus (David et Julia) sont arrêtés par la police suite à un vol à main armée et ils sont enfermées dans deux cellules séparées sans possibilité de communiquer. Chaque individu est interrogé séparément et il a le choix de nier d’avoir commis le vol ou dénoncer son complice comme seul responsable. Gains des individus (connus par eux) ≡ années de prisons (relation négative) : Si Julia et David dénoncent tous les deux, ils sont condamnés à 8 ans de prison. *S’ils nient tous les deux, ils auront 1 année de prison du fait de l’absence de preuves accablantes. *Si un seul dénonce, il est relâché en récompense de sa coopération et l’autre est condamné à 10 ans de prison. 2.3.5 Jeux sous formes stratégique 20 2.3.6 Jeux en forme extensive Un jeu sous forme extensive est défini par : . Un ensemble N = {1,...,n} de joueurs . Un arbre fini composé de : . Un ensemble des noeuds {A,B,C,...} représentant les coups. . Un ensemble des branches {x,y,z,...} représentant les alternatives à chaque coup . Une fonction de nommage qui indique à chaque nœud quel est le joueur qui doit jouer . Une fonction de valuation qui associe à chaque nœud terminal un vecteur de nombres représentant les gains de chacun des joueurs . Une partition des nœuds en un ensemble d’ensembles d’informations représentant les croyances (imparfaites) des joueurs. 2.3.7 Jeux sous forme extensive - Ensemble d’informations Information Imparfaite Si à un moment donné, un joueur ne peut distinguer deux nœuds, nous dirons que ces deux nœuds appartiennent au même ensemble d’information. Ensemble d’Informations Définition A chaque étape d’un jeu en forme extensive, on appelle un ensemble d’information (hi) la collection de tous les nœuds que le joueur qui doit jouer à cette étape ( i ) ne peut distinguer. On note par Hi l’ensemble des ensembles d’information du joueur i Représentation Un ensemble d’information => une courbe en pointillée reliant les nœuds qui appartiennent à cet ensemble 2.3.8 Relation entre forme stratégique et forme extensive . A chaque jeu sous forme extensive correspond un jeu sous forme stratégique dans lequel les joueurs choisissent simultanément les stratégies qu’ils mettront en œuvre. . En revanche, un jeu sous forme stratégique peut correspondre à plusieurs jeux sous forme extensive différents. 21 2.4 Elimination des stratégies dominées 2.4.1 Stratégie pure Définition Une stratégie pure d’un joueur est un plan d’action qui prescrit une action de ce joueur pour chaque fois qu’il est susceptible de jouer 2.4.2 Stratégie mixte Définition Une stratégie mixte du joueur i est une distribution de probabilités Pi définie sur l’ensemble des stratégies pures du joueur i. On note Σi l’ensemble des stratégies mixtes du joueur i et par σi une stratégie mixte de ce joueur. Jouer une stratégie mixte, c’est : • Tirer au hasard une des stratégies pures en respectant la distribution de probabilités spécifiée par la stratégie mixte. • Comme si le joueur jetait un dé au début du jeu pour choisir ses actions effectives. • Ce dé étant pipé de manière à respecter les probabilités de la stratégie mixte utilisée. 2.4.3 Stratégie dominée Une stratégie (Si) est (strictement) dominée pour le joueur i s’il existe une stratégie (Si’) telle que pour tous les profils S-i : µi(Si’; S-i) > µi(Si; S-i) 2.4.4 Elimination des stratégies dominées 22 Un jeu est dit résoluble par élimination itérative des stratégies dominées, si on obtient un unique profil en éliminant successivement des stratégies (strictement) dominées. . Les profils obtenus après élimination itérative des stratégies (strictement) dominées (EISD) ne dépendent pas de l’ordre choisi pour l’élimination des stratégies. . Problème majeur de cette méthode : tous les jeux ne sont pas résolubles par (EISD). 2.5 Equilibre de Nash Définition La notion d’équilibre de Nash est une situation telle qu’aucun joueur n’a intérêt à dévier (seul) de la situation obtenue 23 Propriétés . Un profil (unique) obtenu par élimination itérative de stratégies (strictement) dominées (EISD) est un équilibre de Nash (et c’est le seul équilibre du jeu). . Un jeu (en stratégies pures) peut avoir plusieurs équilibres de Nash, mais il peut aussi n’en avoir aucun. 2.5.1 Equilibre de stratégie mixte L’expectation du joueur 2 de jouer A = 4*p + 0*(1-p)= 4p L’expectation du joueur 2 de jouer B = 0*p + 2*(1-p)= 2(1-p) Pour rendre le joueur 2 indifférent du choix entre A et B : 4p=2(1-p) => p=1/3 La prévision du joueur 1 de jouer A = 2*q + 0*(1-q)= 2q La prévision du joueur 1 de jouer B = 0*q + 4*(1-q)= 4(1-q) Pour rendre le joueur 2 indifférent du choix entre A et B : 2q=4(1-q) => q=2/3 24 2.6 Critère de Pareto 2.6.1 Définition Critère de Pareto ou Optimum de Pareto est une combinaison de stratégies telle qu’il n’est pas possible d’en trouver une autre qui donne plus de bien être (gain) à tous les joueurs (agents). Autrement dit : On ne peut pas améliorer la situation d’un agent sans diminuer le bien être (gain) d’un autre agent. 2.6.2 Comment on cherche les optimums de Pareto Pour rechercher les optimums de Pareto d’un jeu on compare les gains de chaque combinaison de jeu avec toutes les autres combinaisons. Si on trouve une combinaison pour laquelle l’un ou les deux joueurs gagnent sans que l’un d’eux perdre, alors ce n’est pas un optimum de Pareto. Exemple Les optimums de Pareto sont les combinaisons suivantes : (E,B) // (F,B) // (F,D) // (G,B) // (G,C) Dans le dilemme des prisonniers on a (Dénoncer,Dénoncer) est un équilibre de Nash ,mais, n’est pas un optimum de Pareto. Propriété : Un équilibre de Nash n’est pas nécessairement un optimum de Pareto. 25 2.6.3 Niveau de sécurité On définit le niveau de sécurité d’une stratégie Si pour le joueur i comme le gain minimum que peut apporter cette stratégie quel que soit le choix des autres joueurs. min s−i µi(si, s−i) On définit le niveau de sécurité d’un joueur i comme le niveau de sécurité maximal des stratégies de i. 2.7 La guerre des sexes Paul (joueur 1) et Jacqueline (joueur 2) doivent décider comment organiser leur soirée. Ils ont le choix entre : Aller à un match de Football (F), aller à l’opéra (O). Pour les deux, ce qui compte avant tout c’est d’être ensemble. Mais : Jacqueline a une préférence pour l’opéra, Paul pour le Football. Si chacun sort seul, alors chacun reçoit un gain nul. Si le couple sort ensemble, celui qui se rend au concert de son premier choix reçoit 2 unités de gain, cependant que l’autre ne reçoit qu’une seule unité de gain. 2.7.1 La forme normale de ce jeu Sur l’exemple précédent le niveau de sécurité des deux joueurs est 0. . Supposons que le joueur 1 joue aléatoirement F et O avec une probabilité de ½ µ1(< (F, 1/2),(O,1/2) >, F) = 1/2 ∗ 2 + 1/2 ∗ 0 = 1 µ1(< (F, 1/2), (O, 1/2) >,O) = 1/2 ∗ 0 + 1/2 ∗ 1 = ½ Avec cette stratégie le niveau de sécurité du joueur 1 est ½ 26 Soit x la probabilité avec laquelle le joueur 1 joue F, pour quel x maximise-t-il son niveau de sécurité ? µ1(< (F, x),(O,1-x) >, F) = x ∗ 2 + (1-x) ∗ 0 = 2x µ1(< (F, x), (O, 1-x) >,O) = x ∗ 0 + (1-x) ∗ 1 = 1-x max x min(2x , 1 - x) = 1/3 . Le niveau de sécurité du joueur 1 est donc de ⅔. 2.7.2 Représentation graphique Soit y la probabilité avec laquelle le joueur 2 joue F, quelle est la meilleure réponse du joueur 1? 27 µ1(F,< (F, y),(O,1-y) >) = y ∗ 2 + (1-y) ∗ 0 = 2y µ1(O,< (F, y), (O, 1-y) >) = y ∗ 0 + (1-y) ∗ 1 = 1-y Donc: . Si 2y > 1 - y (y > 1/3), la meilleure réponse du joueur 1 est de jouer F . Si 2y < 1 - y (y < 1/3), la meilleure réponse du joueur 1 est de jouer O . Si 2y = 1 - y (y = 1/3), le joueur 1 est indifférent entre F et O, il peut donc jouer l’un ou l’autre, ou n’importe quelle combinaison des deux Soit x la probabilité avec laquelle le joueur 1 joue f, quelle est la meilleure réponse du joueur 2 ? µ2(< (F, x),(O,1-x) >, F) = x ∗ 1 + (1-x) ∗ 0 = x µ2(< (F, x), (O, 1-x) >,O) = x ∗ 0 + (1-x) ∗ 2 = 2(1-x) Si x > 2(1 - x) (x > 2/3), la meilleure réponse du joueur 2 est de jouer f Si x < 2(1 - x) (x < 2/3), la meilleure réponse du joueur 2 est de jouer o Si x = 2(1 - x) (x = 2/3), le joueur 2 est indifférent entre f et o, il peut donc jouer l’une ou l’autre, ou n’importe quelle combinaison des deux. Les gains des deux joueurs avec un profil en stratégie mixte σ sont donc : µ1 (σ) = x*y*2+x*(1-y)*0+(1-x)*y*0+(1-x)*(1-y)*1 =3xy-x-y+1 µ2(σ) = x*y*1+x*(1-y)*0+(1-x)*y*0+(1-x)*(1-y)*2 =3xy-2x-2y+2 Les gains des deux joueurs avec un profil de stratégie mixte σ sont : µ1(σ) = 3xy-x-y+1 µ2(σ) = 3xy-2x-2y+2 28 σ est un équilibre de Nash si et seulement si pour tout i et tout si ∈ Si : µi(σ i , σ-i ) ≥ µi(si, σ-i) Le profil σ*=(<(f,2/3),(o,1/3)> , <(f,1/3),(o,2/3)>) est donc un équilibre de Nash en stratégie mixte. ±Les gains des deux joueurs avec σ* sont : µ1(σ*) = 3*1/3*2/3-1/3-2/3+1 = 2/3 µ2(σ*) = 3*2/3*1/3-2*2/3-2*1/3+2 = 2/3 La fonction de meilleure réponse du joueur 1 est 1 R1 = si y>1/3 [0,1] si y=1/3 0 si y<1/3 La fonction de meilleure réponse du joueur 2 est : 1 si x>2/3 R2 = [0,1] si x=2/3 0 si x<2/3 29 Chapitre 2 Les problèmes de la recherche opérationnelle 3 L’Optimisation multi-objectif 3.1 Introduction 3.1.1 Définition L'optimisation multi-objectif appelée aussi Programmation multi-objective ou optimisation multicritère est une branche de l'optimisation mathématique traitant spécifiquement des problèmes d'optimisation ayant plusieurs fonctions objectives. 3.1.2 Formulation mathématique d’un PMO Généralement, un problème d’optimisation multi-objectif est formulé comme suit : Avec n ≥ 2 le nombre de fonctions objectif, x = (x1, x2, . . ., xr) un vecteur de variables de décision ou solution, D est l’ensemble des solutions réalisables et F(x) est le vecteur objectif. L’ensemble O = F(D) correspond aux images des solutions réalisables dans l’espace des objectifs et y = (y1, y2, . . ., yn), avec yi = fi(x), est le point de l’espace des objectifs correspondant à la solution x. 30 L'espace des critères est l'image de l'espace réalisable notée O = F(D). Les éléments de F sont appelés (fonctions) vecteurs objectifs ou vecteurs de critère et désignés par F(x) où 𝑇 f = (f1 , f2 , . . ., f𝑘 ) et fi = fi (x) pour tout i= 1,...,k sont des valeurs de vecteurs de critère. 3.1.3 Principe Un problème d'optimisation multi-objectif, consiste à optimiser k fonctions objectif simultanément (Maximiser k fonctions, Minimiser k fonctions, Maximiser et Minimiser k fonctions). La présence de multiples objectifs rend le problème d'optimisation intéressant à résoudre, car aucune solution ne peut être qualifiée comme une solution optimale aux objectifs contradictoires multiples. 3.1.4 Méthodes d’optimisation multi-objectif Principalement, Il existe deux catégories de méthodes d’optimisation multi-objectif, qui sont : o Méthodes exactes. o Méthodes heuristiques. 31 Un schéma explicatif des différentes méthodes d’optimisation multi-objectif : 3.1.5 Optimalité de Pareto Il s’agit d’une approche d’optimisation multi-objective qui définit l'efficacité comme l'impossibilité d'améliorer un objectif de la solution sans dégrader l'intérêt d'un autre objectif. Il utilise la notion de dominance pour comparer les solutions et leur affecter un score ou sélectionner des solutions Notion de la Dominance de Pareto : Pour un problème de minimisation, Une solution X domine, au sens de Pareto une solution Z si et seulement si : Dans le contexte de l’optimisation multi-objectif, on vise en général : ▪ À trouver l’ensemble des solutions Pareto optimales, c’est-à-dire celles qui couvrent tout le front de Pareto. ▪ À s’assurer que les solutions soient suffisamment différentes les unes des autres et qu’elles ne soient pas biaisées en favorisant un objectif particulier. 32 3.2 Exemple Si on suppose que : • La personne A a besoin de X1 ml d'eau • La personne B a besoin de X2 ml d'eau, ➔ Nous pouvons définir un vecteur X = {x1 ; x2} comme une variable de décision. Tel que x1 + x2 <= 100 et x >= 0 On peut définir deux fonctions objectives F1= f(x1) et F2= f(x2). Chaque fonction définissant la satisfaction de chaque personne après avoir bu de l'eau. ➔ Alors la fonction objective sera sous la forme F = {F1(x) ; F2(x) }. On peut représenter ce problème comme suit : 3.3 La différence entre l’optimisation multi-objectif et mono-objectif Contrairement à l'optimisation mono-objectif, la solution d'un problème multi-objectif n'est pas unique, en raison de la contradiction et de l’incompatibilité des fonctions objectifs. De ce fait il est impossible de trouver une seule solution qui serait optimale pour tous les objectifs simultanément, mais un ensemble de solutions non dominées, connues comme l'ensemble des solutions de meilleur compromis. Compromis signifie que l'on ne peut pas augmenter le niveau de satisfaction pour un objectif sans réduire cela pour un autre objectif. Pour des problèmes de programmation multi-objectifs le concept de 33 solutions non-dominées est utilisé. Une solution de compromis est choisie parmi l'ensemble des solutions non-dominées. 34 4 Problème de tournées de véhicules 4.1 Introduction Depuis la seconde moitié du 20e siècle, des experts en recherche opérationnelle se sont efforcés de résoudre les problèmes de transport routier qui se trouvent au cœur des problématiques de la logistique. Avant de parvenir au consommateur final, un produit parcourt, en général, des centaines voire des milliers de kilomètres par voie terrestre. Dans le monde industriel où le transport est critique, le problème de tournées de véhicules (VRP) a fait l'objet de recherches intensives depuis plus de 50 ans, liées à son importance dans le domaine de la logistique. 4.2 Généralités 4.2.1 Définition Le problème de tournées de véhicules (VRP) est un problème de recherche opérationnelle et d'optimisation combinatoire. Il appartient à la catégorie des problèmes de transport, tout comme le problème du voyageur de commerce (TSP). Ce problème est un problème NP-difficile qui a été présenté pour la première fois sous le nom de Truck Dispatching Problem par Dantzig et Ramser (1954) et a depuis fait l'objet de recherches intensives pour le modéliser et le résoudre. Dans sa version de base appelé VRP avec contraintes de capacité (en Anglais : Capacitated VRP) (CVRP), une flotte de véhicules à capacité limitée, placée dans un dépôt, doit assurer des tournées entre plusieurs sommets (villes ou clients) ayant demandé chacun une certaine quantité de produits. L'ensemble des sommets visités par un véhicule représente la tournée de celui-ci. Chaque sommet doit recevoir le service une et une seule fois et chaque tournée doit commencer et se terminer au dépôt. L'objectif du CVRP est de minimiser la somme des distances des tournées, tout en respectant la contrainte de capacité des véhicules : la quantité de produits livrées sur une tournée ne doit pas excéder la capacité du véhicule qui l'assure. 4.2.2 Formulation mathématique Les paramètres qui interviennent dans la formulation du problème sont : V= {v0,v1,v2,…,vn} : Ensemble de sommets, v0 représente le dépôt K= {1,2,…,m} : Ensemble de véhicules disponibles n= nombre de sommets 35 m= nombre de véhicules C= la capacité du véhicule qi= demande du sommet i (q0= 0) dij= la distance entre i et j yi = variable réelle, modélisant la quantité totale à livrer par le véhicule qui visite le client depuis le dépôt jusqu’à i inclus ➢ Les variables de décision ➢ Fonction objective →Minimiser la distance parcourue ➢ Les contraintes → Les contraintes qui assurent que chaque client est visité et est quitté une seule fois : 36 →La contrainte qui garantit la disponibilité du véhicule : →La contrainte qui sert à déduire yj de yi si une tournée livre le client i après le client j et elle permet également d’éviter les sous-tours →La contrainte qui permet de définir et de borner la variable yi telle que quel que soit le client i, yi doit au moins satisfaire la quantité demandée qi sans dépasser la capacité C du véhicule. → La contrainte qui assure que les variables sont binaires 4.2.3 Les variantes du VRP Le CVRP est une version simplifiée au regard de l’ensemble des problèmes de tournées de véhicules que l’on peut rencontrer dans la réalité. En effet, en fonction des contraintes à prendre en compte, plusieurs variantes du VRP ont été définies en littérature. Les variantes Les contraintes VRPTW (Vehicle Routing Problem with Time Windows) Chaque client doit fournir une limite de temps supérieure et inférieure entre lesquelles le service doit commencer VRPB (Vehicle Routing Problem with Backhauls) Un ensemble de clients à qui des produits doivent être livrés et un ensemble de fournisseurs dont les marchandises doivent être amenées au dépôt. 37 En outre, sur chaque tournée, toutes les livraisons doivent être effectuées avant que les marchandises puissent être ramassées pour éviter de réarranger les charges sur le véhicule DVRP (Dynamic Vehicle Routing Problem) L’apparition d'un nouveau client en cours de la journée. MDVRP (Multi-Depot Vehicle Routing Problem) Il y a plusieurs dépôts disponibles qui sont distribués géographiquement. Chaque véhicule part et revient vers son dépôt initial VRPPD (Vehicle Routing Problem with Pick-up and Delivery) Chaque client doit fournir deux positions géographiques différentes : la première indique le lieu de ramassage du produit et la seconde indique le lieu de livraison du produit. Ce type de problème introduit une contrainte de précédence : pour chaque tournée, l'opération de ramassage chez un client doit précéder l'opération de livraison VRPHF (Vehicle Routing Problem with Heterogeneous Fleet) Une flotte de véhicules de types différents. En fait, nous pouvons distinguer ces véhicules par leurs capacités, leurs vitesses ou leurs coûts de déplacement, etc. VRPSD (Vehicle Routing Problem with Split Delivery) Chaque client peut être visité plus d'une fois si cela est nécessaire. Autrement dit, la demande de client peut être divisée sur plusieurs tournées m-VRP (Vehicle Routing Problem with Limited Number of Vehicles) Un nombre limité de véhicules Le décideur doit changer la planification des véhicules en réponse aux nouvelles demandes qui arrivent au fil du temps. 4.2.4 L’utilité du VRP et ses applications Les principales motivations de l'étude du VRP sont d'une part la difficulté de sa résolution et d'autre part ses nombreuses applications pratiques en logistique. Ce deuxième point concerne les retombées économiques et environnementales liées à la minimisation des coûts des systèmes de transport. En effet et, selon Toth and Vigo [2001], les frais de transport représentent généralement entre 10% et 20% des prix finaux des marchandises sur le marché, et les procédures informatisées basées sur des techniques d'optimisation permettent de faire des économies de l'ordre de 5% à 20% sur ces coûts de transport. De plus, si on minimise le trajet parcouru, on minimise l’émission des gaz à effet de serre (ex : CO2), et donc on garantit la satisfaction des clients tout en protégeant l’environnement (Réchauffement climatique…). Secteur économique Applications Industrie automobile Distribution de pièces de rechange La livraison des produits Carburant, gaz naturel, béton Transport de nourriture Grands détaillants ou petits magasins 38 La livraison de nourriture aux particuliers Vente au détail Lait, aliments surgelés, plats préparés livrés à domicile La livraison d'appareils Médicaments aux pharmacies Santé Presse Des journaux et des magazines Secteur bancaire La livraison d'argent aux banques, perception d'argent des commerçants et courriers Secteur public Poubelles domestiques ; poubelles publiques, nettoyage des rues, sablage des routes en hiver Fabriquant Organisation des mouvements d'une flotte de robots de transport Industrie Approvisionnement en parties et marchandises parmi différents emplacements Agriculture Collecte d'animaux, lait, céréales, livraison de nourriture animale Industrie de transport Entreprises de collecte et de livraison 4.3 Les méthodes de résolution du VRP 4.3.1 Classification des méthodes Dans le cadre de la résolution du problème de tournées de véhicules, plusieurs méthodes ont été développées. Ces méthodes peuvent être classées en deux catégories : ➢ Les méthodes exactes Le principe de ces méthodes est de trouver la solution optimale en explorant l’ensemble des solutions possibles. L’algorithme de BRANCH & BOUND est parmi ces méthodes, il consiste à considérer l’ensemble des solutions possibles et en éliminer les mauvaises sans les évaluer. Mais, malgré l’évolution de ces méthodes, elles restent inappropriées aux problèmes d’optimisation puisqu’elles ne peuvent résoudre que des problèmes de petites instances. ➢ Les méthodes approchées Contrairement aux méthodes exactes, les méthodes approchées donnent des solutions acceptables dans un temps raisonnable, mais qui ne sont pas forcément des solutions optimales. Ces méthodes sont constituées des heuristiques et des métaheuristiques. 39 Les heuristiques sont des moyens de guider les choix qu’un algorithme doit faire pour réduire sa complexité. Parmi ces heuristiques on trouve : l’algorithme des savings [Clark et Wright, 1964] qui est considéré comme une méthode constructive, et l’algorithme de balayage de [Gillet et Miller, 1974] qui consiste à séparer le problème en deux phases, la partition et le parcours (algorithme à deux phases). Les métaheuristiques sont des algorithmes itératifs, inspirés de la nature et qui progressent vers l’extremum global d’une fonction objectif. Elles sont bien adaptées aux problèmes d’optimisation et donnent des solutions de qualité supérieure à celles des heuristiques. Les métaheuristiques peuvent être à solution unique comme la recherche tabous et le recuit simulé, ou à population de solutions comme les algorithmes génétiques et l’algorithme de colonies de fourmis -CLASSIFICATION DES METHODES DE RESOLUTION DU VRP- 4.3.2 Heuristique de Clarke & Wright ➢ Présentation de l’algorithme L’algorithme des "SAVINGS" de Clarke & Wright est sans aucun doute, une des heuristiques les plus connues pour le VRP. L'algorithme de Clarke & Wright est un algorithme d’échange dans le sens ou chaque étape une série de visites est échangée pour un meilleur ensemble de visites. 40 Le principe de cette méthode est de commencer par dédier une tournée à chaque client de façon de le relier à l’unique dépôt → Initialement, nous supposons que tous les deux clients i et j sont visités individuellement par deux véhicules. Les clients i et j sont desservis par deux tournées séparées La distance totale dans ce cas est : D1 = c0i + c01 + c0j + cj0 = 2(c0i + c0j ) → On fusionne les deux tournées en une seule si c’est possible, comme illustre la figure cidessous Les clients i et j sont desservis par une seule tournée La distance totale dans ce cas est : D2 = c0i + cij + cj0 En combinant les deux trajets, on obtient le "SAVING" Sij : Sij = D1-D2 = c0i+c0j-cij →Après avoir calculer les SAVINGS, on les classe dans l’ordre décroissant Il existe deux versions d’implémentation de l’algorithme de Clarke & Wright : la version séquentielle et la version parallèle. 41 ➢ La version séquentielle →Trouver la première liaison réalisable dans la liste, qui peut être utilisée pour étendre l’une des deux extrémités de la voie actuellement construite. →Si la route ne peut pas être étendue plus loin, mettre fin à la route. Choisissez la première liaison possible dans la liste pour commencer un nouvel itinéraire →Répéter ces 2 dernières étapes jusqu'à ce que plus aucune liaison ne puisse être choisie ➢ La version parallèle →Si la réalisation d’une liaison donnée en résulte une voie possible selon les contraintes du VRP, ajoutez cette liaison à la solution sinon, rejeter la liaison. →Essayez la liaison suivante dans la liste et répéter l'étape précédente jusqu'à ce que plus aucune liaison ne puisse être choisie. La distance totale après ces étapes vérifie la relation suivante : Z = 2 * ∑c0i – dts (*) Avec dts = distance totale sauvée ➢ Exemple illustratif ❖ Nous considérons un problème de CVRP avec cinq clients et un dépôt représenté par zéro. ❖ Les distances cij entre les différents clients d’une part, et entre le dépôt et les clients d’autre part sont données par la matrice (tableau1): ❖ Les demandes des clients sont données par le tableau suivant (tableau2) : 42 Tableau 1 ❖ Tableau 2 On suppose que la capacité maximale des véhicules est C = 100 Résolution : ✓ Étape 1 : On calcul les savings Sij en utilisant la formule suivante : Sij = coi+coj-cij Exemple : S12 = c01+c02-c12 = 28+31-21 = 38 Par la même démarche, on trouve la matrice des savings suivante : 43 ✓ Étape 2 : On trie les savings d’une manière décroissante, on trouve la liste des paires suivante : 1-5 1-2 2-4 4-5 2-5 1-4 3-5 1-3 3-4 2-3 En partant du haut de la liste, on procède comme suit : • Version séquentielle Les clients 1 et 5 sont considérés en premier. Ils peuvent être affectés à la même route puisque leur demande totale de 69 unités ne dépasse pas la capacité du véhicule (100). Les clients 1 et 5 sont reliés. Ensuite, nous considérons les clients 1 et 2. Si on ajoute la liaison entre ces deux clients, la demande totale de la route 2-1-5 ou 5-1-2 (104 unités) va dépasser la capacité du véhicule (100). Par conséquent, les clients 1 et 2 ne sont pas reliés. 44 Si les points 2 et 4, ce qui est la paire suivante dans la liste, ont été reliés à ce stade, nous serions construisons plus d’une route (1-5 et 2-4). Puisque la version séquentielle de l’algorithme se limite à une seule voie à la fois, les clients 2 et 4 ne seront pas reliés. Puis, nous considérons les clients 4 et 5. Si on ajoute la demande du client 4 (25) à la demande de la voie actuelle 1-5 (69), on obtient une demande totale de 94 unités. Puisque cette demande est inférieure à la capacité du véhicule (100), les clients 4 et 5 seront reliés. En parcourant la liste, nous trouvons que, en raison de la restriction des capacités pas plus de points peuvent être ajoutés à l’itinéraire. Donc, la tournée du véhicule 1 sera (0-1-5-4-0). Dans le passage suivant de la liste des "savings" nous ne trouvons que la paire de points 2 et 3. Ces deux points peuvent être visités sur la même route, et nous faisons le trajet du véhicule 2 (0-2-3-0) La distance sauvée dans ce cas est : dts = S15+S54+S23 = 42+34+13 = 89 La distance totale parcourue, d’après la formule (*), est : Z1= 276 – 89 = 187 45 • Version parallèle Dans la version parallèle 1 et 5 sont également combinés en premier. Comme la version parallèle peut construire plus d’une voie à la fois, les points 2 et 4 sont également combinés. Enfin, les points 3 et 5 sont combinés. Par conséquent, la tournée du véhicule 1 sera (0-1-5-30), et le trajet du véhicule 2 sera (0-2-4-0). 01 02 03 La distance sauvée dans ce cas est : 04 dts = S15+S53+S24 = 42+27+36 = 105 La distance totale parcourue, d’après la formule (*), est : Z2 = 276 – 105 = 171 Remarque : L’algorithme parallèle donne souvent de meilleurs résultats que l'algorithme séquentiel (Z2 < Z1). Cependant, l'algorithme parallèle peut également impliquer plus de calcul dans le cadre de la gestion de plusieurs voies en même temps. 46 5 Problème de voyageur de commerce 5.1 Introduction Le problème du voyageur de commerce (TSP : Travelling Salesman Problem ) est l’un des problèmes d’optimisation combinatoire les plus répandus. Étant donné un graphe complet G = (V, E) et une fonction de poids w : E → N. Le but est de trouver un cycle Hamiltonien dans G (également appelé un tour) de poids minimum. C’est l’un des problèmes centraux de l’informatique et de la recherche opérationnelle. Il est bien connu d’être NP-difficile et a fait l’objet de recherches selon différentes perspectives, notamment par approximation, algorithmes de temps exponentiel et heuristiques. En pratique, le TSP est souvent résolu au moyen d’heuristiques de recherche locales, dans lesquelles on part d’un cycle Hamiltonien arbitraire en G, puis on modifie le cycle au moyen de modifications locales en une série d’étapes. Après chaque étape, le poids du cycle devrait s’améliorer ; lorsque l’algorithme ne trouve aucune amélioration, il s’arrête. L’un des exemples les plus réussis de cette approche est l’heuristique k−opt, dans laquelle un k−mouvement amélioré est effectué à chaque étape. Soit un cycle Hamiltonien H dans un graphe G = (V, E) un k−mouvement est une opération qui supprime k arêtes de H et ajoute k arêtes de G de sorte que L’ensemble des arêtes résultant H est un nouveau cycle Hamiltonien. Le k−mouvement s’améliore si le poids de H est plus petit que le poids de H. Les lignes d’attaque traditionnelles pour les problèmes NP-difficiles sont les suivantes : • Concevoir des algorithmes exacts, qui fonctionnent raisonnablement vite que pour des problèmes de petite taille. • Concevoir des algorithmes "sous-optimaux" ou heuristiques, c’est-à-dire des algorithmes qui fournissent des solutions approchées dans un délai raisonnable. • Recherche de cas spéciaux pour le problème ("sous-problèmes") pour lesquels des heuristiques optimales ou exactes sont possibles. 5.2 Formalisation “ L'énoncé du problème du voyageur de commerce est le suivant : étant donné n points (des « villes ») et les distances séparant chaque point, trouver un chemin de longueur totale minimale qui passe exactement une fois par chaque point et revienne au point de départ. Formellement, une instance est un graphe complet G=(V,A,ω) avec V un ensemble de sommets, A un ensemble d'arêtes et ω une fonction de coût sur les arcs. Le problème est de trouver le plus court ” Définition de la classe NP : la classe NP est l’ensemble des problèmes de décision L ⊆ Σ∗ pour lesquels il existe un algorithme polynomial V tel que pour tout x ∈ Σ∗, on a : 47 x ∈ L si et seulement s’il existe y ∈ Σ∗ de taille polynomiale en |x| tel que V Retourne « oui » sur l’entrée (x, y). La chaîne y est alors appelée certicat polynomial. Pour TSP, un certicat sera une permutation de {1, · · · , n}. Définition du TSP: Le TSP = {(G, w, t)} peut être décrit comme suit: • G = (V,E) où G est un graphe complet : • Une fonction de poids w:E→N. • t∈Z • G est un graphe contenant un circuit (tour) avec un coût ne dépassant pas t. Définition du Cycle Hamiltonien : Un cycle Hamiltonien est un cycle dans un graphe passant par tous les sommets une fois. PROBLEME FORMEL : Il existe plusieurs formalisations mathématiques pour le problème de voyageur de commerce, chacun analyse le problème d’une perspective diffèrent. On peut le formuler sous forme : V représente l’ensemble des villes, d(i,j) est la distance entre i et j tel que i est diffèrent de j. La fonction “phi” représente la permutation des villes de 1 jusqu’a n. Le but du TSP est de minimiser la fonction objectif. Recherche de minimum : coût, distance, longueur d’une traversée, poids, temps de traitement, matériau, consommation d’énergie, nombre d’objets Recherche de maximum : profit, valeur, rendement, utilité, efficacité, capacité, nombre d’objets 5.3 Domaines d’application Plusieurs taches dans la vie réelle peuvent se modéliser directement avec le TSP ou l’une de ses variantes, surtout dans le domaine industriel et le domaine de transport & logistique. Transport : par exemple le transport scolaire, ou le distributeur du lait sur les magasins... Forage de cartes de circuits imprimés : par exemple le perçage d’une carte électronique.. 48 Analyse de cluster : affectation d'un ensemble d'observations en sous-ensembles (appelés clusters) de sorte que les observations dans le même cluster soient similaires dans un certain sens, généralement basées sur la distance euclidienne Routage : par ex google maps utilise une variante du TSP pour calculer la distance et le chemin le plus optimal en considérant le temps et le cout. 5.4 Méthodes de résolution La majorité des problèmes d'optimisation combinatoire sont des problèmes NP- difficiles et donc ils ne possèdent pas à ce jour un algorithme efficace, valable de trouver la solution optimale en un temps raisonnable. Ceci a motivé les chercheurs à développer de nombreuses méthodes de résolution en recherche opérationnelle et en intelligence artificielle, la recherche s’est d'abord orientée vers des heuristiques spécifiques aux problèmes, elle s’est progressivement intéressée aux méthodes plus générales, c'est à dire les métaheuristiques. Ces méthodes de résolution peuvent être réparties en deux grandes classes : - Méthodes exactes : Les méthodes exactes ont permis de trouver des solutions optimales pour des problèmes de taille raisonnable et rencontrent généralement des difficultés face aux applications de taille importante. - Méthodes approchées : Elles permettent de trouver une bonne solution, pas forcément optimale, dans un temps raisonnable. 5.4.1 Résolution par brute force C’est la solution la plus directe, le procédure essaye toutes les permutations possibles. Par exemple si on a 4 villes A B C D, l’algorithme essaye toutes les combinaisons : ABCDA ABDCA ADCBA ADBCA ACDBA ACBDA et stocke a chaque fois la distance. Enfin l’algorithme choisis la moins couteuse. La complexité de cet algorithme est (n-1) ! Le temps d’exécution a un complexité de l’ordre (N-1)! 49 5.4.2 Résolution par programmation dynamique La programmation dynamique consiste à résoudre un problème en le décomposant en sous problèmes, puis a résoudre les sous-problèmes des plus petits au plus grands en stockant les résultats intermédiaires. Le temps d’exécution a un complexité de l’ordre n²(2^n)! 5.4.3 Résolution par plus proche voisin L'algorithme du voisin le plus proche est un algorithme approximatif pour trouver une solution sous-optimale au TSP. Étape 1 : Trouvez une arête qui donne une distance minimale entre le sommet actuel et un sommet non visité, appelez-le V. Étape 2 : Maintenant, définissez ce sommet actuel sur le sommet V non visité et marquer ce sommet V comme visité. Étape 3 : Terminez la condition, si tous les sommets sont visités au moins une fois. Étape 4 : revenir à l'étape 1 Le temps d’exécution a une complexité de l’ordre n^2. 50 5.4.4 Résolution par l’algorithme génétique L'algorithme génétique a été introduit par John Holland avec ses collègues et étudiants au milieu des années 1970, à l'Université du Michigan. GA est totalement basé sur le « Survival des principes les plus aptes » et « Natural Genetic », afin de produire de meilleures solutions. GA opère sur population de solutions. Pour chaque nouvelle génération, un nouvel ensemble de solutions est formulé en sélectionnant des individus en fonction de leur condition physique valeur, puis les élever ensemble à l'aide d’opérateurs. Étape 1 : Générez des itinéraires aléatoires et calculez leur forme physique valeur. Étape 2 : Répétez la procédure suivante pour un nombre donné de temps d'itération : a) Sélectionnez les deux meilleurs itinéraires parmi le choix aléatoire donné itinéraires. b) Reproduire ces deux itinéraires pour produire de nouveaux meilleurs itinéraires. c) Après la reproduction, remplacez les meilleurs nouveaux itinéraires par les deux pires itinéraires. Étape 3 : Retournez le meilleur itinéraire. 51 5.5 Complexité La complexité des algorithmes exacts est toujours plus grande que celle des algorithmes approchés. Nous ne résoudrons donc pas les instances de test plus de 30 villes, le code des algorithmes exact est compétitif sur les petites instances par rapport aux algorithmes approchées de TSP. Voici des statistiques mathématiques d’exécution entre l’algorithme de plus proche voisin et l’algorithme génétique. 52 6 Problème de transport avec coût fixe 6.1 Introduction Le problème général du transport (TP) et ses variantes ont été l'un des sujets attrayants à la fois dans les industries et le monde académique. Surtout, les chercheurs de cette recherche domaine ont été principalement axés sur les approches de solution et ont utilisé ou développé plusieurs approches. Dans tout problème du transport, une hypothèse de base est que le coût du transport est directement proportionnel au nombre d'unités transportées, alors que, dans la plupart des demandes, un coût fixe pour développer les installations où répondre à la demande des clients de chaque source sont également pris en compte. Le coût fixe peut représenter le coût de location d'un véhicule, frais de péage sur une autoroute, redevances d'atterrissage à un l'aéroport, les coûts d'installation des machines dans une usine de fabrication l'environnement, le coût de la construction de routes dans les transports systèmes, temps pour localiser un fichier dans une base de données distribuée système, etc. Les problèmes de coût fixe surviennent dans un grand nombre de systèmes de production et de transport. Beaucoup des problèmes pratiques de transport et de distribution peuvent être modélisés comme des problèmes de transport à charge fixe (FCTP). Un coût fixe ou une charge dans FCTP est encouru pour chaque déroute qui est ouverte ou utilisée pour envoyer les demandes. Deux sortes des coûts sont pris en compte dans le forfait transport problèmes : un coût variable qui augmente linéairement avec la quantité transportée entre une source et une destination, et une redevance fixe, qui est encouru chaque fois qu'un itinéraire est ouvert ou utilisé pour envoyer les demandes à destination. 6.2 Le problème de transport avec coût fixe 6.2.1 Le problème de transport (Modèle mathématique général) Soit m sources d’approvisionnement, S1, S2,…,S ayant ai ( i = 1, 2,...,m ) unités d'approvisionnement (ou capacité), respectivement à transporter vers n destinations, D1, D2, . . ., Dn avec bj ( j = 1, 2, . . ., n) unités de demande (ou de besoin), respectivement. Soit cij le coût d'expédition d'une unité du produit de la source i à la destination j Si xij représente le nombre d'unités expédiées de la source i à la destination j, le problème est de déterminer l'horaire de transport de manière à minimiser le coût total du transport tout en satisfaisant les conditions d'offre et de demande. Mathématiquement, le problème de transport, en général, peut s'énoncer comme suit : 53 𝑛 Minimiser (coût total) 𝑍 = ∑𝑚 𝑖=1 ∑𝑗=1 𝑐𝑖𝑗 . 𝑥𝑖𝑗 (1) Appelée fonction objectif. Telle que, sous réserve des contraintes : 𝑛 ∑ 𝑥𝑖𝑗 = 𝑎𝑖 ; 𝑖 = 1,2, … , 𝑚 (𝑐𝑜𝑛𝑡𝑟𝑎𝑖𝑛𝑡𝑒𝑠 𝑑′ 𝑎𝑝𝑝𝑟𝑜𝑣𝑖𝑠𝑖𝑜𝑛𝑛𝑒𝑚𝑒𝑛𝑡) (2) 𝑗=1 𝑚 ∑ 𝑥𝑖𝑗 = 𝑏𝑗 ; 𝑗 = 1,2, … , 𝑛 (𝑐𝑜𝑛𝑡𝑟𝑎𝑖𝑛𝑡𝑒𝑠 𝑑𝑒 𝑙𝑎 𝑑𝑒𝑚𝑎𝑛𝑑𝑒) (3) 𝑖=1 𝑥𝑖𝑗 ≥ 0 ; ∀𝑖, 𝑗 (4) Une condition nécessaire et suffisante pour une solution réalisable aux problèmes de transport est : 𝑛 ∑𝑚 𝑖=1 𝑎𝑖 = ∑𝑗=1 𝑏𝑗 (5) Offre totale = Demande totale. Pour une présentation et une solution facile, nous utilisons ce qu'on appelle la table de transport qui est un moyen pratique de résumer les données comme indiqué ci-dessous : Table de transport général En général dans le problème du transport, il y a (m + n) contraintes, une pour chaque source d'approvisionnement, et distinction et m × n variables. Puisque toutes les contraintes (m + n) sont des équations, l'une de ces équations est donc supplémentaire (redondant). La contrainte supplémentaire (équation) peut être dérivée des autres contraintes (équations), sans affecter la solution réalisable. Il s'ensuit que toute solution réalisable pour un problème 54 de transport doit avoir exactement (m + n – 1) variables de base non négatives (ou allocations) 𝒙𝒊𝒋 satisfaisant la condition (5). 6.2.2 Le problème de transport avec coût fixe (FCTP): Modèle mathématique et descriptions Le problème de transport avec coût fixe est considéré comme un problème de distribution avec m fournisseurs et n clients. Un fournisseur peut répondre à la demande d'un client et envoyer ses produits avec le coût de 𝒄𝒊𝒋 pour chaque unité comme frais d'expédition. De plus, il y a un coût fixe de 𝒇𝒊𝒋 considéré pour l'ouverture d'un itinéraire par exemple. Le 𝒂𝒊 et le 𝒃𝒋 sont respectivement la valeur de la capacité et de la demande de chaque fournisseur et client. L'objectif minimise les coûts variables et fixes. Mathématiquement, ce problème peut être formulé comme suit : 𝑛 Minimiser 𝑍 = ∑𝑚 𝑖=1 ∑𝑗=1 𝑐𝑖𝑗 . 𝑥𝑖𝑗 + 𝑓𝑖𝑗 . 𝑦𝑖𝑗 (1) Telle que, sous réserve des contraintes : 𝑛 ∑ 𝑥𝑖𝑗 = 𝑎𝑖 ; 𝑖 = 1,2, … , 𝑚 (2) 𝑗=1 𝑚 ∑ 𝑥𝑖𝑗 = 𝑏𝑗 ; 𝑗 = 1,2, … , 𝑛 (3) 𝑖=1 𝒙𝒊𝒋 ≥ 𝟎 ; ∀𝑖, 𝑗 𝟏, 𝒙𝒊𝒋 > 𝟎 𝒚𝒊𝒋 = { 𝟎, 𝒔𝒊 𝒏𝒐𝒏 (4) ; ∀𝒊, 𝒋 𝒚𝒊𝒋 : 𝒖𝒏𝒆 𝒗𝒂𝒓𝒊𝒂𝒃𝒍𝒆 𝒃𝒊𝒏𝒂𝒊𝒓𝒆 (5) Avec: 𝒇𝒊𝒋 : 𝒄𝒐û𝒕 𝒅𝒆 𝒕𝒓𝒂𝒏𝒔𝒑𝒐𝒓𝒕 𝒇𝒊𝒙𝒆 𝒚𝒊𝒋 : 𝒖𝒏𝒆 𝒗𝒂𝒓𝒊𝒂𝒃𝒍𝒆 𝒃𝒊𝒏𝒂𝒊𝒓𝒆 La fonction objectif (1) demande de minimiser la variable totale et le coût fixe. Les contraintes (2) exigent que tous marchandises disponibles à chaque origine (𝑖 ∈ 1,2, … , 𝑚) être livre. Les contraintes (3) obligent, dans toute solution réalisable, à livrer 𝑏𝑗 unités de marchandises à chaque destination (𝑗 ∈ 1,2, … , 𝑛). Enfin, les contraintes (4) et (5) définissent les plages de variables 𝑥𝑖𝑗 et 𝑦𝑖𝑗 , respectivement. Dans ce problème, nous avons deux variables de décision, 𝑥𝑖𝑗 qui représente la quantité de marchandises envoyées du fournisseur i au client j et la variable binaire 𝑦𝑖𝑗 qui montre la réouverture ou l'absence de réouverture de la route ij et si 𝑥𝑖𝑗 > 0, sa valeur l'est. 55 6.3 Un aperçu de certaines des solutions développées par les chercheurs pour résoudre le FCTP Hirsch et Dantzig (1954) ont d'abord proposé le problème de charge et par conséquent, Balinski (1961) développé le FCTP pour la première fois dans la littérature. Il étudié les structures du problème et de résoudre le problème il a développé un algorithme approximatif. Ce problème est discuté plus tard de sa complexité par klose (2008). Il a montré que le temps de résolution à la taille du problème augmente de façon exponentielle pour laquelle il est considéré comme un NP-difficile, klose proposé approximatif algorithmes pour résoudre de tels problèmes. Ainsi, au cours des deux dernières décennies, plusieurs méthodes heuristiques et métaheuristiques ont été proposés par des chercheurs pour résoudre les charges fixes problèmes de transport. 6.3.1 Algorithme heuristique proposé Intégration des coûts fixes avec les coûts variables, qui on l'appelle le coût consolidé (cc), est la base de l'heuristique proposée. Cela signifie que nous intégrons ces deux types de coût par quatre méthodes pour atteindre le cc. Ensuite, nous avons résolu le problème en utilisant le cc comme un problème de transport classique et avons calculé la fonction objectif des FCTP après avoir obtenu 𝑥𝑖𝑗 et les avons remplacés dans la fonction objectif principale. En résumé, nous proposons l'heuristique basée sur les deux types de coûts existent dans le FCTP. Nous les considérons de points de vue différents selon lesquels ils influencent fonctions objectives. Pour expliquer exactement l’heuristique développée et quatre méthodes pour atteindre le cc, nous décrivons la procédure dans l'algorithme, avec les Indexes et paramètres suivants : i: index des sources j: indice de dépôt m: nombre de sources n: nombre de dépôts 𝒂𝒊 : capacité de la source i 𝒃𝒋 : demande du dépôt j 𝒄𝒊𝒋 : coût de transport variable ajusté associé à l'itinéraire (i,j) 𝒇𝒊𝒋 : coût de transport fixe ajusté associé à l'itinéraire (i,j) 𝒓𝒊𝒋 : évaluation du coût du produit transporté de la source i au dépôt j 𝒕𝒓𝒊𝒋 : évaluation totale du coût du produit transporté pour la source i et le dépôt j 𝒇𝒓𝒊𝒋 : évaluation finale du coût du produit transporté de la source i au dépôt j 𝒓𝒂𝒊 : puissance nominale de la source i 𝒓𝒃𝒋 : demand rating of depot j 56 𝒕𝒄𝒊𝒋 : coût de transport variable total pour la source i et le dépôt j 𝒕𝒇𝒊𝒋 : coût de transport fixe total associé à l'itinéraire (i,j) pour la source i et le dépôt j 𝒓𝒄𝒊𝒋 : évaluation des coûts de transport variables pour la source i et le dépôt j 𝒓𝒇𝒊𝒋 : cotation des coûts de transport fixes associés à l'itinéraire (i,j) pour la source i et le dépôt j 𝒄𝒄𝒊𝒋 : coût consolidé Algorithme : Procédure heuristique basée sur (cc) Input : indices, variables de décision et paramètres. Méthode I: Étape1: I 𝑐𝑖𝑗 = (min(𝑎𝑖 ,𝑏𝑗 )×𝑐𝑖𝑗 )+𝑓𝑖𝑗 min(𝑎𝑖 ,𝑏𝑗 ) ; pour chaque i , j; Méthode II: Étape1: 𝑟min (𝑖,𝑗) = 𝑐𝑖𝑗 + 𝑓𝑖𝑗 pour chaque i , j ; 𝑟𝑎𝑣𝑎(𝑖,𝑗) = (𝑐𝑖𝑗 × min(𝑎𝑖 , 𝑏𝑗 )) + 𝑓𝑖𝑗 pour chaque i , j ; 𝑟max (𝑖,𝑗) = (𝑐𝑖𝑗 × mi(𝑎𝑖 , 𝑏𝑗 )) + 𝑓𝑖𝑗 pour chaque i , j ; Étape2: 𝑡𝑟min (𝑖,𝑗) = ∑ 1≤𝑗≤ 𝑛 𝑟min (i,j) + ∑1≤ 𝑖 ≤ 𝑚 𝑟min (𝑖,𝑗) 1<𝑖<𝑚 1<𝑗<𝑛 𝑡𝑟ava (𝑖,𝑗) = ∑ 1≤𝑗≤ 𝑛 𝑟ava (i,j) + ∑1≤ 𝑖 ≤ 𝑚 𝑟av (𝑖,𝑗) 1<𝑖<𝑚 1<𝑗<𝑛 𝑡𝑟max (𝑖,𝑗) = ∑ 𝑟max (i,j) + ∑ 𝑟max (𝑖,𝑗) 1≤𝑗≤ 𝑛 1<𝑖<𝑚 1≤ 𝑖 ≤ 𝑚 1<𝑗<𝑛 Étape3: 𝑓𝑟min (𝑖,𝑗) = 𝑡𝑟min (𝑖,𝑗) 𝑟min (𝑖,𝑗) 𝑓𝑟ava (𝑖,𝑗) = 𝑡𝑟ava (𝑖,𝑗) 𝑟ava (𝑖,𝑗) 𝑓𝑟max (𝑖,𝑗) = 𝑡𝑟max (𝑖,𝑗) 𝑟max (𝑖,𝑗) , pour chaque i , j ; Étape4: II 𝑐𝑐𝑖𝑗 = 𝑓𝑟 𝑓𝑟min (𝑖,𝑗) max(𝑖,𝑗) +(𝑓𝑟ava (𝑖,𝑗) ×𝑓𝑟min (𝑖,𝑗) ) 57 ; pour chaque i , j ; Méthode III: Étape1: 𝑟𝑎𝑖 = 𝑛 ∑𝑚 𝑖=1 𝑎𝑖 +∑𝑗=1 𝑏𝑗 𝑟𝑏𝑖 = 𝑎𝑖 𝑛 ∑𝑚 𝑖=1 𝑎𝑖 +∑𝑗=1 𝑏𝑗 𝑏𝑗 Étape2: 𝑡𝑐𝑖𝑗 = ∑ 1≤𝑗≤ 𝑛 𝑐(𝑖, 𝑗) + ∑1≤ 𝑖 ≤ 𝑚 𝑐(𝑖, 𝑗) 𝑡𝑓𝑖𝑗 = 1<𝑗<𝑛 1<𝑖<𝑚 ∑ 1≤𝑗≤ 𝑛 𝑓(𝑖, 𝑗) + ∑1≤ 𝑖 ≤ 𝑚 𝑓(𝑖, 𝑗) 1<𝑗<𝑛 1<𝑖<𝑚 Étape3: 𝑟𝑐𝑖𝑗 = 𝑡𝑐𝑖𝑗 𝑐𝑖𝑗 𝑟𝑓𝑖𝑗 = 𝑡𝑓𝑖𝑗 𝑓𝑖𝑗 Étape4: III 𝑐𝑖𝑗 = min(𝑟𝑎𝑖 ,𝑟𝑏𝑖 ) (min(𝑟𝑎𝑖 ,𝑟𝑏𝑗 )×𝑟𝑐𝑖𝑗 )+𝑟𝑓𝑖𝑗 ; pour chaque i , j ; Méthode IV: Étape1: IV 𝑐𝑖𝑗 = (min(𝑎𝑖 , 𝑏𝑗 ) × 𝑐𝑖𝑗 ) + 𝑓𝑖𝑗 ; pour chaque i , j ; Étape2: Résoudre comme le problème de transport classique (TP) en utilisant chacun des I II III IV coûts consolidés: (𝑐𝑖𝑗 , 𝑐𝑖𝑗 , 𝑐𝑖𝑗 𝑒𝑡 𝑐𝑖𝑗 ); Étape3: obtenir le montant de 𝑥𝑖𝑗 de chaque coût consolidé à l'étape 3 ; Étape4: calcul du coût total en utilisant 𝑐𝑖𝑗 . 𝑥𝑖𝑗 + 𝑓𝑖𝑗 . 𝑦𝑖𝑗 ; Étape5: choisir le coût total le plus bas de l'étape 4 ; Output: la quantité de produit transporté de la source i au dépôt j (𝑥𝑖𝑗) et le coût total le plus bas ; 6.3.2 Algorithme Métaheuristique proposé : Algorithme génétique (GA) Sur la base du rôle de la génétique dans la nature et de l'évolution naturelle des organismes vivants, Holland (1975) a présenté un type particulier d'algorithmes évolutionnaires, à savoir les algorithmes génétiques au début des années 70. L'algorithme génétique est un modèle mathématique qui transforme une population de chromosomes en de nouveaux en utilisant les modèles opérationnels de Darwin sur la réplication de la survie d'une génération supérieure basée sur le processus naturel de la génétique. La structure générale d'un algorithme génétique peut être supposée que tout d'abord un mécanisme pour convertir la réponse de chaque problème à un chromosome doit être défini. Ensuite, un ensemble de chromosomes, qui sont en fait un ensemble de réponses au problème, sont considérés comme la population initiale. Après avoir défini la réponse initiale, de nouveaux chromosomes 58 appelés l'enfant doivent être créés en utilisant l'opération génétique. L'opération est divisée en deux types principaux de croisement et de mutation. De même, les deux notions d'opérateurs de croisement et de mutation sont fréquemment utilisées pour la sélection de chromosomes qui devraient jouer le rôle de parents, dont l'opérateur est également défini. Après avoir créé la population d'enfants, le meilleur des chromosomes doit être sélectionné en utilisant l'évaluation. Le processus de sélection est basé sur la valeur de fitness de chaque chaîne. En fait, le processus d'évaluation est le débat le plus important sur le processus de sélection. Ainsi, après la répétition de plusieurs générations, la meilleure génération qui est la réponse optimale au problème sera créée. Quatre étapes fondamentales sont principalement utilisées dans l'AG : la reproduction, le mécanisme de sélection, le croisement et la mutation. La structure de l'AG proposée est donnée dans l'algorithme génétique. Algorithme: La procédure d'AG proposée pour le FCTP Étape1: Initialiser le problème et les paramètres GA Input: l'instance de données de l'optimisation problème et paramètres GA ; Étape2: Initialiser P(t) , par le spanning tree-based ou priority-based algorithme ; Étape3: Évaluation de P(t); Étape4: while(pas de condition de résiliation)do Croisement P(t) pour céder O(t) par croisement à un point ou croisement à deux points. Mutation P(t) pour produire O(t) par brouillage ou mutation par insertion ou échange. Évaluation de O(t); Étape5: Sélectionnez P(t+1) parmi P(t) et O(t) par mécanisme de sélection de rang. Étape6: Vérifier le critère d'arrêt; While(pas de critère de résiliation) Répétez les étapes 4 et 5 ; output: coût total minimum. 59 7 Problème de planification JSP (Job- shop scheduling problem) 7.1 Problème d’ordonnancement 7.1.1 Problèmatique Job Shop scheduling problem (JSP) est l’un des problèmes de planification et d’ordonnancement de l’APS, en général JSP est un problème d’allocation des ressources dans le temps pour réaliser un ensemble de tâches, il concerne la détermination des séquences d’opération sur les machines afin de minimiser le temps de réalisation. 7.1.2 Les mots clés ✓ Job Shop Scheduling ✓ Ordonnancement de l’APS ✓ Ressources / Allocation des ressources. ✓ Taches ✓ Opérations ✓ Temps de réalisation 7.1.3 C’est quoi le problème d’ordonnancement ? Définition 1 L’ordonnancement est l’allocation des ressources, humaines ou techniques, aux taches sur une durée déterminée avec le but d’optimiser un ou plusieurs objectifs Définition 2 Le problème d’ordonnancement consiste à organiser dans le temps la réalisation d’un ensemble de taches, compte tenu de contraintes temporelles (délais, contraintes d’enchainement, etc.) et de contraintes portant sur l’utilisation et la disponibilité des ressources requises par des tâches. 60 7.1.4 Concept de base d’ordonnancement Pour formuler un problème d’ordonnancement les notions suivantes sont essentielles : ➢ Les tâches Une tâche est considérée comme l’exécution d’une opération sur une machine m et peut être divisée en deux catégories : Tâches morcelables (préemptibles) : qui peuvent être exécutées par morceaux par une ou plusieurs ressources, et qui ajoute des tests pour savoir quand interrompre le traitement. Facilitant ainsi la résolution de certains problèmes. Tâches non-morcelables (indivisibles) : qui doivent être exécutées en une seule fois et ne peuvent pas être interrompues avant qu'elles ne soient complètement achevées. ➢ Les ressources Une ressource k est un moyen technique ou humain requis pour la réalisation d’une tâche et disponible en quantité limitée, sa capacité Ak. On distingue plusieurs types de ressources : Une ressource est renouvelable si après avoir été utilisée par une ou plusieurs tâches, elle est à nouveau disponible en même quantité (les hommes, les machines, l’espace, etc.) ; la quantité de ressources utilisée à chaque instant est limitée. Une ressource est consommable (matière première, budget, etc.) : la consommation globale (ou cumul) au cours du temps est limitée. On distingue par ailleurs les ressources disjonctives (ou nonpartageables) qui ne peuvent exécuter qu’une tache à la fois (machine-outil, robot manipulateur) et les ressources 61 cumulatives (ou partageables) qui peuvent être utilisées par plusieurs tâches simultanément (équipes d’ouvriers, poste de travail). ➢ Les contraintes On distingue deux types de contraintes : Contraintes temporelles : Les contraintes temporelles intègrent en général : • les contraintes de temps alloué, issues généralement d’impératifs de gestion et relatives aux dates limites des tâches (délai de livraison par exemple) ou à la durée totale d’un projet ; • les contraintes d’antériorité et plus généralement les contraintes de cohérence technologique, qui décrivent le positionnement relatif de certaines tâches par rapport à d’autres (e.g contraintes de gammes dans le cas des problèmes d’ateliers) ; • les contraintes de calendrier liées au respect d’horaires de travail, etc. Contraintes de ressources : Les contraintes de ressources traduisent le fait que celles-ci sont disponibles en quantité limitée (leur capacité). On distingue deux types de contraintes de ressources, liées à la nature disjonctive ou cumulative des ressources. 62 ➢ Les objectifs L’ordonnancement est un aspect important de la gestion de production. La connaissance des méthodes d’ordonnancement permet d’éviter des pertes de performance importantes. Et parmi les objectifs principaux de l’ordonnancement, on peut citer : 1.Objectifs liés au temps. 2.Objectifs liés aux ressources. 3.Objectifs liés aux couts. 7.1.5 Types de problèmes d’ordonnancement Selon la manière dont les taches sont ordonnancées et dont les machines sont configurées, nous distinguons différents problèmes d’ordonnancement : ➢ Flow Shop (Atelier à cheminement unique) Dans le modèle de flow-shop, les ordres de fabrication visitent les machines dans le même ordre, avec des durées opératoires pouvant être différentes. Chaque job va être s'exécuter sur les M machines en série et tous les jobs vont suivre le même ordre de passage sur ces machines. Ce type de modèle est aussi appelé modèle linéaire. 63 ➢ Open Shop (Atelier à cheminement libre) Dans le modèle d'open shop, l'ordre de passage des n jobs sur les m machines n'est pas connu à l'avance. Cet ordre est déterminé lors de la construction de la solution. Chaque job j peut avoir son propre ordre de passage sur toutes les machines. Le fait qu'il n'y ait pas d'ordre prédéterminé rend la résolution du problème d'ordonnancement de ce type plus complexe, mais offre cependant des degrés de liberté intéressants ➢ Job Shop (Atelier à cheminement multiple) Concernant le modèle de job-shop, chaque job à un ordre à suivre ; ce qui n'est pas le cas du flow-shop. Il s'agit dans ce cas de déterminer les dates de passage sur différentes ressources d'ordres de fabrication ayant des trajets différents dans l'atelier. Ces ordres de fabrication partageant des ressources communes, des conflits sont susceptibles de survenir. 64 7.2 Job shop scheduling 7.2.1 Qu’est-ce qu’un problème de Job Shop ? ➢ Définition générale Un atelier de travail JS est un type de processus de fabrication dans lequel de petits lots d'une variété de produits personnalisés sont fabriqués. Dans le flux de processus de l'atelier de travail, la plupart des produits fabriqués nécessitent une configuration et un séquençage uniques des étapes de processus. Les ateliers de travail sont généralement des entreprises qui fabriquent des pièces sur mesure pour d'autres entreprises. ➢ Définition mathématique Soit un problème de Job Shop. Les notations suivantes sont introduites pour décrire le problème. Soit M l’ensemble des m machines M1 M2 … Mm et J l’ensemble des n jobs J1 J2 … Jn. On note O l’ensemble des petites o opérations O={O1,O2,…,Oo} décrivant la réalisation des jobs sur les machines. Les jobs sont décrits par des gammes. Une gamme définit l’ordre, la durée et la séquence des machines où sont traitées les opérations d’un job. La gamme définit pour chaque job Ji une suite Ki de ki opérations dont la première est notée di : Ki = (Odi , Odi+1 ,…, Odi+ki-1) les suites Ki sont disjointes, c’est-à-dire qu’une opération n’apparait que dans une seule suite Ki . La suite des opérations de Ki est appelée ordre d’opération de la gamme. Un Job ne peut commencer de traitement d’une opération que quand l’opération précédente dans la gamme est terminée. On appelle contrainte de précédence cette contrainte est on note A = (Oi , Oi+1)l’ensemble des opérations successives soumise à une contrainte de précédence directe. Une opération Oi doit etre réalisée pendant un temps pi sur une machine mi. Cette opération doit etre réalisée sans préemption. On note Ek où k appartient à M l’ensemble des opérations doivent etre traitées sur la machine Mk. Une machine ne peut traiter qu’une seule opération à la fois. Les opérations de Ek doivent donc etre ordonnées, on dit qu’il y a disjonction entre elles car les intervalles de temps pendant lesquels la machine est occupée sont disjoints. Afin de décrire le problème de façon univoque, nous le décrivons dans un premier temps à l’aide du formalisme mathématique. La formalisation propose par (Manne,1960) peut aisément etre adaptée aux notations ci-dessus pour le problème de job shop : ti est la date de début de l’opération i, ti + pi ≤ tj 65 ∀( i , j )∈A 7.2.2 Réimplantation d’un atelier de travail JS ➢ Le regroupement des équipements en ilots Un ilot de production est un regroupement de postes de travail traversé par des flux de matières qui utilisent ces postes dans un ordre variable d’une gamme à l’autre. Dont le but de simplifier les flux de matière. Objectifs : -Eviter les retours en arrière. -Equilibrer le nombre de machines par ilots. -Minimiser le parcours des pièces. o Algorithme de Kusiak Étape 1 : On sélectionne la première ligne et les colonnes attachées à cette ligne Étape 2 : On sélectionne les ligne attachées aux colonnes sélectionnées pour séparer les ilots éventuellement rattachés entre eux par une machine, on ne prend dans un ilot que les pièces qui ont au moins 50% des machines déjà rattachées à celui-ci 66 Étape 3 : On recommence l’étape 1 en sélectionnant les colonnes attachées à l’ilot La première ilot : (P1,P3,P5,P7) ---> (M2,M3,M5) Étape 4 : On arrête lorsque la ligne (ou la colonne) ne comporte plus des éléments. Dans le tableau ci-après, on ne regroupe pas M4 car cette machine concerne 1 pièce de cet ilot pour 2 pièces hors ilots La deuxième ilot : (P2,P6) ----> (M4,M6) La troisième ilot : (P4)----> (M1,M7) La répartition est alors la suivante : 67 ▪ Algorithme de King La méthode de King est plus rigoureuse que la méthode Kusiak . Pour utiliser cette méthode il est indispensable de disposer d’un tableur ou d’un logiciel spécifique tel que << IMPACT>> Étape 1 : On affecte un poids en puissance de 2 à chacune des pièces . 68 L’équivalent décimal est alors calculé en sommant les poids des pièces utilisant la machine. Poids(P1) = 2 ^(5) + 2 ^(2) = 36 Poids(P2) = 2 ^(3) + 2 ^(1) = 10, Etc…. Étape 3 : On suit alors le même processus mais sur les colonnes L’équivalent décimal est alors calculé en sommant les poids des pièces utilisant la machine. Poids(M1) = 2 ^(6) =64, Poids(M2) = 2 ^(5) + 2 ^(4) + 2 ^(3)=56, Etc…. Après l’ordonnancement décroissant des colonnes, on obtient 69 Étape 4 : On recommence le même processus sur les lignes REMARQUE : On remarque que la matrice n’est pas changée, elle garde la même structure 70 On retrouve ici le meme regroupement que celui donné par la méthode de Kuziak. Cependant, les regroupements occasionnés par les deux méthodes ne sont pas toujours identiques ➢ Optimisation d’implantation de chaque ilot Après avoir identifié les ilots de production indépendants, il faut procéder à l’implantation de chaque ilot. L’implantation idéale doit suivre le plus possible la gamme de fabrication. C’est pour cela que l’on cherchera autant que faire se peut à mettre en ligne les machines . Cela peut se faire de multiples façons. Nous présenterons dans notre projet deux méthodes : La méthode des antériorités et la méthode des rangs moyens o Méthode des antériorités Soit l’ilot de fabrication avec les gammes définies par la figure suivante : Étape 1 : On établit le tableau des antériorités. Pour établir ce tableau en place dans chaque colonne l’ensemble des machines qui interviennent dans une gamme avant la machine considérée 71 Étape 2 : On place et raye les machines qui n’ont pas d’antériorités Étape 3: la machine M5 n’a plus d’antériorité.On raye M5 et on place cette machine après M1,M3 On place de même les machines M4 et M6 72 o Méthode des rangs moyens Reprenons le même ilot de fabrication avec les gammes définies dans le tableau précédent : On va réorganiser les machines par ordre croissant de leur rang moyen, ce qui nous donne le tableau suivant : 73 Chapitre 3 Les méthodes de résolution 8 Les méthodes exactes 8.1 La programmation dynamique 8.1.1 Histoire Le terme programmation dynamique était utilisé dans les années 1940 par Richard Bellman pour décrire le processus de résolution de problèmes où on trouve les meilleures décisions les unes après les autres. En 1953, il en donne la définition moderne, où les décisions à prendre sont ordonnées par sous-problèmes et le domaine a alors été reconnu par IEEE (Institue of electrical and Electronics Engineers) comme un sujet d'analyse de systèmes et d’ingénierie. La contribution de Bellman est connu sous le nom d'équation de Bellman, qui présente un problème d'optimisation sous forme récursive. Bellman explique l'idée du terme programmation dynamique dans son autobibliographie, Eye of the Hurricane: An Autobiography. Il dit : « I spent the Fall quarter (of 1950) at RAND. My first task was to find a name for multistage decision processes. An interesting question is, Where did the name, dynamic programming, come from? The 1950s were not good years for mathematical research. We had a very interesting gentleman in Washington named Wilson. He was Secretary of Defense, and he actually had a pathological fear and hatred of the word research. I’m not using the term lightly; I’m using it precisely. His face would suffuse, he would turn red, and he would get violent if people used the term research in his presence. You can imagine how he felt, then, about the term mathematical. The RAND Corporation was employed by the Air Force, and the Air Force had Wilson as its boss, essentially. Hence, I felt I had to do something to shield Wilson and the Air Force from the fact that I was really doing mathematics inside the RAND Corporation. What title, what title, what name, could I choose? In the first place I was interested in planning, in decision making, in thinking. But planning, is not a good word for various reasons. I decided therefore to use the word “programming”. I wanted to get across the idea that this was dynamic, this was multistage, this was time-varying. I thought, let's kill two birds with one stone. Let's take a word that has an absolutely precise meaning, namely dynamic, in the classical physical sense. It also has a very interesting property as an adjective, 74 and that it's impossible to use the word dynamic in a pejorative sense. Try thinking of some combination that will possibly give it a pejorative meaning. It's impossible. Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it as an umbrella for my activities. » L'adjectif dynamique était donc choisi par Bellman pour insister sur l'aspect temporel des problèmes, et parce que le terme impressionnait. Le mot programmation référait à l'utilisation d'une méthode pour trouver un programme optimal dans un sens militaire : emploi du temps ou de la logistique. 8.1.2 Définition La programmation dynamique est une technique efficace pour résoudre des problèmes d'optimisation. Il est basé sur la décomposition du problème initial en problèmes plus simples et la résolution de ces sous-problèmes à partir des plus simples. Le but de la programmation dynamique est de trouver un objet optimal à partir d'un ensemble donné d’objets. Deux propriétés principales d’un problème suggèrent qu’il peut être résolu à l’aide de la programmation dynamique : • Chevauchement de sous-problèmes. • Le principe d’optimale de BELLMAN 8.1.3 Chevauchement de sous-problème C’est le fait d’avoir à faire le même calcul plusieurs fois. Afin d’illustrer ce principe, l’exemple classique est celui de la suite de Fibonacci qui est définie par : F0=0 F1=1 Fn=Fn-1 +Fn-2, On prend n=5, d’après la définition de la suite de Fibonacci, on a besoin de calculer F4+F3 et pour calculer F4, on a besoin de calculer F3+F2 et pour calculer F3, on a besoin de calculer F2+F1. Mathématiquement : F5=F4+F3 F4=F3+F2 F3=F2+F1 On calcule donc deux fois F3 et F2 Afin de rendre les choses bien claires, j’ai illustré tout ça en un arbre des appels récursifs : 75 En jaune : les 2 fois où l’on appelle Fib(3). En noir : les 3 fois où l’on appelle Fib(2). En orange : les 5 fois où l’on appelle Fib(1). En gris : les 3 fois où l’on appelle Fib(0). Alors, la suite de Fibonacci vérifie le principe de chevauchement. Maintenant, imaginons qu’on est censé de calculer Fib(42), on aura une arbre des appels récursifs plus grande que celle-là. Et pour voir le temps d’exécution pris par ce calcul, on réalise ce programme : On voit que le programme a pris 6,648 s pour s’exécuter et donner la valeur de Fib(42). Il s’agit alors d’une grande complexité par rapport à cette petite (relativement petite) valeur saisie, car la complexité de l’algorithme récursif est exponentielle. Là où intervient la programmation dynamique avec ses deux méthodes : la mémoïsation et la tabulation ➢ Recherche dichotomique 76 La recherche dichotomique ne vérifie pas le principe de chevauchement mais on a fait appel à ce contre-exemple pour mettre en œuvre la différence entre les cas qui vérifient ce principe et qui ne le vérifient pas. Principe : Pour chercher un élément x dans un tableau T trié on ordre croissant : On calcule l’indice du milieu du tableau. On compare x avec T[milieu] - Si x=T[milieu], on retourne l’indice et on quitte le programme. - Si x>T[mlieu], on cherche x dans la partie supérieure du tableau. - Si x<T[milieu], on cherche x dans la partie inférieure du tableau. Remarque : La recherche dichotomique ne s’applique que sur les tableaux triés auparavant Exemple : On prend l’exemple d’un tableau T de taille n=7 On illustre dans cet arbre des appels récursifs les milieux possibles pour ce tableau T, d’après le programme ci-dessus, qui peuvent être égale à la valeur recherchée 77 Si la valeur recherchée correspond à la case du tableau d’indice 0 par exemple, on remarque alors que pour aller du milieu d’indice 3 à celui d’indice 0 on a un seul chemin à parcourir. Il n’y a pas de sous problèmes communs. Par conséquent, ce n’est pas la peine de stocker des solutions ne seront pas réutilisées. Alors, la recherche dichotomique ne vérifie pas le principe de chevauchement de sous problème. 8.1.4 Mémoïsation Le programme mémoïsé pour un problème est similaire à la version récursive avec une petite modification qui consiste à regarder dans un dictionnaire avant de calculer la solution. Nous créons un dictionnaire vide. Chaque fois que nous avons besoin de la solution à un sousproblème, nous examinons d’abord le dictionnaire. Si la valeur précalculée est là, nous renvoyons cette valeur. Sinon, nous calculons la valeur et plaçons le résultat dans le dictionnaire afin qu'il puisse être réutilisé ultérieurement. ➢ Résolution de problème de Fibonacci Après savoir la méthode de mémoïsation, pour calculer Fib (5) il suffit de calculer Fib(1), Fib(2), Fib(3), Fib(4) et les sauvegardent au lieu de répéter l'opération 14 fois. Traitement Étape 1 : on initialise les valeurs de tableau par NIL= -1. NIL NIL NIL NIL 78 NIL NIL Étape 2 : Enregistrer les résultats ; à chaque case i de mémoire on sauvegarde Fib (i) par l’opération suivante : Si N<=1 Fib(N)=N SINON Fib(N)=Fib(N-1)+Fib(N-2) Fib(0)=0 Fib(1)=1 Fib(2)=1 Fib(3)=2 Fib(5)=5 LE PROGRAMME EN C : Alors, en utilisant la méthode de mémoïsation le programme s’exécute en 2.038 au lieu de 6.362 AVEC MEMOISATION SANS MEMOISATION 79 8.1.5 Tabulation Le programme tabulé pour un problème donné crée une table de manière ascendante et renvoie la dernière entrée de la table. Par exemple, pour le même nombre de Fibonacci, nous calculons d’abord Fib(0) puis Fib(1) puis Fib(2) puis Fib(3) et ainsi de suite. Nous construisons donc littéralement les solutions de sous-problèmes ascendants. ➢ Différence entre Tabulation et mémoïsation Bien que la mémorisation et la tabulation fonctionnent en accédant aux résultats stockés, elles diffèrent légèrement en raison de la façon dont ces valeurs sont calculées et stockées Dans le cadre de la mémorisation, l'ordre dans lequel nous résolvons les sous-problèmes n'est pas important car il s'agit d'une approche descendante. Tous les résultats des sous-problèmes seront utilisés pour calculer le résultat du problème principal à la fin. Mais avec la tabulation, ce ne sera pas le cas. Puisque la tabulation est une approche ascendante, nous devons être prudents en sélectionnant l'ordre dans lequel les sous-problèmes sont résolus. 8.1.6 Principe d’optimalité de BELLMAN Enoncé du principe : Si la solution optimale d’un problème peut être calculée à partir de solution optimale des sous problèmes, alors on dit que ce problème satisfait le principe d’optimalité de BELLMAN, ou on dit que ce problème à une sous-structure optimal. Exemple illustratif : problème de plus court chemin. “En théorie des graphes, le problème de plus court chemin est le problème algorithmique qui consiste à trouver un chemin d'un sommet à un autre de façon que la somme des poids des arcs de ce chemin soit minimale.” Voyons ce graphe pondéré qui a des distances entre les nœuds, notre objectif dans ce problème est d'aller du nœud A au nœud J, en empruntant le chemin le plus court possible, et en passant par les étapes 1,2, et 3 séquentiellement. Pour ce faire, on va définir une fonction F(X) qui est la distance minimale requise pour atteindre J à partir d’un nœud X (X= {A, B, C, D, E, F, G, H, I}). 80 En commençant du J, nous savons que F(J)=0, car il n’y a pas de cout de chemin pour de se rendre à lui-même. En remontant un niveau, on peut calculer F(H) et F(I), dont on sait qu’ils sont 3 et 4 respectivement, en se basant simplement sur les arrêts pondérés. Maintenant, c’est là que les choses commencent à devenir intéressants, en remontant d’un niveau, calculons F(E) qui sera le minimum de 1+F(H) et 4+F(I), on va procéder de la même manière pour F(F) et F(G). F(E)=min {1+F(H), 4+F(I)} = min {1+3, 4+4} = 4; F(F)=min {6+F(H), 3+F(I)} = min {6+3, 3+4} = 7; F(G)=min {3+F(H), 3+F(I)} = min {3+3, 3+4} = 6. Dans la 3-ème étape nous avons 3 options car il y a 3 chemin, donc : F(B)=min {7+F(E), 4+F(F), 6+F(G)} = min {7+4, 4+7, 6+6} = 11 F(C)=min {3+F(E), 2+F(F), 4+F(G)} = min {3+4, 2+7, 4+6} = 7 F(D)=min {4+F(E), 1+F(F), 5+F(G)} = min {4+4, 1+7, 5+6} = 8 Finalement, nous somme au nœud A, en utilisant la distance que nous avons déjà calculer pour B, C et D, nous pouvons calculez le cout total du chemin de A à J qui est égale à : F(A)=min {2+F(B), 4+F(C), 3+F(D)} = min {2+11, 4+7, 3+8} = 11 Puisque les 2 nœuds C et D nous donne la valeur 11 donc on va avoir 2 chemins optimales A->C et de A->D. Continuant notre raisonnement sur le chemin de A->C. On a F(C)=min {3+F(E), 2+F(F), 4+F(G)} = min {3+4, 2+7, 4+6} =min {7,9,10} = 7 Remarquant que F(E) qui donne la minimum valeur (7) donc on aura : A->C->E. On a F(E)=min {1+F(H), 4+F(I)} = min {1+3, 4+4} = {4,8} = 4 On trouve le 1-er chemin optimal : A->C->E->H->J. En somme en trouvera 3 chemin optimal : A->C->E->H->J, A->D->F->I->J, A>D->E->H->J. Nous pouvons remarquer qu’on a pu trouver la distance minimale de A à J en combinant les distances minimales entre les nœuds intermédiaires et le nœud J. Conclusion : le problème de plus court chemin a une sous-structure optimale. Contre-exemple: problème de plus long chemin. Maintenant, on va traiter un exemple issu d'un problème qui ne satisfait pas le principe d’optimalité de BELLMAN, c’est le problème de plus long chemin. “En théorie des graphes , le problème du plus long chemin consiste à déterminer la plus longue chaîne élémentaire dans un graphe orienté. Une chaîne est élémentaire si elle ne passe pas deux fois par le même sommet.” Enoncé du problème : Nous disposons d'un graphe avec des nœuds, le but de ce problème est de trouver le chemin le plus long entre 2 sommets sans répéter un arrêt. 81 Supposons qu’on veut trouver le plus long chemin de A->C, donc on va emprunter le chemin de A->E->D->C car on le comparant avec le chemin A->B->C, on remarque qu’il est plus long que ce dernier. Raisonnant maintenant par absurde, on va supposer que le principe d ‘optimalité de BELLMAN s’appliquer à ce problème par conséquence, nous devrions pouvoir diviser le problème en sous partie optimales, c’est dire qu’on peut écrire : PLUS_LONG_CHEMIN(A-C) = PLUS_LONG_CHEMIN(A-D) +D-C Examinant en 1-ér lieu le PLUS_LONG_CHEMIN(A-D), si on part de A->E->D on constate qu’il existe un autre chemin qui est plus long que ce dernier, qui est le chemin A>B->C->D. D’où : PLUS_LONG_CHEMIN(A-C) = PLUS_LONG_CHEMIN(A-D) +D-C = A-BC-D+D-C. Nous pouvons remarquer qu’on vient de répéter un bord ce qui n’est pas autorisé dans ce problème. Conclusion : Les sous solutions ne se combinent pas pour former une solution optimale globale. Le problème du plus long chemin n'a pas une sous-structure optimale. 82 8.1.7 Comment résoudre un problème de programmation dynamique Le développement d’un algorithme de programmation dynamique se devise en quatre étapes : 1. Identifie-s'il s'agit d'un problème de programmation dynamique : Tous les problèmes satisfont la propriété de sous-problèmes qui se chevauchent et satisfont également à la propriété de sous-structure optimale, ils peuvent être résolu en utilisant la programmation dynamique, 2. Identifiez les variables du problème : Nous devons exprimer le problème en termes de paramètres de fonction et voir lesquels de ces paramètres changent. 3. Exprimer clairement la relation de récurrence : C'est une étape importante. Exprimer la relation de récurrence aussi clairement que possible renforcera la compréhension du problème et facilitera considérablement le reste. 4. Faire la mémoïsation (ou la tabulation). 8.1.8 Problème de sac à dos On va maintenant traiter un exemple concret de la programmation dynamique, c’est le problème de sac à dos. Le problème de sac à dos est l’un des 21 problèmes NP-complet de Richard Karp esxposés dans son articlede 1972 . (en anglais: Knapsack problem). L’énoncé de ce problème : " Etant donné plusieurs objets possédants chacun un poids et une valeur et étant donné un poids maximum pour le sac, quels objets faut-il mettre dans le sac de manière à maximiser la valeur totale sans dépasser le poids maximal autorisé pour le sac ? " . Alors, notre objectif est de trouver la combinaison des objets qui vont nous permettre d’avoir la valeur maximale sans dépasser la capacité du sac à dos. Il existe multiples façons de remplir le sac à dos. Nous, on va traiter 0-1 Knapsack problem, càd : On a deux possibilités soit on va prendre l’objet, soit on ne va pas le prendre. Les données du problème peuvent être exprimés en termes mathématiques. Les objets sont numérotés pour l’indice i variant de 1 à n. On peut utiliser un codage binaire : 0 On ne met pas l’objet dans le sac. Xi = 1 On met l’objet dans le sac. 83 Pour tout i appartient à {1,n} MAX V= ∑𝑛𝑖=1 𝑣𝑖. 𝑥𝑖 La fonction objective : V: la valeur optimale recherchée. vi: la valeur de l’objet i. ∑𝑛𝑖=1 𝑃𝑖. 𝑥𝑖 <= P La contrainte du poids : P: la capacité du sac à dos. pi: le poids de l’objet i. La contrainte de signe : xi>=0 , i appartient à {1, n} Dans ce cas, nous disposons d'un sac à dos à poids maximal P=7 et 5 objets chaque objet possède un poids pi et une valeur vi, i = {1,2,3,4,5}. Objet 1 2 3 4 5 Vi 5 2 3 4 2 Pi 4 3 2 3 1 ➢ Formulation du problème ▪ Les variables de décision On définit la variable de décision xi associée à un objet i de la façon suivante : 1 si l'objet i est inclus Xi= avec : i= {1,2,3,4,5} 0 si l'objet est exclu ▪ Les contraintes La somme des poids de tous les objets dans le sac doit être inferieure a 7. X1.p1+X2.p2+X3.p3+X4.p4+X5.p5≤7 ▪ La fonction objective La fonction objective a pour but de maximiser la valeur totale des objets dans le sac à dos. Max z=X1.v1+X2.v2+X3.v3+X4.v4+X5.v5 84 ➢ Résolution du problème avec la programmation dynamique 1- Identifie-s'il s'agit d'un problème de programmation dynamique ▪ Sous-structure optimale Le problème de sac à dos à la propriété de sous-structure optimale, c’est à dire qu’on peut trouver la valeur maximale que doit contenir le sac à dos de capacite 7, en combinant les valeurs maximales que peuvent contenir les sacs à dos de capacite 1,2,3,4,5 et 6. ▪ Chevauchement de sous problème Nous avons déjà mentionné dans la formulation du problème que pour chaque objet on a le choix entre soit le mettre dans le sac à dos ou le laisser de côté, puisque l‘énonce nous fournis 5 objets, on pourrait représenter les différentes choix grâce à un arbre : Nous pouvons remarquer que des appels récursifs sont répéter, donc il y a un chevauchement de sous problème. 2- Identifiez les variables du problème Les deux paramètres susceptibles de changer pour chaque sous problème sont : i :l’indice de l’élément . C : capture disponible 3- Exprimer clairement la relation de récurrence Le cas de bas de récursivité serait lorsqu’il n’y a aucun élément à mettre dans le sac, ou lorsque la capacite est nulle ; Pour le 2 -ème cas c’est lorsque le poids de l ‘objet est supérieure à celui du sac(pi>c), dans ce cas on va exclure l’objet du sac à dos et on va prendre la valeur de l’objet précèdent avec la même capacite ; Le 3 -ème cas c’est lorsque le poids de l’objet est inférieur ou égale à la capacite du sac à dos, dans ce cas on a 2 possibilités soit on inclut l’objet si sa valeur maximise la valeur totale, sinon on l’exclut et on prend la valeur de l’élément précèdent en gardant la même capacite. Ce qui se traduit mathématiquement par : Soit f la fonction qui définit la valeur optimale du sac à dos : f(i,c)=0 si c = 0 f(i,c)= f (i-1, c) si pi > c f(i,c)=max {f (i-1, c), vi + f(i-1, c-pi)} si pi <= c 85 4- Faire la mémoïsation Passons maintenant à résoudre le problème en utilisant les formules récursives obtenues : On va stocker les valeurs dans un tableau à 2 dimensions. Les colonnes représentent la capacité des sous sacs à dos et le lignes représentes l’indice de l’élément. La 1-er ligne et la 2 -ème colonne représentent les cas de bas de la fonction récursive, donc ces cases prennent la valeur 0. Prenant le cas de la case de coordonnée (1,1), puisque pi=3 > c=1 donc f (1,1) =f (0,1) =0. Même cas pour la case de coordonne (1,2) : f (1,2) = 0. Mais pour la case (1,3), on a pi=c=3 donc : f (1,3) =max {f (0,3), 2+f (0,1)} =max {0,2} =2. On va procéder de la même manière pour les autres cases jusqu’à ce qu’on trouve la valeur maximale de la sélection des 5 objets qui est égale à 10. On a pu connaitre la meilleure valeur, mais quels articles devons-nous sélectionner pour aboutir à ce résultat ? L'idée est de commencer de la dernière case et revenir en arrière, “nous incluons un élément si la valeur courante et la valeur de la ligne au-dessus sont différentes, sinon il sera exclu”. Commençons par la case (5,7), la valeur qui est directement au-dessus de 10 est 9, comme 9 est différente de 10, donc l’élément 5 est inclus en soustrayant son poids du capacite du sac à dos la nouvelle capacite du sac à dos est c=5, passant à la case (4,5), étant donné que 6 et 7 sont différents l’élément 4 est aussi inclus d’où c=1, passant à la case (3,1), vu que la valeur 2 se répète l’élément 3 n’est pas inclus, passant à la case (2,1) en gardant la capacite précédente, puisque 2 est 0 sont différents l’élément 2 est inclus et on obtient c=0 , on a rien à mettre dans le sac d’où l'élément 1 n’est pas inclus. Recapitulons, les éléments sélectionnés sont : 5,4, et 2 86 Implémentation de l’algorithme en c++ Comparaison : 87 8.2 Branch & Bound 8.2.1 Introduction Pour plusieurs problèmes, en particulier les problèmes d’optimisation, l’ensemble de leurs solutions est fini (en tous les cas, il est dénombrable). Il est donc possible, en principe, d’énumérer toutes ces solutions, et ensuite de prendre celle qui nous arrange. L’inconvénient majeur de cette approche est le nombre prohibitif du nombre de solutions : il n’est guère évident d’effectuer cette énumération. La méthode de branch and bound (procédure par évaluation et séparation progressive) consiste à énumérer ces solutions d’une manière intelligente en ce sens que, en utilisant certaines propriétés du problème en question, cette technique arrive à éliminer des solutions partielles qui ne mènent pas à la solution que l’on recherche. De ce fait, on arrive souvent à obtenir la solution recherchée en des temps raisonnables. Bien entendu, dans le pire cas, on retombe toujours sur l’élimination explicite de toutes les solutions du problème. Pour ce faire, cette méthode se dote d’une fonction qui permet de mettre une borne sur certaines solutions pour soit les exclure soit les maintenir comme des solutions potentielles. Bien entendu, la performance d’une méthode de branch and bound dépend, entre autres, de la qualité de cette fonction (de sa capacité d’exclure des solutions partielles tôt). 8.2.2 Définition L’algorithme de séparation et évaluation, plus connu sous son appellation anglaise Branch and Bound, repose sur une méthode arborescente de recherche d’une solution optimale par séparations et évaluations, en représentant les états des solutions par un arbre d’états, avec des nœuds, et des feuilles. 8.2.3 Relaxation linéaire Consiste à élargir l’ensemble des solutions et d’explorer un espace plus large mais plus facile à optimiser. Exemple : (P) Min Z=x1-x2 -4x1+6x2≤ 9 x1+x2≤ 4 x1,x2≥ 0 x1,x2 ∈ ℕ La relaxation linéaire donne : (LP ) Min Z=x1-x2 88 8.2.4 Principes ➢ Idée générale L’algorithme branch-and-bound explore l’arbre des possibilités. Il utilise pour cela un parcours en largeur. À chaque nœud qu’il rencontre, il cherche à estimer un intervalle aussi étroit que possible estimant la longueur d’un plus court chemin obtenu à partir de la branche de l’arbre où nous sommes. ➢ Le principe de séparation La phase de séparation consiste à diviser le problème en un certain nombre de sous-problème qui ont chacun leur ensemble de solutions réalisable, de telle sorte que tous ces ensembles forment un recouvrement (idéalement une partition) de l’ensemble S. Les ensembles de solutions (et leur sous-problème associés) ainsi construits ont une hiérarchie naturelle en arbre, qui s’appelle arbre de recherche ou arbre de décision. Exemple : Par exemple, un PLNE ayant une variable x1 € {0 , 9} peut être résolu en posant d’abord x1 <= 4, puis x1 >= 5 Voici un schéma explicatif : 89 ➢ La procédure de l’évaluation L’évaluation d’un nœud de l’arbre de recherche a pour but de déterminer l’optimum de l’ensemble des solutions réalisable associé au nœud en question ou, au contraire de prouver que cet ensemble ne contient pas de solution intéressante pour la résolution du problème. On peut faire l’évaluation soit par la méthode graphique soit par la méthode simplexe. 8.2.5 Application 1 (minimisation) Dans cet exemple on doit traiter un problème de minimisation qu’est définie par : ( P ) : Min Z = x1 – 2*x2 -4*x1 + 6*x2 ≤ 9 x1 + x2 ≤ 4 x1,x2 ≥ 0 x1,x2 ℕ Première étape : relaxation du problème linéaire La première chose à faire est de relaxer le problème (P) on obtient un problème ( P0) par la suppression des contrainte d’intégrité ( x1,x2 ℕ ) , qu’on peut résoudre soit par la méthode de simplexe ou quand a fait dans cette exemple par la méthode graphique Voici le problème relaxé : 90 ( P0 ) : Min Z = x1 – 2*x2 -4*x1 + 6*x2 ≤ 9 x1+ x2 ≤ 4 x1,x2 ≥ 0 Deuxième étape : séparation du problème relaxé On trouve ci-dessous Le domaine admissible du problème relaxé avec les coordonnés de ces points sommés : On calcule les images de ces points sommés par la fonction objective et on choisit la plus petite image comme solution optimale du problème relaxé : Les images des points sommés : • Pour le point A( 0 , 1.5 ) • Pour le point B( 1.5 , 2.5 ) --------> Z = -3.5 • Pour le point C( 4 , 0 ) problème ( P0 ) est : • x1=1.5 x2=2.5 --------> Z = -3 --------> Z = -3 Donc la solution optimale du Z=-3.5 On remarque ici que cette solution n’est pas entier dont on doit séparer le problème ( P0 ) on deux sous-problème (P1) et (P2) par rapport aux variable x2 . REMARQUE : Pour le choix de la variable qu’on doit séparer avec il se fait au hasard on peut séparer par rapport à la variable x1 comme on peut séparer par rapport a la variable x2 Dans cet exemple on a choisi de séparer par rapport à x2 91 Voici les deux problèmes (P1) et (P2) qui ont la même structure que (P0) , on a ajouté a (P1) la contrainte x2 ≥3 et a (P2) la contrainte x2 ≤2 Le problème linéaire P1 : ( P1 ) : Min Z1=x1-2x2 • -4x1+6x2≤ 9 • x1+x2≤ 4 • x2 ≥3 • x1,x2≥ 0 • -4x1+6x2≤ 9 • x1+x2≤ 4 • x2 ≤2 • x1,x2≥ 0 Le problème linéaire P2 : ( P2 ) : Min Z2=x1-2x2 Troisième étape : résolution des deux sous-problème (P1) et (P2) D’après le graphe si dessous on remarque que le problème (P1) n’admet aucune solution admissible (aucune intersection entre le domaine du problème (P0) et celle du (P1)). Et pour le problème (P2) on doit exécuter les mêmes étapes de la résolution du problème (P0) 92 Pour le problème (P1) il n'y a pas de solution possible. Pour le problème (P2), la région réalisable avec les cordonnés de ces points sommés est représentée dans le schéma suivant : On calcule les images de ces points sommé par la fonction objective et on choisit la plus petite image comme solution optimale du problème (P2) : Les images des points sommés : • Pour le point A( 0 , 1.5 ) • Pour le point B( 0.75 , 2 ) --------> Z = -3,25 • Pour le point C( 2 , 2 ) --------> Z = -2 • Pour le point D( 4 , 0 ) --------> Z = 4 • Donc la solution optimale du problème ( P2 ) est : x1=0.75 x2=2 --------> Z = -3 Z=-3.25 Quatrième étape : séparation du problème relaxé ( P2 ) On remarque ici que x1 n’est pas entier donc on doit séparer le problème ( P2 ) en deux sousproblèmes (P21) et (P21) par rapport à x1 (car elle est la seule variable qui n’est pas entier dans la solution ,donc on ‘est obligé de faire la séparation par rapport à x1 ) . Les deux sous-problèmes (P21) et (P21) sont définie par : Le problème linéaire P21 : ( P21 ) : Min Z21 = x1-2x2 93 • -4x1+6x2≤ 9 • x1+x2≤ 4 • x2 ≤2 • x1≤ 0 • x1,x2≥ 0 • -4x1+6x2≤ 9 • x1+x2≤ 4 • x2 ≤2 • x1 ≥1 • x1,x2≥ 0 Le problème linéaire P22 : ( P22 ) : Min Z22 =x1-2x2 D’après le graphe ci-dessous on constate que les deux problèmes ont des solutions admissibles, donc on résout le problème (P21) puis (P22) : Cinquième étape : résolution des deux sous-problème (P21) et (P22) Pour le problème (P21) la région réalisable et la cordonné du point sommé est représentée sur le schéma ci-dessous 94 Alors, l’image du seul point sommé A( 0 ,1.5 ) par rapport à la fonction objectif est Z = -3 qui représente la solution optimale pour (P21) mains n’est pas pour notre problème initiale ( P ) Pour le problème (P22), la région réalisation avec les cordonnées des points sommés est représentée dans le schéma suivant : On calcule les images de ces trois points sommés par la fonction objective et on choisit la plus petite image comme solution optimale du problème (P22) : Les images des points sommés : • Pour le point A( 1 , 2 ) ---------> Z = -3 • Pour le point B( 2 , 2 ) ---------> Z = -2 • Pour le point C( 4 , 0 ) ---------> Z = 4 95 Donc la solution optimale du problème ( P22 ) est : • x1=1 x2=2 Z=-3 Donc en résument ce qu’on a fait jusqu’à le moment par un schéma explicatif qui contient les différents problèmes qu’on a résolus avec ses solutions optimales Puisque la solution du problème relaxé ( P22 ) est entier et ( Z21=-3 ) ≥ ( Z22=-3 ) donc on arrête ici avec la solution du problème ( P22 ) comme une solution optimale pour le problème initiale ( P ) 8.2.6 Application 2(maximisation) (P) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 x,y≥ 0 x,y ℕ Soit le programme linéaire (P0) associé à (P): (P0) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 x,y≥ 0 96 La méthode graphique nous donne comme solution optimale : (P0) x = 3.5, y = 3.33 , z0max= 24.16 La solution optimale de (P) doit vérifier soit y ≤ 3, soit y ≥ 4 97 Formons les 2 problèmes issus de (P0) : (P1) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x,y≥ 0 (P1) x = 3.6, y = 3, z1max = 24 (P2) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y≥4 x,y≥ 0 (P2) x = 2.5, y = 4, z2max = 20.5 98 Puisque z1max > z2max on choisit de travailler avec (P1) pour l’instant. Si la solution optimale de (P0) vérifie les contraintes de (P1), elle vérifiera aussi soit x ≤ 3 ou x ≥ 4. Formons 2 nouveaux problèmes issus de (P1): Formons les 2 problèmes issus de (P1) : (P3) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≤3 x,y≥ 0 99 (P3) x = 3, y = 3, z3max = 21 (P4) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≥4 x,y≥ 0 (P4) x = 4, y = 1.66, z4max = 23.33 Puisque z4max > z3max on choisit de travailler avec (P4) pour l’instant : soit y ≤ 1 ou y ≥ 2 100 (P5) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≥4 y≤1 x,y≥ 0 (P5) x = 4.2, y = 1, z5max = 23 (P6) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≥4 y≥2 x,y≥ 0 Pas de solutions réalisables 101 Formons les 2 problèmes issus de (P5) : (P7) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≥4 y ≤1 x≤4 x,y≥ 0 (P7) x = 4, y = 1, z6max = 22 (P8) MAX Z=5x+2y 2x+3y≤17 10x+3y≤ 45 y ≤3 x≥4 y≤1 x≥5 x,y≥ 0 Pas de solutions réalisables 102 Résumé -(P7) possède une solution optimale entière réalisable pour (P). -Pour savoir si elle est optimale, il faut examiner les problèmes que nous avons laissés de côté en créant des coupes. -(P8) et (P6) : on peut les négliger (pas de solution réalisables). -(P3) : on peut le négliger car z6max = 22 > 21 = z3max. -(P2) : on peut le négliger car z6max = 22 > 20.5 = z2max. -L’ajout de coupes à (P2) ne peut donner de solutions où la fonction objective est plus grande que 20,5. Donc, x = 4, y = 1 et z6max = 22 est la solution optimale de (P). Voici un schéma montrant toutes les étapes effectuées 103 9 Les méthodes approchées 9.1 Chaines de Markov 9.1.1 Introduction Lorsque deux systèmes identiques à un instant donné peuvent avoir des comportements différents dans le futur, on est amené à introduire une suite de variables aléatoires (Xt)t pour décrire leurs évolutions : Xt servant à définir l’état du système étudié à l’instant t. Si le système étudié est une population, l’état du système à un instant donné peut être décrit simplement par un nombre lorsqu’on s’intéresse uniquement à la taille de cette population, ou par un ensemble de nombres tels que l’ensemble des positions de chaque individu lorsqu’on s’intéresse à la répartition spatiale de la population. On va ici se limiter à des systèmes dont l’état peut être décrit par une variable aléatoire ou un vecteur aléatoire discret. En général l’évolution futur d’un système dépendant au moins de son état présent, les variables aléatoires décrivant l’état du système à chaque instant ne pourront pas être considérées comme indépendantes. On va s’intéresser aux situations où l’évolution future d’un système ne dépend du passé qu’au travers de son état présent et pour simplifier on n’étudiera pas l’évolution du système en temps continu, mais son évolution en une Suite infinie d’instants 0 = t0 < t1 < . . . < tn < .... On travaillera donc avec une suite de variables aléatoires discrètes (Xn)n∈N, chaque variable aléatoire étant à valeurs dans un ensemble fini ou infini dénombrable noté X que l’on identifiera à {1, . . ., N} si X est composé de N éléments et à N* si X est infini. 9.1.2 Exemple introductif L’observation du ciel a permis de déduire les statistiques suivantes : – Une journée ensoleillée est suivie d’une journée ensoleillée avec une probabilité 0, 9, – Une journée ensoleillée est suivie d’une journée pluvieuse avec une probabilité 0, 1, – Une journée pluvieuse est suivie d’une journée ensoleillée avec une probabilité 0, 5, – Une journée pluvieuse est suivie d’une journée pluvieuse avec une probabilité 0, 5. En introduisant la suite de variables aléatoires (Xn)n∈N représentant l’état du ciel (S pour soleil ou P pour pluie) à la date n ≥ 0, on peut écrire les probabilités conditionnelles : Pr( Xn+1 = S | Xn = S )= 0, 9 104 Pr Xn+1 = S | Xn = P = 0, 5 Naturellement : Pr( Xn+1 = S | Xn = S) + Pr( Xn+1 = P | Xn = S) = 1 Si on s’intéresse à l’évolution de l’état du ciel au fil du temps, on peut représenter le phénomène par le graphe suivant : Par exemple lorsque l’on est à l’état Soleil, avec une probabilité 0,9 on reste dans cet état, et on va vers l’état Pluie avec une probabilité 0,1. D’où l’appellation probabilités de transition pour les probabilités conditionnelles ci-dessus. Notons T la matrice d’ordre 2 (appelée matrice de transition) : Et intéressons-nous à la distribution πn de Xn, définie par : πn = Pr(Xn = S) , Pr(Xn = P) . . On calcule avec la formule des probabilités totales : Pr(Xn+1 = S) = Pr(Xn+1 = S et Xn = S) + Pr(Xn+1 = S et Xn = P) = Pr(Xn = S) · Pr(Xn+1 = S | Xn = S) + Pr(Xn = P) · Pr(Xn+1 = S | Xn = P) Et de même : Pr(Xn+1 = P) = Pr(Xn = S) · Pr(Xn+1 = P | Xn = S) + Pr(Xn = P) · Pr(Xn+1 = P | Xn = P) Sous forme matricielle cela se résume en : πn+1 = πn · T (remarquons qu’il s’agit du produit à gauche de T par la matrice ligne πn) Par récurrence immédiate on peut écrire : ∀n ∈ N, πn = π0 · Tn. 105 9.1.3 Définitions Une chaîne de Markov est un processus stochastique (Xt)t ∈T Markovien, homogène et où T est dénombrable Un processus stochastique est une famille de variables aléatoires (Xt)t∈T où T ⊂ R+. Un processus (Xt)t∈T est Markovien si et seulement si le futur dépend uniquement du présent : ∀t1 < t2 < · · · < tn < tn+1 ∈ T , ∀A ⊂ S P(Xt n+1 ∈ A| Xt1 Xt2 , . . . , Xtn ) = P(Xt n+1 ∈ A| Xt n ) Un processus (Xt)t∈T est homogène si et seulement si les probabilités conditionnelles ne dépendent pas du temps: ∀t, t’ ∈ T, s > 0\t + s, t’ + s ∈ T, A ⊂ S P(Xt+s ∈ A|Xt) = P(Xt’+s ∈ A|Xt’ ) 9.1.4 Graphe de transition Le graphe de transition est une autre représentation d'une chaîne de Markov permettant de déduire les propriétés qualitatives. Ce graphe orienté possède un sommet pour chaque état de la chaîne et un arc d'un sommet vers un autre si la probabilité de cette transition est non nulle. Il convient de diviser les états d'une chaîne en classes, ensembles tels qu'il existe un chemin en chaque sens entre toute paire de sommets d'une même classe, c'est-à-dire les composantes fortement connexes du graphe de transitions. Définition Une chaîne de Markov homogène à ensemble d’états E peut être représentée par le graphe orienté valué G tel que : – ses sommets sont les états de E, – il y a un arc du sommet i vers le sommet j si 𝑝𝑖,𝑗 > 0, – la valuation de l’arc i → j est la probabilité de transition 𝑝𝑖,𝑗 106 9.1.5 Chaines réductibles et irréductibles Définition Une chaîne de Markov est dite irréductible si chaque état est accessible à partir de chaque autre état en un nombre fini d’étapes. Cela se traduit par : ∀(𝒊, 𝒋) ∈ 𝑬 × 𝑬, ∃𝒏 ∈ 𝑵, 𝒑𝒏𝒊,𝒋 > 𝟎 On peut montrer que la relation « l’état i est accessible à partir de j et l’état j est accessible à partir de i » définit une relation d’équivalence sur l’ensemble des états E. Les classes d’équivalences de cette relation sont les composantes fortement connexes du graphe orienté G. Par définition, un graphe représentant une chaîne de Markov irréductible est fortement connexe (il ne présente qu’une seule classe d’équivalence) Définition Si une chaîne de Markov n’est pas irréductible, alors elle est dite réductible et G admet plusieurs composantes fortement connexes. Une composante qui ne mène à aucune autre est dite finale, sinon les états qui la composent sont dits transients (ou transitoires). Remarquons qu’une fois qu’on a quitté une classe à états transients, on ne peut pas y retourner (par définition de la classe d’équivalence). Exemple Considérons une chaîne de Markov réductible. Lorsque les composantes finales sont toutes réduites à un seul état, on dit que l’état correspondant est absorbant, et que la chaîne ellemême est absorbante. La forme canonique de la matrice de transition devient : 𝑃= 𝐼𝑚−𝑠,𝑚−𝑠 𝑅𝑚−𝑠 0 𝑄𝑠,𝑠 Où s est le nombre d’états transitoires (et donc n = m − s est le nombre d’états absorbants. 9.1.6 Chaines périodiques et apériodiques Définition Un état i d’une chaîne de Markov est dit périodique (de période p) si: 107 𝒑 = 𝒑𝒈𝒄𝒅{𝒏, 𝑷𝒓(𝑿𝒏 = 𝒊|𝑿𝟎 = 𝒊) > 𝟎} > 𝟏 Autrement dit, si on considère le graphe associé à la chaîne de Markov, tous les cycles partant de i et revenant en i ont une longueur divisible par p > 1. Lorsque p = 1, l’état est dit apériodique. Il est donc légitime de parler de la période d’une classe, et de classe périodique (ou apériodique). Pour une chaîne de Markov irréductible (qui a donc une seule classe), on peut parler de chaîne périodique ou apériodique. On remarque aussi que dès que le graphe d’une chaîne de Markov irréductible a une boucle sur un sommet s, alors la chaîne est apériodique (comme le sommet s). 9.1.7 Chaines de Markov ergodiques Définition Une chaîne de Markov est ergodique si (πn) converge, indé pendamment de π0. Une chaine de markov est dite ergodique ou irréductible si tout état est atteignable depuis tout autre état. Elle est dite régulière s’il existe une puissance Pk de sa matrice de transition P dont tous mes éléments sont strictement positifs. Une chaine régulière est donc ergodique. La particularité des chaînes régulières est que l'on peut aller de n'importe quel état vers n'importe quel autre état en un nombre fixé k de pas, où k est indépendant de l'état de départ. Pour les chaînes ergodiques, on demande simplement que tout état soit atteignable depuis tout autre, mais le nombre de pas n'est pas nécessairement fixé 9.1.8 Théorème des coupes Pour une chaîne ergodique se pose le problème de déterminer 𝜋 ∗. D’après la proposition 2.4, lorsque 𝒏 → +∞, 𝑷𝒏 converge vers une matrice dont toutes les lignes sont égales à 𝜋 ∗. On voit qu’on peut utiliser les algorithmes permettant de calculer les puissances successives d’une matrice. On peut également résoudre le système linéaire : 𝝅∗ = 𝝅∗ .P. Ce système est de rang m -1 (m : nombre d’états), et la somme des éléments de 𝜋 ∗ est 1, ce qui permet de déterminer 𝝅∗ . Dans les deux cas, cela peut être assez compliqué lorsque la chaîne de Markov a un très grand nombre d’états. Pour résoudre le système dans les cas « simples » (ceux des exercices), on peut aussi utiliser le « théorème » des coupes, qui permet d’obtenir un système d’équations équivalent au précèdent. Proposition : Théorème des coupes (conservation des flux). Soit (𝑨, 𝑩) une partition de 𝑬(𝑨 ∪ 𝑩 = 𝑬 𝒆𝒕 𝑨 ∩ 𝑩 = ∅). Alors : 108 ∑ ∑ 𝜋𝑖∗ 𝑝𝑖,𝑗 = ∑ ∑ 𝜋𝑖∗ 𝑝𝑖,𝑗 𝑗∈𝐵 𝑖∈𝐴 𝑗∈𝐴 𝑖∈𝐵 Remarque Le but est de choisir la partition (ou la coupe entre A et B) en minimisant le nombre d’inconnues 𝜋𝑖∗ qui interviennent. Chaque coupe fournit une équation linéaire en les 𝜋𝑖∗ . On utilise alors m- 1 coupes (utiliser davantage de coupes fournirait des équations linéairement liées au précédentes car le système est de rang m - 1) et la condition ∑𝑖 𝜋𝑖∗ = 1 Exemple On considère la chaine de Markov représentée par le graphe: Le but Cette chaine est apériodique irréductible donc ergodique. Avec la coupe 𝐴 = {1}, 𝐵 = {2,3} on obtient l’équation : 0,8𝜋1∗ = 0,3𝜋2∗ . Avec la coupe 𝐴 = {1,2}, 𝐵 = {3} on obtient l’équation : 0,3𝜋2∗ = 0,2𝜋3∗. En ajoutant la contrainte 𝜋1∗ + 𝜋2∗ + 𝜋3∗ = 1 on déduit la valeur de 𝜋𝑖∗. Remarquons que les probabilités des boucles n’interviennent pas. 9.1.9 Chaine de Markov absorbante Définition Une chaine de Markov est absorbante lorsqu’il existe un ou plusieurs états qui sont absorbants Càd, qu’on ne peut plus sortir une fois qu’on est tombé dedans Graphe de transition 109 9.2 La recherche locale 9.2.1 Introduction On va commencer par une problématique de voyageur de commerce pour définir l`objectif de la recherche locale. Problématique : le problème du voyageur de commerce est un problème d’optimisation qui consiste à déterminer, étant donné une liste de villes et les distances entre toutes les paires de villes le plus court circuit qui passe par chaque ville une et une seule fois. Malgré la simplicité de l’énoncé, on ne connaît pas l'algorithme permettant de trouver une solution exacte rapidement dans tous les cas. Plus précisément, on ne connaît pas d'algorithme en temps polynomial et version décisionnelle du problème du voyageur de commerce est un problème NP-Complet, ce qui est un indice de sa difficulté. C'est un problème algorithmique célèbre, qui a donné lieu à de nombreuses recherches et qui est souvent utilisé comme introduction à l'algorithmique ou à la théorie de complicité. Pour choisir l`optimale trajet de l`ensemble de trajet proposé (ensemble de solution), on choisit le trajet qui vérifie notre objective qui est la minimisation de temps et de trajet en passant par toutes les villes. Définition La recherche locale est une méthode générale utilisée pour résoudre des problèmes d'optimisation, c'est-à-dire des problèmes où l'on cherche la meilleure solution dans un ensemble de solutions candidates. La recherche locale consiste à passer d'une solution à une autre solution proche dans l'espace des solutions candidates (l'espace de recherche) jusqu'à ce qu'une solution considérée comme optimale soit trouvée. 9.2.2 Le principe Le principe de la recherche locale est basé sur deux notions principaux : le voisinage et la fonction objectif. ➢ Notion de voisinage Un algorithme de recherche locale part d'une solution candidate et la déplace de façon itérative vers une solution voisine. Cette méthode est applicable seulement si une notion de voisinage est définie sur l'espace de recherche. Par exemple, le voisinage d'un arbre recouvrant est un autre arbre recouvrant qui diffère seulement par un nœud. Pour le problème SAT, les voisins d'une bonne affectation sont habituellement les affectations qui diffèrent seulement par la valeur d'une variable. Le même problème peut avoir plusieurs définitions différentes de voisinage ; l'optimisation locale avec des voisinages qui limitent les changements à k composantes de la solution est souvent appelée k-optimale. Habituellement, chaque solution candidate a plus d'une solution voisine ; le choix de celle vers laquelle se déplacer est pris en utilisant seulement l'information sur les solutions voisines de la solution courante, d'où le terme de recherche locale. Quand le choix de la solution voisine est fait uniquement en prenant celle qui maximise le critère, la métaheuristique prend le nom de Hill Climbing. 110 ➢ La fonction objectif Le terme fonction objectif ou fonction économique, est utilisé en optimisation mathématique et en recherche opérationnelle pour désigner une fonction qui sert de critère pour déterminer la meilleure solution à un problème d'optimisation. Concrètement, elle associe une valeur à une instance d'un problème d'optimisation. Le but du problème d'optimisation est alors de minimiser ou de maximiser cette fonction jusqu'à l'optimum, par différents procédés comme l'algorithme du simplexe. Par exemple, dans les réseaux de télécommunication une fonction objectif couramment utilisée pour calculer des chemins optimaux au travers d'un réseau informatique est le nombre de routeurs traversés. La fonction objectif considérée associe à chaque chemin dans le réseau le nombre de routeurs que ce chemin traverse. Le but est de trouver un chemin qui minimise cette fonction. ➢ Les étapes Le principe de la recherche locale est basé sur trois étapes : • Étape 1 : a) Choisir une solution initiale s ∈ S b) s* ← s • Étape 2 : a) choisir s' ∈N(s) avec : fonction N : s →2^s, ∀ s ∈S, N(s) ⊂ S b) s ← s' (i.e. replacer s par s') c) terminer et retourner la meilleure solution trouvée si la condition d'arrêt vérifiée • Étape 3 : a) s* ← s si f(s) < f(s*) b) aller à l'étape 2 Remarque : Comment choisir la solution initiale : heuristiques gloutonnes rapides ou aléatoire Métaheuristiques différentes => stratégies de choix différentes à l'étape 2 111 9.2.3 Les méthodes Les méthodes approches de résolution se divisent en deux catégories les méthodes approches et les méthodes exactes, pour notre mini projet on s’intéresse au méthode approchées qui se constitue de deux catégorie les heuristiques (sont des méthodes de calcul qui fournit rapidement une solution réalisable ,pas nécessairement optimale ou exacte pour un problème d’optimisation )et les métaheuristiques (sont des méthodes heuristique plus évolué et améliorer avec des idées avancées, tente de trouver un optimum global d’un problème d’optimisation difficile sans être piège par les optimum locaux). Parmi les méta-heuristique on a la recherche locale qui utilise plusieurs méthodes, on va traiter au suivant les deux méthodes :la méthode de descente et la méthode de recuit simulé. Descente Un algorithme a directions de descente est un algorithme d’optimisation différentiable, destiné à minimiser une fonction réelle différentiable définie sur un espace euclidien ou, plus généralement, sur un espace hilbertien. L'algorithme est itératif et procède donc par améliorations successives. Au point courant, un déplacement est effectué le long d'une direction de descente, de manière à faire décroître la fonction. Le déplacement le long de cette direction est déterminé par la technique numérique connue sous le nom de recherche linéaire. Cette approche algorithmique peut être vue comme une technique de globalisation, c'est-àdire une méthode permettant d'obtenir la convergence des itérés (sous certaines conditions) quel que soit l'itéré initial choisi. Elle s'apparente ainsi à l’algorithme a régions de confiance ; 112 ces dernières améliorent légèrement (mais parfois de manière décisive) leurs résultats de convergence mais sont plus compliquées à mettre en œuvre, ce qui limite parfois leur application. Les types On trouve à la méthode descente plusieurs algorithmes et chaque algorithme porte en général le nom de sa direction de descente, ces algorithmes sont définis selon deux critères : + la stratégie de génération de la solution initial +la détermination de voisinage et le déplacement Parmi ces algorithmes, il existe : l'algorithme du gradient les algorithmes du gradient conjugué l'algorithme de Newton les algorithmes de quasi-Newton l'algorithme de Gauss-Newton L`algorithme du gradient est un plus important, il base sur le gradient et le pas de déplacement pour déterminer la solution voisinage en utilisant la relation suivante Xk+1 = Xk −αk∇f (Xk ) Avec f: fonction objective αk: le pas de déplacement On a l` algorithme suivant qui explique les étapes de cette méthode Algorithme de cette méthode est comme suit : ●Données :f(fonction objective),E(l'ensemble de solution) ●initialisation: choix de solution initiale X0 ●solution optimale courante X*=X0, k=1 ●tant que le test d'arrêt non satisfait : 1-voisinage : génération de voisins candidats Xk 2-choix du meilleur voisin candidats Xk 3-Si f(Xk)<f(X*) donc X*=Xk K=k+1 aller à 1 Fin si 113 9.2.4 Le recuit simulé ➢ Définition Le recuit simulé est une méthode méta-heuristique d’optimisation, conçu pour chercher un optimum global, Inspirée d'un processus utiliser en métallurgique Le recuit métallurgique est un procédé correspondant à un cycle de chauffage, celui-ci consiste en une étape de montée graduelle c’est-à dire un chevauchement en température suivi d’un refroidissement contrôlé. Cette procédure permet de minimiser l’énergie du matériau. ➢ Le principe Le recuit simulé suit un principe bien spécifié en trois étapes : • Étape 1 : Choisir s’ N(S) La solution initiale peut être prise au hasard dans l’espace des solutions possible, elle peut aussi être générée par une méthode heuristique classique, telle que la descente du gradient. • Étape 2 : si f(s')<=f(s):alors accepter s' , sinon accepter s avec une probabilité p(Δf/KΔT) La question qui se pose maintenant est comment déterminer cette probabilité : Pour cela on va partir un peu loin pour comprendre le principe de détermination de cette probabilité : Premièrement l’idée principale de recuit simule tel qu’il a été proposé par METROPOLIS (est de simuler le comportement de la matière dans le processus du recuit très logement utilise dans la métallurgique le but est d’atteindre un état d’équilibre (ou l’énergie minimale) représente dans la méthode du recuit simule. La solution optimale d’un problème, l’énergie du système sera calculé par une fonction cout(ou fonction objectif) spécifique a chaque problème. 114 La méthode va donc essayer de trouver la solution optimale en optimisant une fonction objectif, pour cela un paramètre fictif a été ajouté. METROPOLIS a retreinte des principes de la physique (c’est le recuit métallurgique) pour pouvoir utiliser ce critère qui est à la base de la méthode de recuit simule. Dans le domaine du physique : P(E) = exp(-ΔE/KT) C’est le mécanisme naturel de minimisation de l’énergie qui repose la distribution de probabilité de Boltzmann Avec ΔE=Ek+1 – Ek Sachant que : Ek+1 : énergie du métal après la diminution du température Ek : énergie du métal actuellement K : constant de Boltzmann ΔT: la température du métal La température initiale T0 doit être assez élevée, car c’est elle qui fixe la probabilité d’accepter ou de refuser les solutions défavorables à l’optimisation de la fonction. On fait baisser la température d’une façon continue le courant est d’utiliser la loi suivante Ti+1= αTi Avec :(α<1) en générale on prend ( α=0,9 à 0,99) α est à choisir avec précaution .en effet, si elle est choisi très grand T baissera très rapidement ,sinon la Température baissera très lentement . Maintenant on revient à notre relation de comparaison(f(s')<=f(s) ) on génère une solution aléatoire dans le voisinage de la solution actuelle et on compare les deux solution selon la relation si dessus. à mentionner que : Si T est très élevée alors p est élevée (−Δ/T tend vers 0 , e^0 = 1). On a de forte chance d’accepter la nouvelle solution (une dégradation de qualité). — Si T est très petite alors p est très petite (−Δ/T tend vesr 1 , e^1 = 0). On a de forte chance de laisser la solution actuelle. • Étape 3 : Terminer si la condition d'arrêt est réalisée : La condition finale est d’atteindre une température finale ou un état d’équilibre(optimum global) 115 ➢ Algorithme 116 9.3 Algorithme de Colonies de Fourmis 9.3.1 Introduction Les algorithmes de colonies de fourmis sont des algorithmes inspirés du comportement des fourmis et qui constituent une famille de métaheuristiques d’optimisation. Initialement proposé par Marco Dorigo et al. dans les années 1990, pour la recherche de chemins optimaux dans un graphe, le premier algorithme s’inspire du comportement des fourmis recherchant un chemin entre leur colonie et une source de nourriture. L’idée originale s'est depuis diversifiée pour résoudre une classe plus large de problèmes et plusieurs algorithmes ont vu le jour, s’inspirant de divers aspects du comportement des fourmis. En anglais, le terme consacré à la principale classe d’algorithme est « Ant Colony Optimization » (abrégé ACO). Les spécialistes réservent ce terme à un type particulier d'algorithme. Il existe cependant plusieurs familles de méthodes s'inspirant du comportement des fourmis. En français, ces différentes approches sont regroupées sous les termes : algorithmes de colonies de fourmis, optimisation par colonies de fourmis, fourmis artificielles, ou diverses combinaisons de ces variantes. 9.3.2 Pourquoi Les Fourmis et leur Relation avec L’Informatique ? Le comportement des fourmis est un comportement collectif. Chaque fourmi a pour priorité le bien-être de la communauté. Chaque individu de la colonie est à priori indépendant et n’est pas supervisé d’une manière ou d’une autre. Ce concept est appelé Hétérarchie (s’opposant à la Hiérarchie), chaque individu est aidé par la communauté dans son évolution et en retour il aide au bon fonctionnement de celle-ci. La colonie est donc auto-contrôlée par le biais de mécanismes relativement simples à étudier. En observant une colonie de fourmis à la recherche de nourriture dans les environs du nid, on s’aperçoit qu’elle résoudre des problèmes tels que celui de la recherche du plus court chemin. Les fourmis résolvent des problèmes complexes par des mécanismes assez simples à modéliser. Leur technique repose sur la pose de marqueurs chimiques, les phéromones, déposés sur les trajets parcourus. Cela peut paraître surprenant au premier abord mais un chemin plus court reçoit plus de phéromones qu’un chemin plus long. Les fourmis suivantes ayant tendance à emprunter les chemins les plus marqués, une solution va progressivement se dessiner. Il est ainsi assez simple de simuler leur comportement par des algorithmes. 117 9.3.3 Comportement de la fourmi En marchant du nid à la source de nourriture et vice-versa (ce qui dans un premier temps se fait essentiellement de façon aléatoire), les fourmis déposent au passage sur le sol une substance odorante appelée phéromones. Cette substance permet ainsi donc de créer une piste chimique, sur laquelle les fourmis s’y retrouvent, en effet, d’autres fourmis peuvent détecter les phéromones grâce à des capteurs sur leurs antennes. Les phéromones ont un rôle de marqueur de chemin : quand les fourmis choisissent leur chemin, elles ont tendance à choisir la piste qui porte la plus forte concentration de phéromones. Cela leur permet de retrouver le chemin vers leur nid lors du retour. D’autre part, les odeurs peuvent être utilisées par les autres fourmis pour retrouver les sources de nourritures trouvées par leurs congénères. Ce comportement permet de trouver le chemin le plus court vers la nourriture lors que les pistes de phéromones sont utilisées par la colonie entière. Autrement dit, lorsque plusieurs chemins marqués sont à la disposition d’une fourmi, cette dernière peut connaître le chemin le plus court vers sa destination. Cette constatation essentielle est la base de toutes les méthodes que l’on va développer plus loin. On va d’abord étudier le comportement naturel de ces individus afin d’en prouver la validité, avant de l’extraire pour le simuler informatiquement. 1) la première fourmi trouve la source de nourriture (F), via un chemin quelconque (a), puis revient au nid (N) en laissant derrière elle une piste de phéromone (b). 2) les fourmis empruntent indifféremment les quatre chemins possibles, mais le renforcement de la piste rend plus attractif le chemin le plus court. 3) les fourmis empruntent le chemin le plus court, les portions longues des autres chemins perdent leur piste de phéromones. 9.3.4 Le Modèle Mathématique Dans l'algorithme Ant System (AS), chaque fourmi est initialement placée sur une ville choisie aléatoirement, chacune possède une mémoire qui stocke la solution partielle qu'elle a construite auparavant. Initialement, la mémoire contient la ville de départ. Commençant à partir de cette ville, une fourmi se déplace itérativement d'une ville à une autre. Quand elle est à une ville i, une fourmi k choisit d'aller à une ville non encore visitée j avec une probabilité donnée par : 118 ⚫ τij (t) est l'intensité de la trace de phéromone dans l'arête (i, j) à l'instant t. ⚫ ηij = 1 dij est une information heuristique à priori valable, où dij est la distance entre la ville i et la ville j , l'idée étant d'attirer les fourmis vers les villes les plus proches. ⚫ α, β sont deux paramètres qui déterminent l'influence relative de la trace de phéromone et de l'information heuristique. ⚫ Nk i est le voisinage faisable de la fourmi k c'est à dire l'ensemble des villes non encore visitées par la fourmi k. ⚫ La construction de solution se termine après que chaque fourmi ait complété un tour. Ensuite, les traces de phéromone sont mises à jour. Dans AS, la mise à jour se fait, d'abord, en réduisant les traces de phéromone avec un facteur constant ρ (c'est l'évaporation de phéromone) et, ensuite, en permettant à chaque fourmi de déposer de la phéromone sur les arêtes qui appartiennent à son tour. Ainsi la formule de mise à jour de phéromone est comme suit : Avec 0 ≤ ρ ≤ 1 et nbAnts le nombre de fourmis. Le paramètre ρ est ainsi utilisé pour éviter l'accumulation illimitée de phéromone et permet à l'algorithme d'oublier les mauvaises décisions précédemment prises. Sur les arêtes qui n'ont pas été choisis par les fourmis la force associée va décroître rapidement avec le nombre d'itérations. ∆τ k ij est la quantité de phéromone que la fourmi k dépose sur l'arête (i,j). Il est défini par: où Lk est la longueur du tour généré par la fourmi k, Q une constante de l'algorithme et Tabou k est la liste des villes déjà visitées. Avec cette formule, les arêtes du tour le plus court recevront la plus grande quantité de phéromone. En général, les arêtes qui sont utilisées par plusieurs fourmis et qui appartiennent aux tours les plus courts recevront plus de phéromone et en conséquence seront plus favorisés dans les itérations futures de l'algorithme 119 9.3.5 Applications Les algorithmes ACO ont été appliqué à plusieurs problèmes combinatoires NP difficiles. L'application de ACO au PVC a été déjà présentée dans la section précédente. Dans cette section, nous discutons des applications à d'autres problèmes d'optimisation combinatoire. ⚫ Le Problème de Tournée de Véhicules (VRP). ⚫ Le Problème de k-Partitionnement de Graphes. ⚫ Le problème du sac à dos multidimensionnel. ⚫ Le problème de voyageur de commerce. ➢ Le Problème de k‐Partitionnement de Graphes : Le problème de k-partitionnement de graphes (k-PPG) consiste à partitionner les nœuds d'un graphe donné en k partitions de façon à minimiser les coûts des arcs inter-partitions tout en essayant d'assurer l'équilibre des poids des partitions. Ce problème a été traité par la métaheuristiques ACO par Alaya, Sammoud, Hammami et Ghédira. Dans l'algorithme proposé, le graphe de construction décrivant ce problème est un graphe complet dont les nœuds sont des couples (X, P) avec X est un nœud du graphe à partitionner et P est le numéro de partition à laquelle X peut appartenir. Ainsi, un couple (X, P) choisi par une fourmi signifie que le nœud X du graphe est affecté à la partition P, et par conséquent tout couple (X, Q) tel que Q =! P devient interdit (n'appartient plus au voisinage faisable) puisque qu'un nœud ne peut pas appartenir à plus qu'une partition à la fois. Au cours de chaque cycle, chaque fourmi produit un partitionnement en se déplaçant sur le graphe de construction : à partir du nœud courant (X, P), elle choisit de se déplacer vers le nœud (Y, Q) selon une probabilité qui dépend : (i) du coût des arcs inter-partitions apporté par ce nouveau composant (l'information heuristique) et (ii) des traces de phéromone. La quantité de phéromone à déposer est inversement proportionnelle au coût de la solution générée ➢ Le problème du sac à dos multidimensionnel : Le MKP présente l'un des problèmes sur lesquels nous travaillons. Dans cette section, nous présentons les travaux proposés dans la littérature pour résoudre ce problème avec ACO. Une application de ACO au MKP dans [Leguizamon & Michalewicz, 1999] définit le graphe de 120 construction comme étant un graphe complet composé des objets du MKP (qui représentent les nœuds). La mise à jour de phéromone se fait sur les composants des solutions (c'est à dire les nœuds du graphe). Les traces de phéromone répètent donc la désirabilité de prendre un objet qui a fait partie de plusieurs solutions. La quantité de phéromone à déposer est égale au profit de la solution construite. L'information heuristique est calculée de façon dynamique en fonction des capacités des ressources (les contraintes) et du profit de l'objet à prendre. Une autre application d'ACO au MKP a été présentée dans [Fidanova, 2002]. Dans cette application, les traces de phéromone sont déposées sur les arêtes visités.Après que toutes les fourmis aient complété leurs tours, les fourmis déposent de la phéromone sur les chemins qu'elle viennent de parcourir. De même dans cette application la quantité de phéromone à déposer est égale au pro?t de la solution construite. Ensuite, la meilleure fourmi du cycle renforce les traces de phéromone sur les composants de la meilleure solution. De plus lorsque certains mouvements ne sont pas utilisés dans la solution courante, un renforcement de phéromone additionnelle est utilisé pour ces composants afin de les favoriser dans les itérations futures. L'information heuristique est calculée de façon statique. ➢ Problème de Tournée de Véhicules (VRP) : Parmi les applications les plus intéressantes du métaheuristique ACO au VRP, nous citons l'algorithme AS‐VRP conçu par Bullnheimer, Harlt et Strauss [Bullnheimer et al. 1999] qui est basée sur l'algorithme ASrank. Gambardella, Taillard et Agazzi [Gambardella et al. 1999b] ont traité le VRP en adaptant l'approche ACS pour définir MACS‐VRPTW, et en considérant l'extension de la fenêtre temps au VRP qui introduit un intervalle de temps dans lequel un client doit être servi. ➢ Le problème de voyageur de commerce : Le premier algorithme de colonies de fourmis proposé est appelé le Ant system (système fourmi). Il vise notamment à résoudre le problème du voyageur de commerce, où le but est de trouver le plus court chemin permettant de relier un ensemble de villes. L’algorithme général est relativement simple, et repose sur un ensemble de fourmis, chacune parcourant un trajet parmi ceux possibles. À chaque étape, la fourmi choisit de passer d’une ville à une autre en fonction de quelques règles : 1.elle ne peut visiter qu’une fois chaque ville ; 2.plus une ville est loin, moins elle a de chance d’être choisie (c’est la « visibilité ») ; 121 3.plus l'intensité de la piste de phéromone disposée sur l’arête entre deux villes est grande, plus le trajet aura de chance d’être choisi ; 4.une fois son trajet terminé, la fourmi dépose, sur l’ensemble des arêtes parcourues, plus de phéromones si le trajet est court ; 5.les pistes de phéromones s’évaporent à chaque itération 9.3.6 ACO et la recherche locale Dans plusieurs applications à des problèmes d'optimisation combinatoire NP difficiles, les algorithmes ACO réalisent de meilleures performances lorsqu'ils sont combinés avec des algorithmes de recherche locale [Dorigo & Gambardella, 1997, Stützle & Hoos, n.d. Alaya et al. 2006]. Ces algorithmes optimisent localement les solutions des fourmis et ces solutions optimisées localement sont utilisées par la suite dans la mise à jour de phéromone. L'utilisation de la recherche locale dans les algorithmes ACO peut être très intéressante comme les deux approches sont complémentaires. En effet, la combinaison peut améliorer largement la qualité des solutions produites par les fourmis. D'un autre côté, générer des solutions initiales pour les algorithmes de recherche locale n'est pas une tâche facile. Dans les algorithmes de recherche locale, où les solutions initiales sont générées aléatoirement, la qualité des solutions peut être médiocre. En combinant la recherche locale avec l'ACO, les fourmis génèrent stochastique ment, en exploitant les traces de phéromone, des solutions initiales prometteuses pour la recherche locale. 9.3.7 Application de l'algorithme sur le TSP ➢ AntSystem : initialisation Les m ants sont réparties aléatoirement sur les n villes. Pour chaque ant la liste-tabou contient sa ville de départ. Les pistes de phéromones sont initialisées : τij=c, c constant positive non null . ➢ AntSystem : itération de base Chaque ant choisit une ville de destination et s’y déplace. Une ant k placée sur une ville i à l’instant t choisit sa ville de destination j en fonction de la : 1. visibilité de cette ville ηij (distance inter villes) 2. quantité de phéromone τij(t) déposée sur l’arc reliant ces deux villes • Le choix est aléatoire selon une probabilité où deux paramètres α et β contrôlent l’importance relative des phéromones et de la visibilité Le choix est aléatoire selon une probabilité où deux paramètres α et β contrôlent l’importance relative des phéromones et de la visibilité La probabilité d’un déplacement élémentaire est un compromis entre visibilité et piste chimique 122 ¨ Si β=0, les villes les + proches ont + de chance d’être sélectionnées (algorithme glouton) ¨ Si α=0, seule l’amplification des phéromones agit : convergence prématurée ➢ Fin d’un cycle de base : Toutes les ants ont terminé un tour en revenant à leur propre ville de départ. Pour chaque ant k : • calculer la longueur de son tour Lk(t). • vider sa liste-tabou. ➢ Mettre à jour les phéromones τij. Rechercher le plus petit tour et le mémoriser s’il est meilleur que les précédents. Toutes les ants recommencent un nouveau tour à partir de leur propre ville initiale. Mettre à jour les phéromones : τij(t+n) = ρ. tij(t)+ Δτij(t) ρ dans [0,1[ Entre les instants t et t+n : • (1-ρ) = évaporation de la piste • Δτij(t)= quantité de phéromone déposée par les antes. ➢ Evaporation des phéromones : Si ρ=1, pas d’évaporation donc pas de limitation du phénomène auto catalytique ¨ Si ρ=0, les ants prennent seulement en compte les dépôts du dernier cycle ¨ ρ représente la persistance de la piste (ie. l’effet mémoire). ➢ Quantité de phéromone déposée par les ants lors d’un tour (cycle) : Δτij(t) = quantité de phéromone déposée par les ants sur l’arc reliant la ville i à la ville j entre les instants t et t+n. Pour chaque ant k passant par l’arc (i,j), Δτij(t) += Q/Lk(t) où Q représente un « quota » de phéromones attribué à chaque ant (souvent Q=100) Idée : + un tour est court, + les arcs qui le composent sont approvisionnés. 9.3.8 Avantages et Inconvénients du ACO ➢ Avantages : ▪ Cet algorithme est basé sur l’intelligence, il peut être appliquée dans les domaine scientifique et d’ingénierie. 123 ▪ Les calculs sont très simple comparé avec d’autre calcul développé ▪ Cet algorithme occupe des majeures optimisations sur les algorithmes précédents ▪ ACO peut être utilisé sur des applications dynamiques ▪ Un feedback positif peut amèneront à des rapides découvertes de solution ▪ Très efficace pour le problème TSP ▪ Applicable sur des modélisations par des graphes ➢ Inconvénients : ▪ L’analyse théorique est difficile surtout dans les cas d’une complexité majeure ▪ Répétition des décisions aléatoire (indépendante) ▪ Probabilités distributifs changeant en chaque itération ▪ Le temp de convergence est incertain, alors que la convergence est garantie 124 9.4 Les réseaux de neurones 9.4.1 Définition Un réseau de neurones artificiel est un ensemble de neurones reliés entre eux, inspiré des neurones biologiques afin de réaliser certaines caractéristiques de cerveau comme: - L’apprentissage. - Mémorisation des informations. - Traitement de nouvelles informations. Un réseau de neurones artificiel est une modélisation mathématique, qui prend des valeurs numériques comme entrées, et produisent d’autres valeurs numériques comme sorties. Les réseaux de neurones font partie du domaine d’apprentissage de la machine (en anglais, machine learning). ➢ Neurones biologiques Un neurone biologique se caractérise par: - Synapses : Points de connexion avec les autres neurones. - Dendrites : Entrés de neurones. - Axones : Sorties de neurones vers d’autres neurones. - Noyau: Active les sorties en fonction des stimulations en entrée. Schéma: ➢ Neurone artificiel vs neurone biologique Le réseau de neurones artificiels est basé sur le même modèle que le réseau de neurones biologiques, tels qu’un neurone artificiel est caractérisé par des entrées (dendrites), poids (synapses), une sortie (axone) et une fonction d’activation (noyau). Schéma d’un neurone biologique: 125 9.4.2 Les composants d’un réseau de neurone ➢ Couches Un réseau de neurones est caractérisé par des neurones d’entrées (en anglais, input layer) qui reçoivent les valeurs d’entrées, et des neurones de sorties (en anglais, output layer) qui produisent des valeurs de sortie. On peut trouver des neurones autres que les neurones d’entrées et de sortie qui relient entre les neurones d’entrées et les neurones de sorties afin d’échanger les données. Une couche d’un réseau de neurones regroupe certains neurones ayant une fonction d’activation similaire. La première couche est la couche d’entrée, regroupe les neurones d’entrées, et la dernière couche est la couche de sortie qui regroupe les neurones de sortie. Les couches autres que la couche d’entrée et la couche de sortie appelées “couches cachées” (en anglais, hidden layer). Schéma des couches d’un réseau de neurones : 126 Il est possible d’avoir un grand nombre de couches cachées. Plus le nombre de couches augmente, plus le réseau devient plus profond, alors nous parlons de l'apprentissage profond (en anglais, deep learning) qui fait partie du domaine de la machine learning. ➢ Poids et Biais Les poids et les biais sont des valeurs numériques qui sont mises à jour pendant la phase d’apprentissage afin d’améliorer la précision des résultats du réseau de neurones. Les poids et les biais sont appelés aussi paramètres d’apprentissage ou valeurs d’autoapprentissage ▪ Poids Un poids est appliqué à l'entrée de chaque neurone (sauf les neurones d’entrées), il relie un neurone de n-ième couche avec un autre neurone de (n+1)-ème couche, (avec n ∈ [1, N - 1] et N le nombre de couche de réseau de neurone). ▪ Biais Un biais est ajouté une fois que les poids sont appliqués à l’entrée d’un neurone. Chaque neurone est caractérisé par un seul biais. 127 ➢ Fonction d’activation ▪ Définition Chaque neurone des couches cachées et la couche de sortie est caractérisé par sa fonction d’activation. La fonction d’activation normalise la valeur de sortie avant qu’elle ne soit transmise aux neurones de la couche suivante, en d’autres termes la fonction vérifie si la valeur de sortie est supérieure au seuil requis. Si c’est le cas, la fonction d’activation est activée et une nouvelle valeur de sortie est calculée. Remarque: Les neurones de la même couche ont la même fonction d’activation. • Types des fonctions d’activation Les types des neurones se distinguent par leur fonction d’activation. Il existe un grand nombre de fonction d’activation, les plus utilisées sont: -Sigmoïde : produit une courbe en forme de S. Bien que de nature non linéaire, il ne tient toutefois pas compte des légères variations des entrées, ce qui entraîne des résultats similaires. -tanh (Tangente hyperbolique): Il s’agit d’une fonction supérieure comparée à Sigmoid. Cependant, elle rend moins bien compte des relations et elle est plus lente à converger. -ReLu (unité linéaire rectifiée): Cette fonction converge plus rapidement, optimise et produit la valeur souhaitée plus rapidement. C’est de loin la fonction d’activation la plus populaire utilisée dans les couches cachées. -Softmax: utilisé dans la couche de sortie car il réduit les dimensions et peut représenter une distribution catégorique. -Fonction linéaire : Cette fonction est utilisée pour garder la valeur de sortie telle quelle. 9.4.3 Fonctionnement des réseaux de neurones Le concept des réseaux de neurones repose sur 3 étapes : 1. Pour chaque neurone dans une couche (sauf la couche d’entrée), multiplier la valeur d’entrée par le poids. 2. Ensuite, calculer la somme des pondérations et ajouter le biais. 3. Enfin, appliquer la fonction d’activation à la valeur trouvée pour calculer une nouvelle valeur de sortie. Modélisation mathématique : 128 Soit un neurone caractérisée par une valeur interne S, des valeurs d’entrées (x1, . . . , xp) et une fonction d’activation f. Calculons la somme pondérée : x1.ω1 + x2.ω2 + … + xp.ωp Ajoutons le biais: x1.ω1 + x2.ω2 + … + xp.ωp + β Enfin, calculant la valeur interne S en appliquant la fonction d’activation g sur la valeur trouvée : S = g( x1.ω1 + x2.ω2 + … + xp.ωp + β ) Exemple : Soit un réseau de neurones composé par 2 couches, la couche d’entrée comporte 3 neurones, et la couche de sortie, comporte 2 neurones, comme l’indique le schéma ci-dessous : 129 Le réseau est caractérisé par les biais (1; 1,5) et les poids (2; -3; 0,5; 1,2; -0,5). Les neurones de sortie sont caractérisés par leur fonction d’activation Sigmoïde. ● Prenant les valeurs d’entrés (1; 1,5; 2) et Calculant les valeurs de sortie: Y1 = Sigmoïde((1*2 - 3*1,5) + 1) = Sigmoïde(-0,5) = 0.377541 Y2 = Sigmoïde((1*0,5 + 1,2*1,5 - 0,5*2) + 1,5) = Sigmoïde(2,8) = 0.942676 9.4.4 L’apprentissage ➢ Définition Lorsque nous rencontrons un problème à résoudre, il est compliqué de le décrire à une machine en lui donnant une série d’instructions. Pour cela, on se base sur le concept d'apprentissage ou “apprentissage automatique”. 130 En d'autres termes, l’apprentissage permet à une machine d’apprendre à partir des données avec lesquelles la machine doit acquérir une expérience, de cette manière elle doit être capable de résoudre des cas qu’elle n’a jamais vu. Pour les réseaux de neurones, l’apprentissage consiste à calculer les paramètres d’apprentissage (poids et biais) de telle manière que le résultat des prédictions soient proches des sorties attendues. Les techniques d’apprentissage sont des algorithmes d’optimisation qui cherchent à minimiser l'écart entre les résultats des prédictions et les sorties attendues. ➢ Types d’apprentissage Le domaine de machine learning se subdivise en 3 grandes familles d'apprentissage: Apprentissage supervisé: Algorithme s'entraîne sur un ensemble des données étiquetées, d’une autre manière un ensemble de couples entrées et sorties qui s’écrit sous forme { (xk, yk), k ∈ [1, K] } dont x est la donnée d’entré et y la donnée attendue par le réseau de neurone. Ce type d’apprentissage vise à résoudre les problèmes de: -Classification: problèmes de prédiction d'une variable qualitative, exemple: classification des images, diagnostics… -Régression: problèmes de prédiction d'une variable quantitative, exemple: prévision de météo, prévision de croissance démographique… Apprentissage non supervisé: Algorithme s'entraîne sur un ensemble des données non-étiquetées (données d'entrées sans données de sorties). Cet algorithme traite les données reçues sans entraînement préalable, alors il est capable d'exécuter des tâches plus complexes que l’algorithme d’apprentissage supervisé. Parmi les problèmes résolus par l’algorithme d’apprentissage non supervisé, nous citons le partitionnement des données (clustering) qui vise à diviser un ensemble de données en différentes catégories ou groupes homogènes sans négliger que cet algorithme peut aussi ajouter des catégories inattendues et non désirées et classer des races inhabituelles, ce qui peut introduire de bruit et de confusion au lieu de mettre de l’ordre. Apprentissage par renforcement : La machine est placée dans un environnement sur lequel elle peut faire des actions. L’apprentissage se fait par des récompenses obtenues en fonction de ses choix. La notion des "récompenses" dépend du contexte, exemple d’un joueur qui vise à maximiser son score ou des médias sociaux qui cherchent à maximiser le temps que les visiteurs passent sur leurs plateformes. En d’autres termes, l’algorithme d’apprentissage par renforcement vise à l’amélioration des actions ou de la prise de décisions au fur et à mesure des récompenses. 131 ➢ Processus d’apprentissage supervisée Le processus d’apprentissage se fait en 3 phases principaux : -1ér phase : C’est la propagation vers l’avant (en anglais, “feed forward”), les signaux d'entrées se propagent à partir de la couche d’entrée vers la couche de sortie en passant par les couches cachées, tel que les neurones appliquent leurs transformations directes (fonction d’activation) aux signaux qu’ils reçoivent et les transférer aux couches suivantes, jusqu'à ce que les neurones de sorties effectuent leurs transformations finales pour calculer le résultat des prédictions. 2éme phase: Le calcul de la fonction de perte (en anglais, “loss function”) pour optimiser l'écart entre le résultat des prédictions et les sorties Yk attendues. Il existe plusieurs fonctions de perte utilisées pour l'apprentissage, qui diffèrent dans la distance entre les valeurs attendues et les valeurs de prédictions correspondant aux valeurs d’entrées. Exemple: La fonction d'erreur dite somme des carrés, utilisée essentiellement pour les problématiques de régression mais elle peut être également utilisée pour les problématiques de classification. Comment la fonction de perte fonctionne-t-elle ? Si l’écart du résultat des prédictions obtenue par notre réseau de neurones et le résultat attendu est suffisamment grand, alors le résultat de la fonction de perte sera plus élevé, à 132 ce moment-là où la 3éme phase intervient pour ajuster les paramètres d'apprentissage (poids et biais) pour optimiser la fonction de perte. -3éme phase: Rétropropagation (en anglais, “back propagation”), le signal de perte se propage à partir de la couche de sortie en passant par tous les neurones des couches cachées qui contribuent directement aux sorties. Les couches cachées ne reçoivent qu’une dérivée de la fonction de perte, tel que chaque neurone a contribué à la sortie d’origine. Ce processus est répété, couche par couche, jusqu'à une réception complète du signal de perte par les couches de réseau décrivant leur contribution relative à la perte totale Schéma visuel des 3 étapes : À cette étape, on ajuste les poids et les biais à l'aide des algorithmes d’optimisation. Prenons l’exemple de la descente de gradient, cette technique modifie les poids à l'aide du calcul de la dérivée (gradient) de la fonction de perte, ce qui nous permet de voir dans quelle direction «descente» vers le minimum. Remarque: Selon la forme de la fonction de perte E, rien ne garantit que le minimum ne soit pas qu’un minimum local. 133 La descente de gradient utilise la dérivée de la fonction de perte lors de la mise à jour des poids et biais. Prenons ai le poids pour l'itération i, ai+1 = ai - λ.d(E), tel que E: fonction de perte, d(E): gradient de E, λ: taux d’apprentissage (λ ∈ [0, 1]) Pour déterminer la suite ai+1, l'algorithme de descente de gradient modifie la valeur du poids initial pour aller dans le sens inverse du gradient (car il pointe dans la direction dans laquelle la perte augmente et nous voulons la réduire), en ajoutant un montant proportionnel à cela. La valeur de ce changement est déterminée par la valeur du gradient et par le taux d'apprentissage. L'algorithme de descente de gradient itère ce processus en se rapprochant de plus en plus du minimum jusqu'à ce que la valeur du paramètre (poids ou biais) atteint un point au-delà duquel la fonction de perte ne peut pas diminuer: Pour récapituler, l’algorithme d’apprentissage passe par les étapes suivantes : 1. Commencer par des valeurs souvent aléatoires pour les paramètres d'apprentissage (poids et biais). 2. Passer les données d’entrées de l’ensemble d’apprentissage par le réseau de neurones afin d’obtenir leurs prédictions. 3. Comparer ces résultats des prédications avec les sorties attendues de l’ensemble d’apprentissage en calculant la fonction de perte (signal de perte). 134 4. Effectuer la rétropropagation afin de propager ce signal de perte à tous les composants du réseau de neurones. 5. Utiliser ce signal propagé afin de réduire la fonction de perte en utilisant un algorithme d’optimisation (descente du gradient par exemple). Continuer à itérer ces étapes jusqu’à ce que le réseau doit être capable de prédire des bonnes prédictions, d’une autre manière la fonction de perte converge à 0. 9.4.5 Surapprentissage Après avoir vu l’apprentissage, ses types et le processus de l’un de ses types, La question qui se pose: À quel moment doit-on arrêter l’apprentissage du réseau de neurones ? En effet, il ne suffit pas qu’un réseau de neurones produise des bons résultats, mais il doit être capable en même temps de bien prévoir les nouvelles données, d’une autre manière, il doit être capable de généraliser. Parfois, le réseau de neurones peut être si précis sur les données reçues pendant la phase d’apprentissage qu’il devient incapble de généraliser, nous parlons alors de «sur apprentissage». Pour éviter ce phénomène, lors de la phase d’apprentissage, nous divisons l’ensemble d’apprentissage en deux sous-ensembles, que nous soumettons en parallèle au réseau de neurones, tel que le réseau apprend avec le 1ér sous-ensemble, le 2éme est un ensemble d’échantillon de validation, sert à vérifier la capacité d’extrapolation du réseau. 9.4.6 Domaines d’application Industrie Application Banque Prêts et scoring Cartes de crédit Détection des fraudes 135 Finance Analyse d'investissements et de fluctuations des taux de change Assurance Couverture assurantielle et estimation des réserves Marketing Ciblage des prospections, mesures et comparaisons des campagnes et des méthodes Archéologie Identification et datation de fossiles et d'ossements Défense Identification de cibles Environnement Prévisions de la qualité de l'air et de l'eau Sécurité Identification de terroristes potentiels Production Contrôles qualité Médecine Diagnostics médicaux Energies Estimations des réserves, prévisions de prix Pharmacie Efficacité de nouveaux médicaments Psychologie Prévisions comportementales Immobilier Études de marchés Télécommunication Détection des pannes de réseaux Transport Maintenance des voix 136 9.5 Les algorithmes génétiques 9.5.1 Introduction Les algorithmes génétiques (AG) sont des méthodes utilisées dans les problèmes d’optimisation. Les AG tirent leur nom de l’évolution biologique des êtres vivants. Ils permettent de calculer une solution acceptable a un problème dont l’espace de solutions est trop grand pour être parcouru dans un temps raisonnable. Les algorithmes génétiques sont basés sur trois éléments principaux : la sélection, le croisement et la mutation. • Quelques définitions Un Gène est une unité d'information génétique transmise par un individu à son descendant. Il code généralement une des variables du problème à optimiser. Un Chromosome est une structure contenant une séquence finie de gènes. Un Individu est une solution potentielle qui peut être présenté par un ou plusieurs chromosomes. Une population est un ensemble d'individus. Une génération est un ensemble d'opérations effectuées afin de passer d'une population à une autre. 9.5.2 Les étapes de l’algorithme génétique 1- Génération de la population initiale Cette étape consiste à générer une population constituée de n individus, chaque Individu représente une ou une partie de la solution. La représentation de chaque individu suit un codage particulier, le plus fréquemment utilisé est le codage binaire. Les individus sont aussi appelés chromosomes et leur représentation est un ensemble de gènes. 2- La Sélection L'opérateur de sélection est un opérateur permettant la sélection des individus d’une population (reproduction) pour la nouvelle population. Cet opérateur utilise le fitness comme critère de sélection et décide si les individus doivent survivre, se reproduire ou mourir, Il existe différentes méthodes de sélection, Nous en présentons ici quelques-unes : Sélection par roulette, Sélection par élitiste et Sélection par tournoi. 137 ▪ Sélection par roulette Il s'agit de la méthode la plus fréquemment utilisée, dont le principe d'une roue de loterie biaisée est utilisé Plus un individu a une fonction fitness élevée plus il a de chance d'être sélectionné ▪ La sélection élitiste Son principe site que les individus les moins performants sont totalement éliminés de la population, et le meilleur individu est toujours sélectionné. Elle permet cependant de ne pas perdre des individus avec une fonction fitness élevée donc, solution possible du problème. Cette technique utilise la sélection proportionnelle sur des paires d'individus, puis choisit parmi ces paires l'individu qui a le meilleur score d'adaptation. ▪ Sélection par tournoi Cette technique utilise la sélection proportionnelle sur des paires d'individus, puis choisit parmi ces paires l'individu qui a le meilleur score d'adaptation. 3- Le Croisement A partir de deux chromosomes le croisement produit deux nouveaux chromosomes incorporant chacun du matériel génétique pris dans le patrimoine initial, Il y a plusieurs méthodes de croisements, citons quelques-unes : Le croisement simple point, le croisement double points et le croisement uniforme ▪ Le croisement simple point Les deux chaînes initiales vont être divisées en deux. La première partie de la première chaîne sera associée à la seconde partie de la seconde chaîne et inversement, deux nouveaux individus sont ainsi obtenus résultant d’un croisement entre les deux chaînes initiales. ▪ Le croisement double points Le principe est assez proche de croisement simple point, à cette différence qu’il y a deux points de séparation des chaînes, la chaîne initiale est divisée en 3 parties et la combinaison de ces 3 parties permet d’obtenir deux nouvelles chaînes 138 4- La Mutation C’est un opérateur qui consiste à modifier un ou plusieurs allèles d'un gène avec une probabilité souvent assez faible (de l'ordre de 0.01 à 0.1) Il consiste donc à modifier aléatoirement les caractéristiques d'une solution, Il permet d'éviter le maximum possible une convergence de l'algorithme vers un optimum local 9.5.3 Exemple pratique ➢ Problématique Le problème des n-reines consiste à positionner N reines sur un échiquier de sorte qu’aucune d’entre elles n’est en position d’attaquer une autre. Une reine peut attaquer une autre si elles sont toutes les deux sur : la même ligne, la même colonne, ou la même diagonale. 139 ➢ Résolution Résolution de ce problème pour n=8 en utilisant l’algorithme génétique : On va utiliser le codage suivant pour les chromosomes : 67251448 où chaque nombre indique la position de la reine sur la colonne (voir l’exemple ci-dessous). o Générer aléatoirement une population de N chromosomes - la création d’une nouvelle population de N individus - l’initialisation aléatoire des individus o Calculer la valeur d’adaptabilité (fitness) de chaque chromosome x On calcule le nombre des attaques dans chaque individu en utilisant une fonction de fitness qui donne la valeur d’adaptabilité. o La sélection Sélectionner une nouvelle population de taille N (de la nouvelle génération) - En retirant 1 ou plusieurs individus de la populations (chaque individu est supprimé avec une probabilité proportionnelle à son adaptabilité), Puis en continue à remplir le nombre des individus de la population En doublant les individus les plus adaptés jusqu’à avoir une population de taille N. o Faire des croisements entre les individus en des indices aléatoires. On effectue le croisement entre les nouveaux distincts individus pour avoir de nouveaux individus 140 o La mutation Mutant un (maximum 1) des enfants obtenus avec une certaine probabilité (entre 0.01 et 0.1). o Si la population satisfait le critère d’arrêt, on s’arrête. Les conditions d’arrêt sont : • Arriver au nombre max des itérations passé en paramètres de la méthode de la classe Population. • Trouver un individu dont le nombre des attaques mutuels est 0. o Sinon on répète le étapes (à partir de la sélection, Croisement…). 141 9.6 L’optimisation par essaims de particules 9.6.1 Introduction « Le désir humain de perfection trouve son expression dans la théorie de l’optimisation, Il étudie comment décrire et atteindre ce qui est meilleure, une fois que l’on connait comment mesurer et modifier ce qui est bon et ce qui est mauvais, la théorie de l’optimisation comprend l’étude quantitative des optimums et les méthodes pour les trouver » A partir de la citation ci-dessus on comprend que l’optimisation cherche à améliorer une performance en se rapprochant d’un point optimum. Dans le cadre des mathématiques, l’optimisation cherche des réponses à un type général de problèmes, qui consistent à sélectionner le meilleur élément parmi plusieurs appartenant au même ensemble. En général l’optimisation peut se réaliser dans différents domaines, toujours avec le même but : améliorer le fonctionnement au moyen d’une gestion perfectionnée des ressources. L’optimisation peut avoir lieu à n’importe quelle étape quoi qu’il est conseillé de la mener à bien jusqu’à la fin du processus visé. Aujourd’hui, l'optimisation dispose d’une vaste application dans différentes branches de la science, par exemple : contrôle, robotique, consommation d'énergie, ...etc. En raison de la nécessité de traiter plusieurs variétés de problèmes d'optimisation, de nombreux changements en optimisation concernant les méthodes et les approches ont été proposés. Parmi ces approches, on trouve les algorithmes métaheuristiques qui sont des algorithmes standards, proposés pour la résolution des différents problèmes complexes et fortement non linéaires sans nécessiter de modification profonde de l’algorithme pour chaque problème à résoudre. 9.6.2 Histoire L’optimisation par essaim de particule (OEP) en anglais : PSO (PARTICULE SWARM OPTIMIZATION) Inventée par RUSSEL EBERHART (ingénieur en électricité) et JAMES KENNEDY (socio psychologue) en 1995 . L’algorithme d’optimisation par essaim des particules s’inspire à l'origine du monde du vivant. Il s'appuie notamment sur un modèle développé par Craig Reynolds à la fin des années 1980, permettant de simuler le déplacement d'un groupe d'oiseaux. Une autre source d'inspiration, revendiquée par les auteurs, James Kennedy et Russel Eberhart, est la socio-psychologie . Cette méthode d'optimisation se base sur la collaboration des individus entre eux. Elle a d'ailleurs des similarités avec les algorithmes de colonies de fourmis, qui s'appuient eux aussi sur le concept d'auto-organisation. Cette idée veut qu'un groupe d'individus peu intelligents peut posséder une organisation globale complexe. 142 9.6.3 Définitions ➢ La métaheuristique Une métaheuristique est un algorithme d’optimisation visant à résoudre des problèmes d’optimisation difficile (souvent issus des domaines de la recherche opérationnelle, de l'ingénierie ou de l'intelligence artificielle) pour lesquels on ne connaît pas de méthode classique plus efficace. Nous allons faire la connaissance avec une de ces méthodes, celle-ci est dite "optimisation par essaims des particules" dont l'idée directrice est la simulation du comportement collectif des oiseaux à l'intérieur d'une nuée. ➢ L’optimisation par essaim des particules L’optimisation des essaims de particules (PSO) : est une méthode de calcul qui permet d’optimiser un problème en essayer itérativement d'améliorer une solution candidate en s’appuyant sur un système de mesure de la qualité précisé. Cela résout un problème en disposant d'une population de solutions candidates, appelées ici particules, et en les déplaçant dans l’espace de recherche selon des formules mathématiques simples sur la position et la vitesse de la particule. Le mouvement de chaque particule est influencé par sa position locale la plus connue, mais il est également guidé vers les positions les plus connues de l'espace de recherche, qui sont utilisées lorsque de meilleures positions sont trouvées par d'autres particules. Ceci devrait amener l'essaim vers les meilleures solutions. L’optimisation des essaims de particules est une métaheuristique car il fait peu ou pas d'hypothèses sur l'optimisation du problème et peut rechercher de très grands espaces de solutions candidates. Cependant, des métaheuristiques telles que PSO ne garantissent pas qu'une solution optimale soit trouvée. De plus, PSO n'utilise pas le gradient du problème à optimiser, ce qui signifie que PSO n'exige pas que le problème d'optimisation soit différentiable comme le requièrent les méthodes d'optimisation classiques telles que les méthodes de descente de gradient et de quasi-Newton. 9.6.4 Le concept des oiseaux L'homme s'inspire de plus en plus de la nature qui l'entoure pour mettre en place des algorithmes simulant le comportement des animaux. L’optimisation par essaim de particules est une méthode métaheuristique, développée à partir de l'intelligence en groupe qui est basée sur le comportement du déplacement des oiseaux ou des poissons pour la recherche de la nourriture. Lorsque les oiseaux sont à la recherche de nourriture, d'un endroit à l'autre, il y a toujours un oiseau qui peut sentir la nourriture et trouver l'endroit où elle peut être trouvée. Comme qu'il y’a un échange d’informations entres eux à tout moment, ils finiront par affluer vers l'endroit où la nourriture peut être trouvé. Une bonne information est égale à la solution la plus optimiste et la nourriture est égale à la solution la plus optimiste pendant tout le parcourt. 143 L’algorithme proposé par Kennedy et Eberhart cherche à simuler ce comportement social basé sur l’analyse de l’environnement et du voisinage et constitue alors une méthode de recherche d’optimum par l’observation des tendances des individus voisins. Chaque individu cherche à optimiser ses chances en suivant une tendance qu’il modère par ses propres vécus. Le modèle qu’ils ont proposé à ensuite été étendu en un algorithme simple et efficace d’optimisation. 9.6.5 Le principe d’optimisation des particules On peut résumer le principe dans les étapes suivant : •Les particules reposent sur un ensemble d’individus originellement disposés de façon aléatoire et homogène-solution •Chaque particule dispose d’une mémoire concernant sa meilleure solution visitée ainsi que la capacité de communiquer avec les particules constituant son entourage. •La particule va suivre une tendance faite, d’une part, et d’autre part de sa volonté à Retourner vers sa solution optimale •En fin l’ensemble des particules va normalement converger vers la solution optimale globale du problème traité Le déplacement d’une particule dans espace 144 9.6.6 La topologie des voisinages La topologie du voisinage défini avec qui chacune des particules va pouvoir communiquer. Il existe de nombreuses combinaisons dont les suivantes sont les plus utilisées : 1- Topologie en rayon : les particules ne communiquent qu’avec une seule particule centrale 2- Topologie en anneau : chaque particule est reliée à n particules (en général, n = 2), c’est la topologie la plus utilisée 3- Topologie en étoile : chaque particule est reliée à toutes les autres particulier : 145 9.6.7 Le déplacement des particules Dans PSO le comportement social est modélisé par une équation mathématique permettant de guider les particules durant leur processus de déplacement. Le déplacement d’une particule est influencé par trois composantes : la composante d’inertie, la composante cognitive et la composante sociale. Chacune de ces composantes reflète une partie de l’équation 1) La composante d’inertie : la particule tend à suivre sa direction courante de déplacement 2) La composante cognitive : la particule tend à se diriger vers le meilleur site par lequel elle est déjà passée 3) La composante sociale : la particule tend à se diriger vers le meilleur site atteint par ses voisines 9.6.8 Formalisation ➢ Vocabulaire Une particule i de l’essaim dans un espace de dimension D est caractérisée, à l’instant t, par : –x: sa position dans l’espace de recherche –V : sa vitesse ; –Pb : la position de la meilleure solution par laquelle elle est passée –Pg : la position de la meilleure solution connue de tout l’essaim –f (Pb) : la valeur de fitness de sa meilleure solution –f (Pg) : la valeur de fitness de la meilleure solution connue de tout l’essaim Le déplacement de la particule i entre les itérations t et t+1 se fait selon les deux équations [1] et [2] V (t+1)= V( t) C1 r1 (Pb( t)- X( t))+ C2 r2 (P g( t)-X (t )) X (t+1)= X( t)+ V( t+1) [1] [2] -C1 et C2 : deux constantes qui représentent les coefficients d’accélération, elles peuvent être non constantes dans certains cas selon le problème d’optimisation posé – r1 et r2 : deux nombres aléatoires tirés de l’intervalle [0,1] ➢ Algorithme L’algorithme de base de la méthode PSO proposé par Kennedy, commence par une initialisation aléatoire des particules dans leur espace de recherche, en leurs attribuant une position et une vitesse Initiales. À chaque itération de l’algorithme les particules se déplacent selon les équations (1) et (2) et les fonctions objectives (fitness) des particules sont calculées afin de pouvoir calculer la meilleure position de toutes Pg. 146 La mise à jour des Pb et Pg est faite à chaque itération suivant l’algorithme cité en figure 2.2. Le processus est répété jusqu’à satisfaction du critère d’arrêt Pseudo code de l’algorithme de base de la méthode PSO 9.6.9 Configuration de la méthode ➢ Les paramètres Il existe plusieurs paramètres qui interviennent et influencent la performance de la méthode PSO. Le choix de ces paramètres reste critique et dépend généralement du problème posé, mais a une grande influence sur la convergence de l’algorithme. Parmi les paramètres qui rentrent en ligne de compte citons : – La dimension du problème – Le nombre des particules – La disposition des particules – Les coefficients de confiance – La vitesse maximale 147 – Le facteur d’inertie – Le facteur de construction – La notion du voisinage ➢ Le coefficient d’inertie Le coefficient d’inertie w a été introduit pour contrôler l’influence de la direction de la particule sur le déplacement futur. Le but de l’introduction de ce paramètre est de réaliser un équilibre entre la recherche locale (exploitation) et la recherche globale (exploration). La formule [1] de calcul de la vitesse devient : V (t+1)= w V( t)+ C1 r1 (Pb( t)- X( t))+ C2 r2 (P g( t)-X (t)) La valeur de w est généralement constante, mais peut être variable dans certains cas, une grande valeur de w est synonyme d’une grande amplitude de mouvement et donc d’exploration globale de l’espace de recherche. Les études indiquent une meilleure convergence pour w entre 0.8 et 1.2. La détermination de la meilleure valeur de ce paramètre pour chaque algorithme se fait à travers des expérimentations numériques. Les auteurs ont proposé un coefficient d’inertie dynamique qui varie au cours du temps, et diminue linéairement au cours du processus de l’optimisation. Il commence par une valeur proche de 0.9 et descend linéairement pour arriver à 0.4. ➢ Le critère d’arrêt Le critère d’arrêt diffère suivant le problème d’optimisation posé et les contraintes de l’utilisateur, il est fortement conseillé de doter l’algorithme d’une porte de sortie puisque la convergence vers la solution optimale globale n’est pas garantie dans tous les cas de figure même si les expériences dénotent la grande performance de la méthode. Différentes propositions ont eu lieu : l’algorithme doit alors s’exécuter tant que l’un des critères de convergence n’a pas été atteint cela peut être : le nombre maximum d’itérations ; l’optimum global est connu a priori, on peut définir une "précision acceptable". D’autres critères d’arrêt peuvent être utilisés selon le problème d’optimisation posé et des contraintes utilisateurs. Trois critères sont proposés pour notre modèle. ➢ Proposition d’une approche de parallélisassions de la méthode PSO Dans l’implémentation de l’algorithme classique de la méthode PSO, tous les calculs se font d’une manière séquentielle, c’est de là que vient l’idée de la parallélisassions pour améliorer les performances de l’algorithme. Plusieurs scénarios s’imposent, celui que nous avons adopté pour notre implémentation, permet de paralléliser les calculs en lançant un ensemble de threads sur des lots de particules se positionnant dans des voisinages différents. Les threads, sorte de processus, s’exécutent en parallèle pour chaque itération de l’algorithme. Chaque thread exécute le traitement d’une itération de son lot de particules, et attend que les autres threads finissent leurs traitements pour mettre à jour les voisinages et 148 commencer une Nouvelle itération. Ce scénario se répète jusqu’à l’obtention d’une solution satisfaisante : “atteinte du critère d’arrêt”. Nos voisinages ont la forme de sphères, qui sont mises à jour à chaque itération : leurs centres évoluent et la valeur du rayon change suivant des conditions relatives au nombre de voisinages. La particularité de l’approche consiste à profiter de la robustesse de l’algorithme PSO dans le choix du bon paramétrage, plus particulièrement la notion de voisinage dynamique, dans le but de créer la diversité dans la recherche et dans le partage de l’information pour une convergence plus optimale. Aussi bien le calcul parallèle qui permet d’accélérer les calculs afin d’avoir une solution optimale dans un temps de calcul optimisé. Représentation de l’approche implémentée 149 9.7 Système immunitaire artificiel 9.7.1 Introduction Le système immunitaire biologique constitue une arme contre des intrus dans un corps donné. Pour ce faire, il existe plusieurs cellules qui contribuent à éliminer ces intrus nommé antigènes. Ces cellules participent pour ce qu’on appelle une réponse immunitaire biologique. Le système immunitaire naturel est assez compliqué pour qu’une simulation artificielle soit réalisée d’une façon complète. Par contre, les chercheurs ont réussi à simuler les fonctions les plus pertinentes dans un système immunitaire biologique pour que l’artificiel hérite le maximum des fonctionnalités naturelles dans le domaine de la reconnaissance des formes. 9.7.2 Principe du fonctionnement du système immunitaire naturel Le système immunitaire protège l'organisme contre l'invasion de corps étrangers. Il est constitué de cellules différentes réparties dans tout l'organisme. Chaque catégorie de cellules à une fonction spécifique et se déplace dans l'organisme selon les besoins. La réponse immunitaire fait intervenir deux types de mécanismes qui sont d'apparitions successives au cours de l'évolution des espèces et sont intimement connectés : a. L'immunité naturelle non spécifique, encore appelée innée ou naïve, repose sur une distinction globale du soi et du non-soi. C'est une réponse immédiate, non spécifique de l'agresseur et non adaptative. b. L'immunité acquise spécifique, également appelée immunité saisie ou adaptative, représente la partie du système immunitaire qui peut identifier spécifiquement et éliminer sélectivement le micro-organisme et les molécules étrangères elle se caractérise par une spécificité antigénique, diversité, et mémoire immunologique. 9.7.3 Définition des AIS Les systèmes immunitaires artificiels (AIS) sont des systèmes informatiques inspirés par les principes et les processus du système immunitaire naturel des vertébrés. Les algorithmes exploitent typiquement les caractéristiques du système immunitaire d’étude et de mémoire pour résoudre un problème. Ils sont couplés à l’intelligence artificielle et quelques algorithmes d’AIS sont étroitement liés à algorithmes génétiques. 9.7.4 Histoire des AIS L'AIS a commencé au milieu des années 80 par Farmer, Packard et Perelson's (1986) et papiers de Bersini et de Varela sur les réseaux immunisés (1990). Cependant, c'était seulement au milieu des années 90 que l'AIS est devenu un domaine à son propre chef. Forrest et autres (sur choix négatif) a commencé en 1994 ; et Dasgupta a entrepris des études 150 étendues sur des algorithmes négatifs de choix. La chasse et le Cooke ont commencé les travaux sur les modèles immunisés de réseau en 1995 ; Timmis et Neal ont continué ce travail et ont apporté quelques améliorations. De Castro et Von Zuben's et travail de Nicosia et de Cutello (sur choix clonal) est devenu notable en 2002. Le premier livre sur les systèmes immunitaires artificiels a été édité par Dasgupta en 1999. Nouvelles idées, telles que la théorie de danger et les algorithmes inspirés par système immunitaire inné, sont maintenant explorés également. Bien qu'un certain doute qu'ils offrent encore à quelque chose au-delà des algorithmes existants d'AIS, ceci soit discuté avec chaleur, et la discussion fournit un les forces d'entraînement principales pour le développement d'AIS à l'heure actuelle. À l'origine l'AIS s'est mis à trouver des abstractions efficaces des processus trouvés dans système immunitaire mais, plus récemment, il devient a intéressé en modelant les processus biologiques et en s'appliquant des algorithmes immunisés aux problèmes de bioinformatiques. 9.7.5 Les algorithmes des AIS Les modèles de conceptions les plus utilisés sont les réseaux immunitaires, la sélection clonale et la sélection négative. ➢ Algorithme de la sélection négative La sélection négative est le processus qui permet de distinguer le soi du non soi, elle a été appliquée à des problèmes de détections d'anomalies, son algorithme a la forme suivante : Générer le Soi comme étant un ensemble S d’éléments dans un espace U qui doivent être surveillés. S peut représenter le sous-ensemble des états considérés comme normaux pour le système. Générer un ensemble F de détecteurs (motifs) s’appariant avec certains éléments de S. Pour copier le fonctionnement du système immunitaire générer des détecteurs aléatoires et supprimer ceux qui sont trop généraux. Une approche efficace essaye de réduire au minimum le nombre de détecteurs produits tout en maximisant la zone couverte de l’espace du non soi. Surveillez S à l’aide de F. Si l’un quelconque des détecteurs ne s’apparie pas alors un changement s’est produit. Domaine d’application : Cet algorithme est utilisé dans la sécurité informatique et la détection des spam. ➢ Algorithme de la sélection clonal La sélection clonale artificielle est une abstraction des mécanismes de mémorisation des systèmes immunitaires, les algorithmes développés sont généralement dédiés à l’optimisation ou à la recherche. Un anticorps est une abstraction de la cellule S et des anticorps qu’elle produit, et les antigènes représentent eux-mêmes. 151 1. Produire un ensemble de solutions (répertoire d'anticorps) de N candidat qui sont défini par le problème à étudier ; 2. Choisir les n1 cellules qui ont la plus grande affinité à l'antigène ; 3. Copier (produire des copies identiques de) ces cellules choisies. Le nombre de copies est proportionnel aux affinités : plus l'affinité est haute, plus le nombre de clone est grand; 4. Changer la structure des cellules choisies (hyper mutation). Le taux de changement est proportionnelle à leurs affinités : plus l'affinité est haute, plus le taux de Changement est petit; 5. Sélectionner les n2 cellules (du résultat de l'étape 4) qui ont la plus grande affinité à l'antigène pour composer le nouveau répertoire ; 6. Remplacer quelques cellules qui possèdent des valeurs d'affinité faible par les nouvelles cellules ; 7. Répéter les étapes 2 à 6 jusqu'à ce qu'un critère d'arrêt donné soit rencontré. Domaine d’application : Ce genre d'algorithme peut être utilisé pour des problèmes d'optimisations, de Clustering, ou de reconnaissance des formes. ➢ Réseaux immunitaires La théorie immunitaire de réseau semble très attrayante sur l'intelligence artificielle. Car premièrement, elle présente un système dynamique capable d'exécuter des interactions entre ses propres constituants et entre ses constituants et l'environnement externe. Deuxièmement, elle offre les possibilités d'ajuster la structure du système (réseau) et les paramètres du système sur l'environnement. Son algorithme général est : 1. Initialisation : initialiser un réseau de cellules immunisées ; 2. Boucle de population : pour chaque antigène : 2.1. Identification antigénique : calculez les affinités des anticorps face à l'antigène ; 2.2. Interactions du réseau : calculez les affinités entre toutes les paires d'anticorps ; 2.3. Méta dynamique : ajoutez des nouveaux anticorps aux réseaux et supprimez qui sont inutile (le choix est basé sur un certain critère) ; 2.4. Niveau de stimulation : évaluez le niveau de stimulation de chaque cellule du réseau tenant compte des résultats des étapes précédentes ; 2.5. Dynamique de réseau : mettre à jour la structure et les paramètres du réseau selon le niveau de stimulation de différentes cellules ; 3. Cycle : répéter l'étape 2 jusqu'à ce qu'un critère donné d'arrêt soit rencontré ; 152 Domaines d’applications : • • • Datamining Robotique Ordonnancement. 9.7.6 Exemples d’applications ❖ Esponda et Forrest ont appliqué la sélection négative au problème de détection d’intrusion dans un réseau informatique (Le système nommé LYSIS). ❖ Knight et Timmis ont proposé MARITA, un algorithme pour l’apprentissage supervisé inspiré de la théorie des réseaux immunitaires et de la sélection clonale. ❖ De Castro et Von Zuben, en 2001, ont proposé aiNet, un algorithme qui combine la théorie des réseaux immunitaires et la sélection clonale. ❖ Warrender et Forrest ont appliqué un algorithme de détection des intrusions à l’aide d'appels système. 153 9.8 La recherche tabous 9.8.1 Introduction La recherche tabous a été introduite par Glover (1989). L’exploitation du voisinage permet de se déplacer de la solution courante vers son meilleur voisin. Ce dernier n’est pas forcément meilleur que la solution courante. Cette méthode permet un déplacement d’une solution S vers la meilleure solution S 0 appartenant à son voisinage V (S). L’algorithme 5 résume la procédure de la Recherche Tabous. Le déplacement interdit, d’où vient le mot tabou, consiste au retour vers une solution récemment visitée. Pour cela, les solutions visitées sont temporairement interdites et stockées dans une liste taboue. Une fois la liste taboue est remplie, la solution la plus ancienne est retirée (selon le principe d’une file d’attente). La taille de cette liste est un paramètre crucial qui affecte la résolution du problème. Elle peut être statique ou dynamique. 9.8.2 Histoire Tendance dans les années 70 : techniques d’amélioration des solutions par recherche locale ⇒ procédure de recherche itérative qui améliore une solution de départ en lui appliquant une série de modifications locales (mouvements). ⇒ arrêt lorsqu’un optimum local est trouvé • 1983 : une nouvelle heuristique apparaît, le Recuit Simulé ⇒ permet une exploration aléatoire contrôlée de l’espace des solutions. • 1986 : bien que son origine remonte à 1977, la Recherche Tabou n’est proposée qu’au milieu des années 80 par Fred Glover : ⇒ méthode développée pour résoudre des problèmes combinatoires (la plupart NP-durs). ⇒ révolution de cette méthode par rapport aux autres : permet de surmonter le problème des optima locaux par l’utilisation de listes taboues (principe de mémoire). • Par la suite : algorithmes génétiques, colonies de fourmis, … Mise en contexte : « La recherche avec tabou peut être vue comme une "méta-heuristique", superposée à une autre heuristique. L'approche vise à éviter les optimums locaux par une stratégie d'interdiction (ou, plus généralement, de pénalisation) de certains mouvements. » Heuristique : Une heuristique est une stratégie de bon sens pour se déplacer intelligemment dans l’espace des solutions, afin d’obtenir une solution approchée, le meilleur possible, dans un délai de temps raisonnable. 154 Métaheuristique : Le but d’une méta-heuristique, est de réussir à trouver un optimum global. Pour cela, l’idée est à la fois de parcourir l’espace de recherche, et d’explorer les zones qui paraissent prometteuses ; mais sans être « piégé » par un optimum local. « Méta heuristique » • notion de méta heuristique : souvent utilisée pour décrire la RT (≠ méthode exacte). • une stratégie qui guide et modifie d’autres heuristiques afin de produire des solutions qui diffèrent de celles généralement obtenues dans la recherche d’un optimum local. • ces heuristiques « guidées » peuvent se limiter à de simples descriptions et évaluations de déplacements permis pour passer d’une solution à une autre. 9.8.3 Définition de la Recherche Tabous Méthode heuristique de recherche locale utilisée pour résoudre des problèmes complexes et/ou de très grande taille (souvent NP-durs). La RT a plusieurs applications en programmation non linéaire (PNL). Principe de base : ● poursuivre la recherche de solutions même lorsqu’un optimum local est rencontré et ce, ■ en permettant des déplacements qui n’améliorent pas la solution. ■ en utilisant le principe de mémoire pour éviter les retours en arrière (mouvements cycliques). • Mémoire : ⇒ elle est représentée par une liste taboue qui contient les mouvements qui sont temporairement interdits. ⇒ mouvements interdits ou solutions interdites. ⇒ son rôle évolue au cours de la résolution : diversification (exploration de l’espace des solutions) vers intensification. 2 alternatives : ● Une liste contient les solutions interdites (coûteux en place mémoire). ● Une liste des mouvements interdits (qui ramènent vers ces solutions déjà visitées). ○ Avantages : prend moins de place mémoire. ○ élimine plus de solutions que celles visitées effectivement Généralement les listes sont gérées en FIFO (first in first out). Résultat : • Liste taboue des mouvements interdits élimine plus de solutions que celles visitées effectivement. • Plus efficace que la liste des solutions taboues mais élimine éventuellement de très bonnes solutions. • Exception aux interdictions : 155 Il est possible de violer une interdiction lorsqu’un mouvement interdit permet d’obtenir la meilleure solution enregistrée jusqu’à maintenant. Idée : une fonction d’aspiration qui permet de lever le statu tabou. (L’exception à l'interdiction). • La liste taboue peut s’avérer trop contraignante lors de la recherche d’une solution. Le mécanisme d’aspiration permet de lever ponctuellement le statut “tabou” afin d’atteindre des solutions inédites. – L’intensification : est l’une des stratégies qui permet de mémoriser les meilleures solutions rencontrées (ou leur configuration) et les utilise afin d’améliorer la recherche. – La diversification : cherche à utiliser des mouvements encore jamais réalisés afin d’explorer des régions nouvelles de l’espace de recherche en mémorisant bien sur les solutions les plus visitées. Résumé d’idée de base Acceptation de solutions moins bonnes que la solution courante Risque de cycler Liste de tabous : solutions interdites pour un nombre d’itérations Critères d ’aspiration : conditions permettant de lever le statut tabou d ’une solution 9.8.4 Exemple application de la RT : la fable des randonneurs Un randonneur malchanceux, est perdu dans une région montagneuse. Toutefois, il sait qu’une équipe de secours passe régulièrement par le point situé à la plus basse altitude dans la région. Ainsi, il doit se rendre à ce point pour attendre les secours. Comment s’y prendra-til ? Il ne connaît pas l’altitude de ce point et, à cause du brouillard, il ne voit pas autour de lui. Donc, arrivé à un croisement, il doit s’engager dans une direction pour voir si le chemin monte ou descend. Tout d’abord, il commence par descendre tant qu’il peut, en choisissant le chemin de plus grande pente à chaque croisement. Voir figure 01 Puis, lorsqu’il n’y a plus de sentier menant vers le bas, il décide de suivre le chemin qui remonte avec la plus faible pente car il est conscient qu’il peut se trouver à un minimum local. Voir figure 02 Toutefois, dès qu’il remonte, il redescend vers le point où il était. Cette stratégie ne fonctionne pas. Par conséquent, il décide de s’interdire de faire marche arrière en mémorisant la direction d’où il vient. Il est à noter que sa mémoire ne lui permet de mémoriser que les deux dernières directions prohibées. Voir figure 03 156 Cette nouvelle stratégie lui permet d’explorer des minimums locaux et d’en ressortir. À un moment donné, il arrive à un point où il décèle une forte pente descendante vers le sud. Toutefois, les directions mémorisées lui interdisent d’aller vers le sud car cette direction est prohibée. Il décide d’ignorer cette interdiction et emprunte ce chemin. Voir figure 04 Cette décision fut bénéfique: il arriva au point de plus basse altitude et attendit les secours qui ne tardèrent à arriver. Voir figure 05 Définition des variables : Voir figure 06 i : la solution actuelle. • i’ : la prochaine solution atteinte (solution voisine). • N(i): l’espace de solutions voisines à i (l’ensemble des i’). • m : mouvement de i à i’ • i globale : la solution optimale globale qui minimise la fonction objectif f( ). • i* : la solution optimale actuelle 157 ➢ Définition des termes des mouvements a appliqué dans l’algorithme Mouvement non améliorateur : un mouvement qui nous sortirait d’un minimum local i* en nous amenant à une solution voisine i’ pire que l’actuelle. La méthode taboue permet un mouvement non améliorateur, comme le permet le recuit simulé. La différence entre les 2méthodes est que la RT choisira le meilleur i’ dans N(i), l’ensemble des solutions voisines. Voir figure 07 Mouvement tabou : un mouvement non souhaitable, comme si on redescendait à un minimum local d’où on vient juste de s’échapper. Le mouvement est considéré tabou pour un nombre prédéterminé d’itérations. k représente l’index des itérations (l’itération actuelle). Voir la figure 08 T : liste des mouvements tabous. Il peut exister plusieurs listes simultanément. Les éléments de la liste sont t (i,m). Une liste T avec trop d’éléments peut devenir très restrictive. Il a été observé que trop de contraintes (tabous) forcent le programme à visiter des solutions voisines peu alléchantes à la prochaine itération. Une liste T contenant trop peu d’éléments peut s’avérer inutile et mener à des mouvements cycliques. • a (i,m) :critères d’aspiration. Déterminent quand il est avantageux d’entreprendre m, malgré son statut tabou. 9.8.5 L’algorithme de la Recherche Tabous • Étape 1 : choisir une solution initiale i dans S (l’ensemble des solutions) Appliquer i* = i et k = 0 • Étape 2 : appliquer k = k+1 et générer un sous-ensemble de solutions en N(i,k) pour que : – les mouvements tabous ne soient pas choisis. – un des critères d’aspiration a(i,m) soit applicable. 158 • Étape 3 : choisir la meilleure solution i’ parmi l’ensemble de solutions voisines N(i,k). Appliquer i = meilleur i’. • Étape 4 : si f(i) <= f(i*), alors nous avons trouvé une meilleure solution. Appliquer i* = i • Étape 5 : mettre à jour la liste T et les critères d’aspiration. • Étape 6 : si une condition d’arrêt est atteinte, stop. Sinon, retour à Étape 2. Condition d’arrêt : condition qui régira l’arrêt de l’algorithme. Des critères d’arrêt possibles sont : - Si une solution prouvée optimale a été trouvée. - Si une limite a été atteinte en ce qui concerne : - Le nombre d’itérations ; - Le temps de calcul. - Si la recherche semble stagner : nombre d’itérations sans amélioration de la meilleure configuration trouvée. Ex : arrêt après 22 itérations (k = 22). Comportement de l’algorithme tabous ●Si la liste taboue est courte : ⁻ Il y a moins d’interdictions (mouvements tabous). ⁻ La recherche épouse mieux les optima locaux rencontrés. ⁻ L’algorithme tend à parcourir de moins grandes distances dans l’espace de recherche. Il explore moins l’espace de recherche. ⁻ Le risque de cycles est plus grand. ● Si la liste taboue est longue : ⁻ Il y a avantage d’interdictions (mouvements tabous). ⁻ La recherche risque de manquer de nombreux optima locaux sur son chemin. ⁻ L’algorithme tend à parcourir de plus grandes distances dans l’espace de recherche. Il explore davantage l’espace de recherche. ⁻ Le risque de cycles est réduit. Résultat : • Le comportement de l’algorithme dépend : ⁻ De la longueur de la liste taboue. 159 ⁻ la taille de la liste de candidats (si on en utilise une) Plus la liste de candidats est petite, moins la liste taboue a besoin d’être grande. 9.8.6 Domaines d'applications • Optimisation de la production et gestion des inventaires : ⇒ production juste-à-temps. ⇒ planification d’inventaires multi-produits . ⇒ gestion des économies d’échelle. • Problèmes d’affectation et de localisation. • Optimisation de graphes : ⇒ coloration de graphes (Hertz, Taillard, De Werra). ⇒ clique maximale (Gendreau, Soriano). • Télécommunications : ⇒ conception de réseaux (optiques, de service, …). ⇒ routage d’appels. • Logique et intelligence artificielle : ⇒ reconnaissance et classification de formes. ⇒ réseaux de neurones. • Application à diverses technologies : ⇒ construction de stations spatiales. ⇒ distribution de puissance électrique. ⇒ inversion sismique. • Création d’horaires. • Optimisation de structures. ⇒ structures des protéines. ⇒ séquençage d’ADN. • Techniques spécialisées. ⇒ reactive Tabu search. • Design. • Résolution en parallèle (parallel computing) . • Optimisation continue et stochastique. • Analyses financières. 160 9.8.7 Exemple d’application : Problème du job shop Les pièces n’ont pas la même progression sur les machines. - n pièces, m machines ⇒ (n!)m cédules possibles. - 10 pièces, 8 machines = 3 X 1052 cédules possibles. - solution : utilisation d’heuristiques comme la RT. Déterminer la valeur de la fonction objective : • Fonction objectif = minimiser le temps total de production : ⇒ Minimiser le plus long chemin dans le graphe • Diagramme de Gantt (supposons que toutes les opérations ont une durée unitaire) : 161 Déterminer le voisinage : • Utilisation de la RT pour trouver une bonne solution puisqu’il est impossible de tester le temps total de production pour toutes les cédules applicables. • Comment déterminer le voisinage d’une solution ? ⇒ À partir d’une solution, on peut obtenir une solution voisine réalisable en permutant deux tâches consécutives sur le chemin critique (et sur une même machine). Résultat de cette permutation Solution finale: M1: P1 – P3 – P2 M2: P2 – P1 – P3 M3: P1 – P2 – P3 162 Rôle de la RT : • En fonction des solutions retenues et des permutations réalisées avec la RT, il est possible de modifier le graphe qui modélise le problème du job shop. • Présentation de la résolution d’un problème de job shop dans Excel à l’aide de la RT. 163 Chapitre 4 10 Les solveurs d'optimisation 10.1 Introduction Dans le but de découvrir des méthodes de résolution et d’optimisation des problèmes dans la recherche opérationnelle nous avons fait une recherche sur les solveurs d’optimisation que nous résumons dans ce rapport. En effet beaucoup de problèmes de programmation de diffèrent type ne peuvent pas être résolus manuellement, ils nécessitent des moyens plus rapide et efficace pour avoir de meilleures décisions en matière de planification, d’allocation et programmation des ressources plus rares. C’est ici que l’importance des solveurs d’optimisation et leur rôle devient clair. Au cours des dernières années, les solveurs d’optimisation ont attiré l’attention des chercheurs en raison de leur capacité à mieux gérer un grand nombre de contraintes ainsi que des fonctions objectives. Un grand nombre de solveurs d’optimisation sont développé pour résoudre des problèmes complexes. La conception et le développement de ces solveurs d’optimisation dépend de la nature du problème particulier à être manipulé. Un seul solveur d’optimisation est incapable de résoudre tous les types de problèmes de la vie réelle. Dans ce rapport nous introduisons et analysons les différents types de solveurs d’optimisation (CPLEX, ARTLEYS KNITRO, AMPL, APMONITOR), leurs avantages et inconvénients, et une comparaison entre ces différents solveurs d’optimisation. Enfin, nous présentons quelques exemples d’application expliquant comment ces solveurs fonctionnent et comment nous pouvons les utiliser. 10.2 Définition d’un solveur de programmation mathématique C’est un logiciel capable de calculer le résultat d’un problème mathématique après sa transcription informatique. En effet, c’est un outil de calcul très puissant qui permet de résoudre de manière optimale ou non optimale les systèmes d’équations et inéquations complexes qu’on lui soumet. 164 Quand la fonction objective et les contraintes ont des relations linéaires on fait appel aux solveurs d’optimisation tant que toutes les variables de décision peuvent prendre des valeurs continues dans le résultat. 10.3 Les différents types des solveurs d’optimisation Il existe généralement cinq solveurs d’optimisation dépendamment de type de programmation utilisé, on les liste comme suit : 10.3.1 Solveurs de programmation linéaire On s’intéresse à ces solveurs mathématiques lorsque les contraintes et la fonction objective ont des relations linéaires. C’est le cas où on trouve que le résultat contient des valeurs continues pris par les variables de décisions. Exemple : CPLEX, Artelys Knitro 10.3.2 Solveurs de programmation en nombres entiers mixtes On est besoin des solveurs de programmation en nombres entiers mixtes Lorsqu’on on rencontre des décisions admettant des choix discrets et continu. Ces solveurs de programmation de type entier peuvent être utiliser au cas où les décisions contiennent des choix discrets, les variables entières sont les seuls types que les variables de décisions peuvent prendre, par contre il existe certains cas où ces variables peuvent prendre des valeurs continues dans le résultat. 10.3.3 Solveurs de programmation quadratiques Quand les variables des décisions prennent des valeurs entières ou continues on est censé d’utiliser des solveurs de programmation quadratiques en entier mixtes. De même, on s’intéresse à utiliser ces types de solveurs au cas où la fonction objective admet des termes quadratiques. Les termes quadratiques peuvent être convexe ou non convexe. 10.3.4 Solveurs de programmation par contraintes quadratiques Des solveurs de programmation comme CPLEX nous permet également de résoudre des problèmes contenant des contraintes de type quadratiques convexe. Les solveurs de programmation à contraintes quadratiques en nombres entiers mixtes sont utilisés quand les variables de décision peuvent être entières ou continues. 165 En effet, les problèmes contenant des contraintes de type quadratique sont formulés sous forme de programme SOCP, le SOCP (second-order-cone programs), contient des formulations à l’aide des cônes pivotés. 10.3.5 Solveurs de programmation par contraintes Ce type de solveurs nous permet d’obtenir des solutions optimales concernant les problèmes de type combinatoire qui ont des variables de décision de type entières, de même, les problèmes de séquencement et de planification détaillés, ces derniers concernent les activités représentées comme variables d’intervalles ainsi sous forme de fonction cumulative. Les contraintes de ces problèmes peuvent prendre des valeurs linéaires ou non linéaires. Example : ILOG CP Optimizer. Dans la partie qui suit, nous allons montrer quelques exemples de solveurs d’optimisation très connus qui sont : CPLEX, AMPL, ARTELYS KNITRO et APMONITOR 10.4 Des solveurs d’optimisation 10.4.1CPLEX Le CPLEX est un outil informatique, c’est un solveur d’optimisation produit par IBM, Le nom du CPLEX en anglais, adresse sur le langage C ainsi que l’algorithme du Simplexe, il se compose d’une bibliothèque riche en fonctions qui sont compatibles avec plusieurs langages de programmation comme C, C#, C++, Python et Java, et un exécutable (CPLEX)interactif. CPLEX nous offre la possibilité de résoudre plusieurs types de problèmes, on peut citer : • Programmation en nombres entiers. • Programmation mixte en nombres entiers. • Programmation quadratique. • Optimisation multi-objectifs. Aussi CPLEX Optimizer fournit des solveurs de programmation mathématique flexibles et d’hautes performances pour la PL, PNM, PQ, et PCQ. Ces solveurs incluent un algorithme parallèle distribué pour la programmation en nombres entiers mixtes afin de tirer parti de plusieurs ordinateurs pour résoudre des problèmes difficiles, en outre, il nous permet de résoudre des modèles d’optimisation avec des millions de contraintes et variables. Cela d’une part, d’une autre part le CPLEX trouve des difficultés concernant : La résolution des problèmes de programmation par contrainte et L’existence de divers paramètres à régler. Traitement des données provenant de différentes sources comme le bloc-notes, etc… 166 Ceci d’une part, d’autre part il existe certains problèmes d’optimisations combinatoire que les méthodes de programmation mathématique traditionnelles ne peuvent pas facilement les linéariser et résoudre (dans le cas des problèmes de grande taille, le temps de traitement peut dépasser un jour par exemple) ce qui est considérer comme l’un des inconvénients du CPLEX. Á titre d’exemple, la programmation par contrainte, c’est pour cela l’IBM a produit un complémentaire de CPLEX sous le nom de ILOG CP Optimizer qui fournit un large ensemble de contraintes logiques et arithmétiques, de plus un optimiseur très puissant qui permet à l’optimisation combinatoire plusieurs avantages d’un processus d’exécution et de développement par modèle. 10.4.2 AMPL AMPL ou ‘‘A Mathematical Programming Language’’ est un langage de modélisation algébrique sert à décrire et résoudre des problèmes de type optimisation et planification à grande échelle et grande complexité. AMPL peut fonctionner avec une large gamme de solveurs, à la fois open source et propriétaires, notamment CBC, CPLEX… et il est communément connu pour être utilisé par plusieurs entreprises clientes, des agences gouvernementales et aussi des établissements universitaires. En plus AMPL permet de traiter plusieurs formes de problèmes d’optimisation : • Programmation linéaire • Programmation quadratique • Programmation en nombre entier mixte • Programmation par contrainte Parmi les avantages d'AMPL on peut citer sa syntaxe qui est bien similaire avec la notation mathématique des problèmes d'optimisation. Ce qui permet de définir très concisément et lisiblement des problèmes dans le domaine de l'optimisation. En outre, l’AMPL support plusieurs autre solveurs d’optimisation (CPLEX, CPLEX CP Optimizer, Artelys Knitro…). Selon les statistiques de NEOS, AMPL est le format le plus populaire pour représenter des problèmes de programmation mathématique. D’après des statistiques réalisées par NEOS en 2011 on a : 167 Un des inconvénient d’AMPL est que La version gratuite « étudiant » est limitée à 300 variables (500 pour les problèmes linéaires) et un total de 300 objectifs et contraintes c’est que ne permet pas de résoudre des problèmes de larges tailles. 10.4.3 Artelys Knitro Artelys Knitro est un solveur d'optimisation mercantile spécialisée dans la détermination de solutions pour les problèmes non linéaire. Richard Waltz, Jorge Nocedal, Todd Plantenga et Richard Byrd ont co-fondé KNITRO, qui signifie "Nonlinear Interior Point Trust Region Optimization". La version initiale, lancée en 2001, a été réalisée par Artelys après plusieurs années de recherche à la Northwestern University (via Ziena Optimization LLC). Il permet de traiter plusieurs formes de problèmes d’optimisation : • Problèmes d’optimisation non linéaire généraux (NLP). • Problèmes linéaires (LP) ; • Problèmes quadratiques (QP/QCQP/SOCP). • Systèmes d'équations non linéaires ; En outre Artelys Knitro est un outil polyvalent, déjà utilisé dans de nombreux domaines d’application telle que : Banque & finance, Economie & théorie des jeux, Statistique et analyses de données, Energie, Développement durable, Mathématique & géométrie …Et ses principales fonctionnalités : Artelys Knitro fonctionne avec une grande variété de langages de programmation et de modélisation (tels que AIMMS, AMPL, GAMS, et MPL) : • Programmation orientée objet avec C++, C#, Java et Python. • Programmation matricielle avec Julia, C, Fortran, MATLAB, et R. • Interface avec Excel par le biais de Front line System. Artelys Knitro possède également plusieurs fonctionnalités majeures et options disponibles, un tuner automatique, multi start (parallélisable) pour l'optimisation globale, des outils intégrés d'approximation et de vérification des dérivées et un pré-solveur intégré. 10.4.4 APMonitor APMonitor, ou "Advanced Process Monitor" est un logiciel d'optimisation pour les équations algébriques mixtes entières et différentielles. Les modes de fonctionnement incluent la réconciliation des données, l'estimation de l'horizon mobile, l'optimisation en temps réel, la simulation dynamique et le contrôle prédictif non linéaire avec des capacités de solution pour les équations différentielles et algébriques (DAE) à indice élevé. APMonitor est couplé à des solveurs à grande échelle et permet de traiter plusieurs formes de problèmes d’optimisation : • Programmation linéaire • Programmation non-linéaire 168 • Programmation quadratique • Programmation en nombre entier mixte Un des avantages de APMonitor est qu’il est en concurrence avec des logiciels similaires sous différents aspects, mais il est unique en termes d'étendue, de facilité d'utilisation et de disponibilité en tant que logiciel gratuit pour une utilisation académique et commerciale, et la facilité de leur support produit grâce à une interface en ligne. D’ailleurs, l’APMonitor n'est pas la bonne solution si vous devez résoudre un problème d'optimisation avec des nombres complexes. 10.5 Comparaison des solveurs Inconvénients des solveurs d’optimisation Ainsi qu’on a introduit quelques solveurs d’optimisation, on va montrer une comparaison entre eux concernant le langage de programmation qu’ils supportent et quelques remarques sur chacun d’eux : Nom AMPL APMonitor Artelys Knitro Langage C, C++, C#, Python, Java, Matlab Python, C++, Fortran, Julia C, C++, C#, Python, Java, Matlab Remarques Un langage de modélisation algébrique populaire pour l’optimisation linéaire, mixte et non linéaire. Les versions étudiant et AMPL pour les cours sont disponibles gratuitement. Un langage de modélisation différentielle et algébrique pour l’optimisation en nombres entiers mixtes et non linéaires. Il est disponible sous forme de boîte à outils MATLAB, de module Python, de package Julia ou à partir d'une interface de navigateur Web Bibliothèque à usage général, spécialisée dans l’optimisation non linéaire. Gère les problèmes en nombres entiers mixtes et les programmes mathématiques avec contraintes d’équilibre. Algorithmes spécialisés pour les problèmes des moindres carrés non linéaires. 169 CPLEX C, C++, C#, Python, Java IBM CPLEX Optimization Studio est une suite de moteurs d’optimisation (CPLEX pour la programmation par contraintes), un langage de modélisation (OPL) et un environnement de développement intégré. Le tableau ci-dessus met en œuvre une comparaison entre les prix des différents types de solveurs d’optimisations. D’après ce qui précède, il est clair que les solveurs d’optimisation sont très couteux, c’est qu’on peut considérer comme l’un des plus grands inconvénients de ces solveurs. 10.6 Quelques exemples d’application Pour clarifier un peu le fonctionnement des précédents solveurs on donne les exemples suivants pour chaque solveur d’optimisation : 170 ➢ APMonitor: Model hs55 Parameters u[1] = 1androscots u[2:3] = 1e20 u[4] = 1 u[5:6] = 1e20 End Parameters Variables x[1] = 1, >=0, <=u[1] x[2] = 2, >=0, <=u[2] x[3:5] = 0, >=0, <=u[3:5] x[6] = 2, >=0, <=u[6] End Variables Equations x[1] + 2*x[2] + 5*x[5] = 6 x[1] + x[2] + x[3] = 3 x[4] + x[5] + x[6] = 2 x[1] + x[4] = 1 x[2] + x[5] = 2 x[3] + x[6] = 2 ! best known objective = 19/3 minimize x[1] + 2*x[2] + 4*x[5] + exp(x[1]*x[4]) End Equations End Model Solution: apm 128.187.56.207_online_7162 ---------------------------------------------------------------APMonitor, Version 1.0.1 APMonitor Optimization Suite ---------------------------------------------------------------171 --------- APM Model Size -----------Each time step contains Objects : 0 Constants : 0 Variables : 12 Intermediates: 0 Connections : 0 Equations : 7 Residuals : 7 Number of state variables: 6 Number of total equations: - 6 Number of slack variables: - 0 --------------------------------------Degrees of freedom : 0 ---------------------------------------------Steady State Optimization with APOPT Solver ---------------------------------------------- Iter Objective Convergence 0 6.66667E+00 2.50000E-01 1 6.66667E+00 2.50000E-01 Successful solution --------------------------------------------------Solver : APOPT (v1.0) Solution time : 1.230000000214204E-002 sec Objective : 6.66666666666667 Successful solution --------------------------------------------------172 success flag: 1 Successful Solution Objective Value = 6.66666667 ➢ Artyles Knitro et AMPL : #Exemple de problème formulé comme un modèle AMPL utilisé # pour démontrer l'utilisation de Knitro avec AMPL. # Le problème a deux solutions locales : # le point (0,0,8) avec objectif 936.0, et # le point (7,0,0) avec objectif 951.0 # Définir des variables et Ils doivent être positifs. var x{j in 1..3} >= 0; # Fonction objectif à minimiser. minimize obj: 1000 - x[1]^2 - 2*x[2]^2 - x[3]^2 - x[1]*x[2] - x[1]*x[3]; # Contrainte d'égalité. s.t. c1: 8*x[1] + 14*x[2] + 7*x[3] - 56 = 0; # Contrainte d'inégalité. s.t. c2: x[1]^2 + x[2]^2 + x[3]^2 -25 >= 0; data; # Définir le point initial. let x[1] := 2; let x[2] := 2; let x[3] := 2; Solution: alg=2 bar_maxcrossit=2 173 outlev=1 ======================================= Commercial License Artelys Knitro 12.4.0 ======================================= Knitro presolve eliminated 0 variables and 0 constraints. algorithm: 2 bar_maxcrossit: 2 datacheck: 0 hessian_no_f: 1 outlev: 1 par_concurrent_evals: 0 The problem is identified as a QCQP. Problem Characteristics ( Presolved) ----------------------Objective goal: Minimize Objective type: quadratic Number of variables: 3( 3) bounded below only: 3( 3) bounded above only: 0( 0) bounded below and above: 0( 0) fixed: 0( 0) free: 0( 0) Number of constraints: 2( 2) linear equalities: 1( 1) quadratic equalities: 0( 0) gen. nonlinear equalities: 0( 0) linear one-sided inequalities: 0( 0) quadratic one-sided inequalities: 1( 1) 174 gen. nonlinear one-sided inequalities: 0( 0) linear two-sided inequalities: 0( 0) quadratic two-sided inequalities: 0( 0) gen. nonlinear two-sided inequalities: 0( 0) Number of nonzeros in Jacobian: 6( 6) Number of nonzeros in Hessian: 5( 5) Knitro using the Interior-Point/Barrier Conjugate Gradient algorithm. EXIT: Locally optimal solution found. Final Statistics ---------------Final objective value = 9.36000000000000e+02 Final feasibility error (abs / rel) = 0.00e+00 / 0.00e+00 Final optimality error (abs / rel) = 0.00e+00 / 0.00e+00 # of iterations = # of CG iterations 7 = 8 # of function evaluations = 0 # of gradient evaluations = 0 # of Hessian evaluations = 0 Total program time (secs) = Time spent in evaluations (secs) = 0.00115 ( 0.001 CPU time) 0.00000 ================================================================ =========== Knitro 12.4.0: Locally optimal or satisfactory solution. objective 936; feasibility error 0 7 iterations; 0 function evaluations CPLEX : Max Z = 5x + 4y Les contraints : 175 6x + 4y <= 24 x + 2y <= 6 -x + y <=1 y<=2 x,y >=0 Exemple (Production de jouets) par AMPL : – Une société de jouets produit des trains, des camions et des voitures, en utilisant 3 machines. – Les disponibilités quotidiennes des 3 machines sont 430, 460 et 420 minutes, et les profits par train, camion et voiture sont respectivement EUR 3, EUR 2 et EUR 5. 176 – Les temps nécessaires sur chaque machine sont : Exemple de production de jouets au format AMPL (modèle) Exemple de production de jouets au format AMPL (données) 177 178 Conclusion Dans ce document, nous avons essayé de comprendre la recherche opérationnelle (RO). D’abord nous avons vu quelques théories utilisées dans la RO tels que la NP-Complétude qui permet de classifier les problèmes RO (P, NP, NP-complet, NP-Difficile…) et la théorie des jeux. Ensuite, nous avons défini, modélisé et résolu quelques problèmes célèbres de la recherche opérationnelle qui peuvent être des problèmes de transport comme le VRP, TSP, FCTP… ou des problèmes d’ordonnancement comme le JSP. Après, nous avons étudié les méthodes de résolution utilisées dans la RO. Nous avons classifié ces méthodes en deux groupes : Les méthodes exactes comme la programmation dynamique et la méthode de Branch & Bound, qui donnent une solution optimale mais pour des problèmes de petites instances. Et les méthodes approchées (Heuristiques et métaheuristiques) tels que les algorithmes génétiques, la recherche tabous, les chaines de Markov… qui sont capables de trouver des solutions acceptables en un temps raisonnable. Enfin, nous avons vu quelques notions et exemples des solveurs d’optimisation qui sont des logiciels utilisés en recherche opérationnelle pour résoudre les problèmes RO. Bibliographie/ Webographie Game Theory 101: The Complete Textbook By William Spaniel Game Theory: A Very Short Introduction By Ken Binmore An Introduction to Game Theory By Diego Sánchez Rosas A Course in Game Theory By Martin J. Osborne and Ariel Rubinstein THEORIE DES JEUX : UNE INTRODUCTION By Jacques-Francois Thisse Adlakha, V., & Kowalski, K. (2003). A simple heuristic for solving small fixed-charge transportation problems. Omega, 31(3), 205-211. Balinski, M. L. (1961). Fixed‐cost transportation problems. Naval Research Logistics (NRL), 8(1), 41- 54. Buson, E., Roberti, R., & Toth, P. (2014). A reduced-cost iterated local search heuristic for the fixed-charge transportation problem. Operations Research, 62(5), 1095-1106. 179 Dwyer, P. S. (1966). Use of completely reduced matrices in solving transportation problems with fixed charges. Naval Research Logistics Quarterly, 13(3), 289-313. El-Sherbiny, M. M., & Alhamali, R. M. (2013). A hybrid particle swarm algorithm with artificial immune learning for solving the fixed charge transportation problem. Computers & Industrial Engineering, 64(2), 610-620. Gen, M., Altiparmak, F., & Lin, L. (2006). A genetic algorithm for two-stage transportation problem using priority-based encoding. OR spectrum, 28(3), 337- 354. Glover, F. (2005). Parametric ghost image processes for fixed-charge problems: A study of transportation networks. Journal of Heuristics, 11(4), 307-336. Hajiaghaei-Keshteli, M. (2011). The allocation of customers to potential distribution centers in supply chain [ALA 04] ALAYA I., SOLNON C., GHÉDIRA K., « Ant algorithm for the multi-dimensional knapsack problem », Proceedings of International Conference on Bioinspired Optimization Methods and their Applications (BIOMA 2004), 2004, p. 63–72. [BUL 99] BULLNHEIMER B., HARTL R., STRAUSS C., « An Improved Ant system Algorithm for the Vehicle Routing Problem », Annals of Operations Research, vol. 89, 1999, p. 319– GLOVER, Fred et Manuel LAGUNA. 1997. Tabu Search, Boston : Kluwer Academic Publishers, 382p [CAS 1999] L.N. Castro, F.J. Von Zuben, "Artificial immune systems : part I - Basic theory and applications», Rapport technique, Décembre 1999. https://fr.wikipedia.org/wiki/Optimisation_multiobjectif https://wikimemoires.net/2014/02/optimisation-multiobjectif-et-problemes-doptimisationmono-objectifs https://www.researchgate.net/figure/Classication-des-methodes-doptimisationmultiobjectif_fig2_321642314 https://publications.polymtl.ca/1603/1/2014_AlexandreLeuliet.pdf https://corpus.ulaval.ca/jspui/bitstream/20.500.11794/26365/1/31447.pdf https://homepages.laas.fr/sungueve/Docs/PhD/These_SUNGUEVEU_20062009.pdf https://doc.rero.ch/record/32038/files/MASBA_6.pdf https://fr.wikipedia.org/wiki/Probl%C3%A8me_de_tourn%C3%A9es_de_v%C3%A9hicules https://fr.wikipedia.org/wiki/S%C3%A9paration_et_%C3%A9valuation https://fr.slideshare.net/kamarmeddah/branch-andbound-183852735 http://www.artificial-immune-systems.org/ http://www.multilingualarchive.com/ma/enwiki/fr/Artificial_immune_system http://apmonitor.com/ 180