Je suis un peu confus avec l'algorithme Hill Climbing ..__ Je veux "exécuter" l'algorithme jusqu'à ce que j'ai trouvé la première solution dans cet arbre ("a" est initial et h et k sont des états finaux) et il dit que les nombres près des états sont les valeurs heuristiques. Voici l'arbre:
Ma question : J'essaie de courir une colline sur un arbre, alors ok nous commençons a-> f-> g et puis quoi? fini (sans résultat), mais j'ai lu que la colline ne peut pas revenir en arrière et faire un nouveau choix ( exemple j ou e)? Est-ce vrai? Si je peux revenir alors comment? je veux dire où nous changeons notre exemple de choix initial, nous choisissons e au lieu de g ou j au lieu de f
Désolé si ma question est trop simple.
Un moyen courant d'éviter de rester bloqué dans les maxima locaux avec Hill Climbing consiste à utiliser des redémarrages aléatoires. Dans votre exemple, si G est un maximum local, l’algorithme s’arrêterait là, puis choisirait un autre nœud aléatoire à partir duquel redémarrer. Donc, si J ou C ont été choisis (ou éventuellement A, B ou D), vous trouverez les maxima globaux dans H ou K. Rincez et répétez-le suffisamment de fois et vous retrouverez les maxima globaux ou quelque chose de proche; en fonction des contraintes de temps/ressources et de l'espace du problème.
Notez que la recherche locale telle que l’ascension d’une colline est incomplète et ne peut garantir la recherche des maxima mondiaux. L’avantage, bien sûr, est que cela nécessite une fraction des ressources. En pratique et appliqué aux bons problèmes, c'est une solution très efficace.
Vous pouvez essayer d'utiliser une technique appelée recuit simulé pour empêcher votre recherche de rester bloquée sur les minimums locaux. Dans le recuit simulé, il existe essentiellement un paramètre T
qui contrôle votre probabilité de passer à des états de voisinage sous-optimaux. Si T
est élevé, vous êtes plus susceptible de faire un déplacement sous-optimal dans un État voisin et vous risquez ainsi d'échapper à un minimum local en cas de blocage, ce que vous ne pourriez pas faire si vous utilisez une ascension normale.
L’escalade n’a aucune garantie contre le fait de rester coincé dans un minima/maxima local . Cependant, seule la forme la plus pure d’escalade ne vous permet pas de revenir en arrière.
Un riff simple en montagne qui évite le problème des minima locaux (au prix de plus de temps et de mémoire) est une recherche taboue, dans laquelle vous vous souvenez des mauvais résultats précédents et les évitez délibérément.
En fait, dans Hill Climbing, vous ne revenez généralement pas en arrière, car vous ne gardez pas trace de l'état (c'est de la recherche locale) et vous vous écartez d'un maximum. Ni l'aide en arrière ni l'aide de Tabu Search ne répondent à la question: le premier vous éloigne simplement d'un maxima local et le second vous empêche de revenir sur les mêmes maxima locaux. Ni l'un ni l'autre ne vous aideraient à atteindre un maximum global. - Tyson 16 oct. 12 à 22:59
"où vous vous souvenez des mauvais résultats précédents et les évitez délibérément" Je ne peux pas accepter, vous marquez comme tabou aussi de bonnes solutions, mais vous ne voulez plus suivre le même chemin -
l’un des problèmes de l’escalade est le blocage des minima locaux. C’est ce qui se produit lorsque vous atteignez F. Une version améliorée de l’escalade (qui est utilisée pratiquement) consiste à redémarrer tout le processus en sélectionnant un nœud Rechercher dans l’arborescence et continuer à chercher une solution optimale. Si, encore une fois, vous êtes bloqué à certains minima locaux, vous devez redémarrer avec un autre nœud aléatoire. Généralement, il y a une limite au no. de temps, vous pouvez refaire ce processus de trouver la solution optimale. Après avoir atteint cette limite, vous sélectionnez le moins parmi tous les minimas locaux que vous avez atteints au cours du processus. Bien que ce ne soit pas encore complet, celui-ci a de meilleures chances de trouver la solution optimale globale.
Voici la solution:
A -> F, avec le coût le plus bas possible F -> G avec le coût 3 mais il n’ya pas de chemin.
Redémarrez à partir du coût le plus bas possible autre que G, eh bien, c’est E car E a déjà été inséré dans la file d’attente/pile/file d’attente prioritaire ou toute autre structure de données que vous utilisez.
Donc E -> I mais I a un coût plus élevé que E donc vous êtes bloqué: S
Redémarrer à partir du coût le plus bas autre que F E & G, nous choisissons donc J car J a un coût inférieur à B avec une différence de 2, c.-à-d. J = 8 B = 10
J-> K avec un coût 0 donc K est l'objectif
REMARQUE: La variante proposée pour l'ascension d'une colline consiste à choisir un point au hasard, mais choisir le moins coûteux autre que les nœuds déjà visités est préférable à la sélection au hasard.
Une autre remarque: c’est que lorsque le nœud E n’a pas visité I parce que sa valeur est supérieure à E, l’algorithme l’a déjà inséré dans la structure de données. Ainsi, le coût le plus bas, autre que celui déjà visité, créerait un nouveau chemin à partir de I car I n’a jamais été visité et a donc une valeur inférieure à J, c’est le seul chemin que j’ai sauté.