Comment calculer un minimum

On pourrait jouer à kikalapugrosse et pourtant on va jouer à kikalapupetite.


Si vous devez calculer le minimum de deux entiers a et b vous allez écrire quelque chose comme ceci :

if a < b then return a else return b

Cependant la nature étant infinie dans sa diversité, parfois le minimum à calculer n'est pas un entier mais un machin-chose plus compliqué, par exemple un chemin. Alors vous allez écrire quelque chose comme ceci :

if less_than(path1,path2) then return path1 else return path2

Le truc étant que less_than va renvoyer vrai si path1 est plus court que path2 et faux autrement.
Mais plus court. Comment ? En nombre de tours de jeu ? Ou bien en distance kilométrique ?
En nombre de tours de jeu, car il ne serait pas acceptable que le joueur gaspille un tour.
Cependant, à nombre de tours égal, vos soldats déserteront moins s'ils marchent sur moins de distance.
Alors vous allez simplement écrire quelque chose comme ceci :

define less_than(path1,path2) =
  if turns(path1) < turns(path2) then return true
  else if turns(path1) > turns(path2) then return false
  else return length(path1) < length(path2)
Laissez un commentaire

3 Commentaires

  • J'ai compris cet article cryptique, mais je crains que personne d'autre que moi ne soit en mesure de le faire, quelle était l'intention de cet article ? Faire une grosse apparté en public parce que c'est plus drôle ? perplexe

  • En tant que rédacteur sur DVP.com je me dois de répondre (bénévolement) à une multitudes de requêtes. La personne qui pose la question croit affronter une situation inédite. Typiquement elle veut faire de l'optimisation multicritère. Et elle se plaint que l'algorithme associé au problème n'optimise qu'un seul critère. Alors elle demande/réclame un algorithme "adapté" à son cas. Ou pire encore : la personne a elle-même "customisé" l'algorithme pour prendre en compte les différentes dimensions de sa problématique. Et elle demande un retour d'expérience : les résultats ne sont pas catastrophiques, ils sont presque bons, comment les améliorer ? Comment concilier le meilleur des deux mondes ? Mais pourquoi donc tous ces théoriciens n'ont-ils qu'une vision mono-dimensionnelle et nous laissent nous débattre avec des algorithmes inadaptés à la vie réelle ? On doit pouvoir faire mieux que les théoriciens. En recalibrant l'algorithme, avec une meilleure fonction d'évaluation. En cas d'échec (car il y a toujours un cas où ça ne fonctionne pas) on aura recours à un algorithme génétique qui va calculer les meilleurs coefficients possibles.

    Heureusement, rien de tout cela ne fonctionne de façon satisfaisante.

    Parce que la réalité est beaucoup plus simple. Le problème que vous croyez inédit, spécifique à votre programme, a déjà été résolu depuis bien longtemps, probablement avant votre naissance.

    Vous êtes un expert en théorie des graphes ? En optimisation combinatoire ? En géométrie algorithmique ? Non ? Alors votre problème à vous n'est pas compliqué, il est simple. Par contre il peut vous paraître compliqué parce que vous avez un don inné pour compliquer les choses.

    C'est pourquoi cet article est dédié à tous ceux qui font la sourde oreille sur les forums d'entraide à la programmation :

    Par pitié, pour nous les rédacteurs, renoncez à votre don de compliquer les choses.

  • Et bien je suis content d'avoir demandé, l'explication prend plus de place que le billet original lui-même ouf

    Sinon c'est exactement pour cette raison que je n'ai jamais rejoint de forum de développeur, soit le niveau est super bas et ça me lasserait de répondre aux mêmes questions, soit il serait assez haut et je n'aurais rien à dire, soit il serait trop haut et je ne comprendrais rien.

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !