Flots : exercices
- François Brucker
Deux exercices de modélisation par les flots. Ces problèmes sont classiques et sont la bases de nombreuses applications.
Problème du transport de marchandise
Un problème de transport est une variation sur les flots.
On considère que l'on a un graphe orienté
- un ensemble
de sources qui ont une marchandise en excès - un ensemble
de puits qui demandent cette marchandise
Les sommets qui ne sont ni dans
On a de plus une valuation
Le problème est alors de transporter les ressources des sommets de
Montrer que l'on peut modéliser ce problème comme un problème de flot maximum à coût minimum.
solution
solution
On ajoute au graphe :
- un sommet
et des arcs pour de coût 0 et de capacité l'excédant en - un sommet
et des arcs pour de coût 0 et de capacité la demande en
On considère que les capacités des autres arcs du graphe sont égales à
Le problème du transport de marchandise revient à trouver le flot maximum à coût minimum.
Le graphe suivant est un problème de transport :
Le coût de transport est sur les arcs et les demandes (nombres négatifs)/excès (nombres positifs) de marchandises sont en gras à côté des nœuds.
Résoudre le problème de transport du graphe précédent.
solution
solution
Le graphe exemple transformé en problème de flot est :
Les capacités sont en gras (les arcs sans capacités sont considérés comme étant de capacité infini) et les coûts sont sur les arcs (les arcs sans coûts sont considérés comme étant de coût nul).
On peut redessiner le réseau sous cette forme :
Le flot étant nul au départ, le graphe d'écart pondéré est égal à :
Un chemin de poids min entre
On a de là le graphe d'écart :
Un chemin de poids min entre
Le flot est maximum, l'algorithme de Ford et Fulkerson nous donnant une coupe min valant 3 :
Problème du transport amoureux
Des héros littéraires ont décidé de se marier. On considère pour simplifier qu'ils sont tous hétérosexuels et qu'ils ont préétablis une matrice d'affinité : un cœur dans la case signifie que la ligne et la colonne sont intéressées l'une par l'autre.
Cléopâtre | Iphigénie | Juliette | Fanny | Chimène | |
---|---|---|---|---|---|
Achille | ♥ | ♥ | |||
César | ♥ | ♥ | |||
Rodrigue | ♥ | ♥ | |||
Roméo | ♥ | ♥ | |||
Marius | ♥ | ♥ |
Pour un graphe simple
Montrez que ce problème peut s'écrire comme un problème de couplage maximum dans un graphe
solution
solution
On peut écrire le graphe suivant, en liant les affinités par une arête. Le graphe est bi-parti car les mariages sont ici hétérosexuels :
Comme on ne peut marier une personne qu'une seule fois, c'est bien un problème de couplage (l'arête choisie est le mariage).
Un graphe simple
Montrer que comme ce graphe est bi-parti, on peut modéliser le problème de couplage comme un problème de flot maximum.
solution
solution
Pour le transformer en problème de flot on peut créer le réseau suivant, avec des capacités de 1 partout :
Cela fonctionne car pour chaque chaîne augmentante, on va la saturer par un entier (donc 1) : on est assuré que le flot maximum sera entier, on ne va pas marier à moitié une personne.
Une fois le problème modélisé, résolvez le.
Il existe deux solutions où tout le monde est marié à la fin. Lesquelles ?
solution
solution
En résolvant le problème on trouve :
- Iphigénie - Achille
- Cléopâtre - César
- Juliette - Rodrigue
- Fanny - Marius
- Chimène - Roméo
Il y a aussi la solution classique où vous échangez les maris de Juliette et Chimène.
Notez que si l'on ne se restreint pas aux mariages hétérosexuels, le graphe n'est plus biparti. Le problème du couplage dans un graphe ne peut plus se résoudre comme un problème de flot, il faut utiliser l'algorithme d'Edmonds pour le résoudre.
Si l'on veut rajouter des amants (chaque personne peut avoir un conjoint et/ou un amant), le problème devient NP-difficile.
Ce problème est un exemple pratique du fait que si les capacités sont entières, le flot sera lui aussi entier.
Code
Utilisez les codes du cours pour résoudre informatiquement les deux problèmes précédents.