algo glouton - Algo - Programmation
Marsh Posté le 28-07-2003 à 18:51:50
Va voir du côté du voyageur de commerce. Tu dois pouvir résoudre ça en utilisant le backtracking il me semble
Marsh Posté le 28-07-2003 à 18:56:39
Oh non c'est pas si simple. Il y a surement plusieurs routes possibles pour aller de A vers B
Sinon, pas besoin d'un algo pour faire ça.
Les distances sont sous quelles formes ? une matrice ?
EDIT : Merci à SirJeannot d'avoir effacé son message. Comme ça plus personne comprend le topic
Marsh Posté le 28-07-2003 à 18:57:59
Si ça peut t'aider, un algo que j'ai fait il y a quelques temps. C'est avec une matrive de distances
Code :
|
Marsh Posté le 28-07-2003 à 19:39:16
JagStang a écrit : Oh non c'est pas si simple. Il y a surement plusieurs routes possibles pour aller de A vers B |
en effet c une matrice...
Code :
|
voici mon algo:
Code :
|
mais je suis pas certain que c du glouton..
Marsh Posté le 28-07-2003 à 23:42:34
J'utilise l'algo Glouton dans Ignition ( http://www.katarncorp.com/?ignition ) mais mon prof d'IA m'a conseillé de regarder CA : http://www.nada.kth.se/~viggo/wwwc [...] de160.html qui à l'air plus intéressant.
Marsh Posté le 29-07-2003 à 00:31:08
>> nabrouska
Donne moi ton mail en privé
J'ai un projet que j'ai fait qui utilise 3 méthodes
Recherche heuristique par la methode : ville la plus proche
Recherche heuristique par la methode : meilleure insertion
Recherche backtracking (tres long.........)
Marsh Posté le 29-07-2003 à 09:42:48
contenu de mon message effacé qui était le 3e et qui était une bétise
"ben tu vois si ta titine est capable d'aller à la station suivante étant à une station"
mais bon, je n'avais pas vu le pb du backtracking
enfin ajouter du backtrackingà ce genre de raisonnement n'est pas très difficile non plus
Marsh Posté le 30-07-2003 à 23:14:43
Euh... Juste un truc... Je vous vois tous partir dans un délire de graph... Seulement, si on lit l'énoncé, il y a une chose capitale que vous n'avez visiblement pas remarqué :
Au cours du voyage vous rencontrerez k postes d?essences où vous pourriez faire le plein.
Les postes d'essence sont donc pas disséminés géographiquement n'importe comment, ils sont ordonnés sur un trajet déjà calculé. Il s'agit dinc ni plus ni moins d'un tableau à une seule dimension... Pas besoin de partir dans des algos genre le voyageur de commerce... L'algo de nabrouska résoud parfaitement le problème en toute simplicité (il est améliorable niveau perfs - puisque les postes sont répartis à distance constante sur le parcours, on peut calculer le nombre de postes qu'on peut sauter avant d'atteindre D, histoire de ne pas les passer chacun en revue, mais sauter x postes à chaque fois -, mais pas au niveau algo... Enfin... Faut le corriger, parcequ'il est complètement faux, mais l'approche logique est la bonne)
Par contre, c'est trop simple, je doute que ce soit ça un algo glouton... C quoi au juste ce truc ?
Marsh Posté le 30-07-2003 à 23:26:29
Perso, je ferais : (pseudo code VB)
saut = int(D / di)
numPoste = 0
nbArret = 0
// On vérifie que D < d1 + d[1..k] + dVancouver, çe serait con de s'arrêter pour rien
if D < d1 + 10 * di + dVancouver
// Premier tronçon : on prends en compte d1, la distance initiale
numPoste = int((D - d1) / di)
dist = d1 + numPoste * di
// Ensuite : saut de poste en poste
do while dist < (d1 + 10 * di + dVancouver) - D
numPoste = numPoste + saut
dist = dist + di * saut
nbArret = nbArret + 1
loop
End if
// Maintenant, nbArret contient le nombre d'arrêts, on peut sauvegarder les numPoste si on veut la liste des postes où on s'est arrêté.
PS: attention, dans mon cas, les postes sont nommés de 0 à k - 1
Mais bon, de toute façon, ça doit pas être un glouton
Par contre, je doute qu'on puisse faire plus optimisé... Doit y avoir quand même moyen de se passer du while, mais je vois pas trop comment... mais certainement tout à fait faisable... C'est la seule optimisation possible.
Marsh Posté le 30-07-2003 à 23:40:43
Tout compte fait, si on veut conserver la liste des postes d'arrêt, il faut inévitablement une boucle
Mais pour connaître le nombre d'arrêt, ça se fait les doigts dans le nez avec un seul if en fait, plus celui qui vérifie que D < la distance totale
Nombre d'arrêts : (je vous défie de trouver plus concis )
Code :
|
C trop facile comme problème Tout compte fait, il fallait tout de même 3 if
Pour rajouter les numéros des postes où on s'arrête, c'est pas très compliqué, il faut rajouter le pemier arrêt et le dernier (s'il existe) et faire un petit for pour ceux du parcours poste à poste.
M'enfin c'est tout faut, chais pas ce qu'est un algo glouton et tout le monde pionce
Marsh Posté le 31-07-2003 à 02:10:11
Je t'ai envoyé mon prog.
Pour ceux que ça intéresse, message privé svp pour me donner le mail
Marsh Posté le 31-07-2003 à 14:39:19
Code :
|
Marsh Posté le 31-07-2003 à 15:49:55
JagStang a écrit : Je t'ai envoyé mon prog. |
Je vois toujours pas le rapport entre ton prog et l'énnoncé...
Marsh Posté le 31-07-2003 à 17:51:03
Marsh Posté le 28-07-2003 à 18:08:37
salut j'ai un algo a faire dont voici l'énoncé:
Vous désirez vous rendre en automobile de Montréal à Vancouver. Le réservoir de votre voiture vous permet de parcourir une distance D lorsqu?il est plein. Au cours du voyage vous rencontrerez k postes d?essences où vous pourriez faire le plein.
Soient :
? di la distance pour aller du poste i?1 au poste i,
? d1 la distance de Montréal au poste 1, et
? dVancouver la distance du poste k à Vancouver (on suppose di <= D et dVancouver <= D). (Donc il n?est pas possible de manquer d?essence)
? C = { c1, c2, ..., ck} l?ensemble des postes d?essence.
On désire faire le moins d?arrêts possibles.
1. Écrire un algorithme glouton qui détermine les postes où on devrait arrêter.
2. Si votre voiture a une autonomie de 600 km (D = 600km)
Soit 10 postes d?essences C1 à C10.
En appliquant l?algorithme que vous avez écrit, pour voyager du point A au point B, indiquer les postes d?essences où vous arrêterez. (Nombre de poste d?essence
minimal).
je sais pas trop par où commencé... alors si vous avez une idée