Apprentissage interactif de la théorie des graphes
Apprentissage interactif de la théorie des graphes
Guest User
Using app without sign in
Solveur de localisation d'installations
Trouve le hub central optimal minimisant la distance moyenne
Sélectionnez un algorithme et générez les étapes pour commencer la visualisation
Le problème de localisation d'installations choisit où ouvrir des installations, comme des entrepôts ou des cliniques, pour desservir un ensemble de points de demande à coût total minimal, en équilibrant les coûts d'ouverture et les distances de service aux clients. La plupart des variantes, dont k-médiane et k-centre, sont NP-difficiles.
Les solveurs pratiques combinent plusieurs idées. Les algorithmes gloutons ouvrent l'installation au meilleur rapport coût par demande couverte et atteignent des garanties d'approximation prouvables. La recherche locale échange installations ouvertes et fermées tant qu'une amélioration est possible. Les solutions exactes pour des tailles modérées utilisent la programmation linéaire en nombres entiers mixtes, et les grandes instances utilisent la relaxation lagrangienne ou des heuristiques par clustering comme k-means pour amorcer les sites candidats.
La localisation d'installations décide l'emplacement des entrepôts et centres de distribution dans les chaînes logistiques, la couverture des antennes-relais et des bornes de recharge, l'implantation des hôpitaux et casernes de pompiers pour l'intervention d'urgence et le placement des serveurs de diffusion de contenu. C'est un problème phare de la recherche opérationnelle et de l'analytique logistique.
Le problème arbitre entre deux coûts qui tirent en sens inverse: ouvrir des sites coûte de l'argent, mais chaque site ouvert raccourcit le trajet vers les clients. La formulation exacte est un programme en nombres entiers; en pratique on emploie une heuristique gloutonne avec amélioration locale.
// Exact (petit): tester chaque sous-ensemble de sites
meilleur = infini
pour chaque sous-ensemble non vide S des sites candidats:
cout = somme des coutOuverture[f] pour f dans S
pour chaque client c:
cout += min sur f dans S de coutService[f][c]
meilleur = min(meilleur, cout)
// Glouton (grand): ouvrir le site qui economise le plus
S = {}
repeter:
f* = le site ferme qui reduit le plus le cout total
si ouvrir f* ne reduit pas le cout: arreter
S = S + {f*}
// Ensuite: recherche locale par echange, ouverture et fermetureL'essentiel est que les clients sont toujours affectés au site ouvert le moins cher pour eux, le seul véritable degré de liberté est donc le choix du sous-ensemble à ouvrir. Cela transforme un problème d'apparence continue en un problème combinatoire sur les sous-ensembles, et c'est aussi ce qui le rend NP-difficile: il existe 2 puissance n sous-ensembles et aucun moyen connu de les parcourir en temps polynomial.
Décide quels sites ouvrir avec trois candidats et quatre clients, en comparant tous les sous-ensembles.
Graphe d'exemple: Coûts d'ouverture: F1 vaut 10, F2 vaut 8, F3 vaut 6. Coûts de service par client: F1 dessert C1 et C2 pour 2 et 3 mais C3 et C4 pour 9 chacun; F2 dessert C3 et C4 pour 2 et 3 mais C1 et C2 pour 8 et 7; F3 dessert les quatre pour 5 chacun.
L'optimum consiste à n'ouvrir que F3, pour un coût total de 26. Cela mérite qu'on s'y arrête: F3 n'est le site préféré d'aucun client, et pourtant le sous-ensemble optimal est exactement celui-là. Une heuristique affectant chaque client à son site de service le moins cher ouvrirait F1 et F2 et aboutirait à 28. Seul l'arbitrage entre coût d'ouverture et coût de service compte, et raisonner client par client ne le capture pas.
Temps: NP-difficile; exact O(2^n · n · m) · Espace: O(n · m)
Avec n sites candidats et m clients, l'énumération exacte teste les 2 puissance n sous-ensembles non vides et, pour chacun, affecte les m clients à leur site ouvert le moins cher en O(n) par client, soit O(2 puissance n fois n fois m). Ce n'est praticable que jusqu'à 20 ou 25 sites environ. Le problème est NP-difficile, aucun algorithme exact polynomial n'est donc attendu. La bonne nouvelle est que la variante sans capacité est approximable: il existe des algorithmes à facteur constant autour de 1,5 fondés sur l'arrondi de programmation linéaire et sur la recherche locale, ce qui contraste avec la coloration de graphes où aucune approximation correcte n'est connue. Le glouton qui ouvre à chaque étape le site procurant la plus grande économie offre une garantie logarithmique et se comporte bien en pratique.
La variante pertinente dépend de l'existence de limites de capacité et du nombre de clients.
| Alternative | À préférer quand | Coût |
|---|---|---|
| Énumération exacte ou programmation en nombres entiers | Moins de 25 sites candidats environ et tu veux l'optimum démontrable. | O(2^n · n · m) |
| Glouton plus recherche locale | Grandes instances. Ouvrir par économie maximale puis échanger, ouvrir et fermer des sites. | O(n^2 · m) par passe |
| Localisation avec capacités | Chaque site a une limite de demande servable. Nettement plus difficile. | NP-difficile |
| K-moyennes | Il n'y a pas de coût d'ouverture et tu veux seulement regrouper les clients en k zones géographiques. | O(n · k · i · d) |
| K-médianes | Tu veux ouvrir exactement k sites sans coût d'ouverture, en minimisant la distance totale. | NP-difficile |
Lire l'article complet: Operations Research and Graph Theory
Algorithmes associés: Clustering Logistique K-Means, Répartition de Flotte (mTSP), Routage de Véhicules avec Capacité (CVRP)