Algorithmes Gloutons.

Présentation.

Les algorithmes gloutons permettent de donner des approximations (parfois exactes d'ailleurs) à des problèmes d'optimisations, c'est à dire qu'on a à la base un problème qui admet un grand nombres de possibilités et une fonction mathématique f qui associe à chaque possibilité un nombre. On essaye de trouver la ou les possibilités qui vont donner la plus grande ou la plus petite image.

Pour développer un algorithme glouton il faut réussir :

L'algorithme glouton consiste à choisir pour chaque étape le choix qui minimise ou maximise la fonction g.

On peut voir l'algorithme glouton comme un algorithme myope, on voit le mieux à court terme sans se poser la question sur le long terme.

Des exemples de problèmes.

Le problème du voyageur de commerce.

Un voyageur doit passer une fois dans chaque ville, comment doit il choisir son trajet pour minimiser la distance ?

Algo

La fonction f est ici la longueur totale du trajet et la fonction g la distance d'une ville au dernier choix effectué.

donnée : La liste des villes : l.
chemin[0] = l[0]
Tant qu'il reste une ville non visitée :
On trouve la ville non visitée qui se trouve le plus proche de la dernière ville du chemin actuel.
On la rajoute a la fin du chemin.
Exemple

Voici le résultat obtenu en utilisant l'algorithme glouton :

On voit que l'algorithme glouton ne donne pas la meilleure réponse, cependant il a donné une possibilité pas trop mauvaise de façon très rapide.

Solution exacte avec un algo génétique "maison".

Un algo génétique avec plein de villes.

La complexité des bons algorithmes de résolution exacte est d'ordre exponentielle, ils sont très lents si le nombre de villes à visiter est un peu grand (n>15). Par contre on dispose de nombreux algorithmes qui donnent des bonnes solutions mais sans garantir d'avoir les meilleurs.

Le problème du sac à sac à dos

Le problème est simple, on dispose d'un sac et un nombre n d'objets, le sac a une masse maximale chaque objet a une masse déterminée et une valeur donnée. Quels objets faut il placer dans le sac sans dépasser la masse maximale donnée pour que la somme des valeurs soit maximale ?

Le problème semble simple mais il ne l'est pas tant que ça, et la méthode naïve (on tente toutes les possibilités) est exponentielle (Le nombre de parties d'un ensemble de n objets est de 2n). C'est moins pire que la méthode naïve du voyageur du commerce mais la complexité est largement supérieur à une complexité polynomiale. Pratiquement pour 10 sacs la réponse en force brute est presque immédiate mais à partir de 30 le temps commence à être important.

Pour trouver une possibilité, on peut utiliser un algorithme glouton. La fonction f à maximiser est la somme des valeurs des objets dans le sac, maintenant pour la fonction g on a le choix :

Malheureusement ces méthodes de type glouton ne permettent pas de garantir la meilleur réponse (mais elles peuvent la donner).

Exemple

Le problème du rendu de monnaie.

Là aussi l’énoncé est très simple : Comment doit on rendre la monnaie pour minimiser le nombre de pièces rendues.

Ici un algorithme glouton marche parfaitement (dans notre système monétaire). La fonction à minimiser est le nombre de pièces à rendre, et g représente la valeur de la pièce et on rajoute la plus grande valeur qui reste inférieure à la somme encore à rendre.

La solution est dans notre système monétaire la meilleur possible, mais avec d'autres systèmes elle ne l'est plus.

Exemple

Entrer une somme en euro, pour connaître le nombre minimum de billets/pièces de 100 € ,50€, 20€, 10€, 5€, 2 €, 1€, 0.5€, 0.2€, 0.1€, 0.05€, 0.02€ et 0.01€ qui donne cette somme. Nous vous etonnez pas des virgules, c'est lié à la représentation des décimaux dans l'ordinateur (lien)

Le problème des spectacles

Pour un spectacle, un organisateur se retrouve avec de nombreux créneaux possibles de spectacles, il doit choisir les spectacles pour en avoir le plus possible.

La aussi la méthode gloutonne marche à condition de choisir pour g la fonction qui donne la durée de fin des spectacles, et de choisir pour chaque étape le minimum de g pour les spectacles encore possibles.

Exemple

Du code.

Rendu de monnaie.

Voici par exemple une façon d'implémenter le problème du rendu de monnaie :

Algo

		

Voyageur de commerce

Voici par exemple une façon d'implémenter le problème du voyageur :

Algo

		

Exercice

Exercices
  1. Utiliser l'algorithme glouton à la main pour trouver le chemin du voyageur de commerce quand il commence de la ville A, y a t'il plusieurs choix ? Y en a t'il un meilleur qu'un autre ?
  2. Distance entre villes.
    ABCDEF
    A024365
    B202314
    C420321
    D333052
    E612502
    F541220
  3. Rendez 154.26 euros avec le moins de billets pièces.
  4. Si a la place de 1, 2 et 5 euros, on construit les pièces 1, 4 et 6 euros montrer que l'algorithme glouton ne donne pas toujours la meilleure solution (celle avec le moins de pièces).
  5. Un sac peut contenir au maximum 10 kg, on dispose des objets suivants :
    Objets.
    NomMasseSomme
    A526
    B422
    C315
    D15
    E629
    F213

    Donner le contenu du sac en utilisant l'algorithme glouton :

    • Avec les objets les plus légers en premier.
    • Avec les objets les plus chers en premier.
    • Avec le meilleur rapport valeur/masse en premier.

    A-t-on les meilleures solutions ?

  6. Problème de la station essence : Un automobiliste doit se rendre d'un point A à un point B distant de 2500 km, sa voiture peut faire 600 km avec un plein et il doit planifier son trajet pour s’arrêter régulièrement dans des stations essences sur son chemin. Il veut s’arrêter le moins de fois. Les stations essence qu'il répertorie sont distant (en km) de son point de départ de la façon suivante :
    Station A : 1560 Station B : 650 Station C : 280 Station D : 850 Station E : 1100 Station F : 1300 Station G : 400 Station H : 1800 Station J : 2200 station K : 721
    • Trouver un stratégie gloutonne à ce problème et donner la solution trouvée.
    • Donne-t-elle la meilleure solution ?
    • Coder la méthode sur python.

Q.C.M.

On donne le tableau des distance entre villes suivants :

Distance entre villes.
BiarritzBordeauxBrestDijonGrenobleLe havre
Biarritz0182830918822841
Bordeaux1820648619675659
Brest83064807931051536
Dijon9186197930279510
Grenoble82267510512790774
Le havre8416595365107740
Q.C.M.

On considére le problème du voyageur du commerce avec un départ à Bordeaux, on applique l'algorithme glouton qui consiste à choisir pour la ville suivante, la ville la plus proche. Avec cette algorithme la ville visitée en troisième est :





Q.C.M.

Le distance totale du voyageur de commerce est alors de :





On considére les objets suivants, on veut en mettre dans un sac à dos qui peut au maximum porter 14 kg.

Objets.
NomMasseSomme
A524
B423
C315
D15
E632
F211
Q.C.M.

Pour celà on utilise l'algorithme glouton en mettant à chaque fois le plus cher des objets restants, la somme maximale contenue dans le sac est alors de :





Q.C.M.

Si maintenant on met l'objet qui a le meilleur rapport argent/masse en premier alors l'algorithme glouton va placer la somme de :





Q.C.M.

Pour rendre 14.3 euros avec notre systéme monétaire il faut au minimum de pieces-billets de:





Q.C.M.

On donne la liste des spectacles suivants :

Nomdebutfin
A8h309h40
B15h1516h30
C8h459h15
D12h2513h10
E10h4511h45
F9h2011h20
G10h4012h08
H13h4514h30
I10h5011h25

Combien peut on placer de spectacles au maximum ?