Quel est le moyen le plus efficace de trouver un chemin à travers un petit graphique du monde?
J'ai un mer de la pondération des nœuds avec des arêtes reliant les clusters de nœuds entre eux. Ce graphique suit le typique petit monde mise en page.
Je souhaite trouver un chemin algorithme de recherche, ce qui n'est pas coûteux, la puissance du processeur, de trouver un chemin qui longe le meilleur chemin possible où les nœuds sont les plus favorablement pondérée, l'itinéraire le plus rapide n'est pas le facteur le plus important.
Cet algorithme, qui tient également compte de charge, et la circulation de reroutage.
(note: pourrait réseaux de neurones être utilisé ici?)
Grâce
Je suis à la recherche d' ACO. Est-il rien de mieux que l'ACO pour ce genre de problème?
Droit de la * algorithme trouve la moindre du coût ou de l'itinéraire le plus rapide, sans équilibrage de charge.
Permet de dire que le plus rapide ou le plus court chemin n'est pas la route la plus importante, ce qui est plus important, c'est à la suite d'un chemin où la pondération des nœuds ont une certaine valeur. no1.
no2. Si vous utilisez Un* le trafic sur cette route est surchargé puis, soudain, ce chemin est redondante. Donc, aussi cool que A* est, il n'a pas certaines fonctionnalités que l'ACO ie inhérente à l'équilibrage de la charge.
-- à moins que im erronée et mal compris Un*
Alors que les battements de l'ACO?
Il ressemble vraiment à un spectacle en bas entre l'ACO et A* , il a été tellement positive parler d'Un* , je vais certainement regarder plus profondément en elle.
Tout d'abord en réponse à David; je peux courir ACO simulation dans le sol en arrière et trouver le meilleur chemin, donc oui il y a un coût de démarrage initial, mais le démarrage, heureusement, n'est pas essentiel. Si je peux me permettre d'exécuter une simulation à plusieurs reprises. La seule véritable difficulté est de trouver la source connectée, et les nœuds de destination. Alors qu'il semble Un* seront capables de le faire assez facilement. Maintenant ce qui se passe lorsque ce réseau obtenir terriblement grand, comme en millions de nœuds. Un* être capable d'évoluer facilement?
Je recherche Un*. Mais je vous laisse avec une dernière question!
Un* être en mesure de l'échelle ainsi que Antnet (ACO)?
David Schmitt, a déclaré: Pour de "simples" trouver meilleur chemin entre deux nœuds je prédis sans avoir la preuve que des solutions globales comme antnet ne aussi bon comme Un* avec une bonne heuristique. Ceci vient d'un retour-de-la-estimation de l'enveloppe d'Un* ne jamais avoir à toucher l'ensemble du graphique pour en arriver à la solution.
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Remarques générales
De l'algorithme de Dijkstra et optimisé variante* trouver le chemin avec "le" coût minimal par le biais de votre graphique. Les choses importantes sont: a) de la définition de votre graphique correctement et b) de la définition appropriée de la fonction de coût.
Face à une évolution de la fonction de coût Dijksta nécessite un re-calcul de la solution.
Pour l'équilibrage de charge, je voudrais étendre Dikstra non seulement de calculer le chemin optimal, mais l'utilisation de certains type d'inondation de remplissage de comportement afin de créer un ensemble de chemins possibles (triés par coût) pour trouver des solutions de rechange. Seulement des connaissances sur le problème spécifique de la fonction de coût peut répondre si et comment cela pourrait fonctionner.
Ant Colony Optimisation d'autre part semble être beaucoup plus souple pour s'adapter à l'évolution de la fonction de coût, par la poursuite de l'itération après/pendant que la fonction de coût des modifications.
L'efficacité
Cela dépend beaucoup de votre problème de domaine. Si vous avez une bonne heuristique (voir la La complexité de la section de l'article) et rarement des coûts les modifications, puis Un " * " polynôme d'exécution peut favoriser répétés des calculs. L'ACO a en revanche pour parcourir encore et encore avant de converger sur une solution approximative. Si le coût des changements se produisent très souvent, la poursuite de l'itération à un taux constant pourrait être plus efficace que la mise à jour de la Une solution, étant donné que l'information est conservée dans l'état de l'algorithme. L'ACO n'a pas de promesse la solution optimale, si et probablement a le plus de coûts de démarrage avant de converger sur une "bonne" solution. Encore que beaucoup dépend de votre domaine spécifique, graphique et la fonction de coût ainsi que vos exigences sur l'optimalité.
Comme nous l'avons précédente phéromone histoire qui serait insensé de négliger que ces chemins a fait ses preuves. Nous pouvons donc superposition de l'histoire de phéromone de données avec le nouveau cherché Une* artificielle de phéromone. Ensuite, laissez les fourmis courir avec cette information.
fyi boost.org/doc/libs/1_36_0/libs/graph/doc/astar_search.html
OriginalL'auteur David Schmitt
Avec Un*, le coût du chemin n'a pas besoin d'être constante, de sorte que vous pourriez commencer par le graphique suivant:
où nous voulons aller de A à C. d'Abord, le chemin de l'algorithme de recherche permettra de choisir l'Un-C chemin, puisque A-B-C est 2 alors que C est 1. On peut ajouter un terme supplémentaire pour les chemins d'accès:
avec
où
Que les utilisateurs sont ajoutés au système, la route A-C deviendra de plus en plus cher de A-B-C à vingt utilisateurs (1 + 20/10) = 3, A-B-C-est-2. Comme les utilisateurs sont supprimés à partir du système, les A-C route va devenir la meilleure option.
La puissance réelle de l'A* est l'heuristique que vous utilisez pour calculer le coût de chaque connexion.
OriginalL'auteur Skizz
Les plus couramment utilisés algorithme pour résoudre ce problème est * (Une Étoile), qui est généralisée L'algorithme de Dijkstra de recherche avec l'ajout des heuristiques le but de l'heuristique est de diriger la recherche vers la recherche de l'objectif typique de recherches en finir plus vite.
Cet algorithme a de nombreuses variantes, dérivé versions et améliorations, de recherche de Google ou la page Wikipédia devrait être un bon point de départ.
OriginalL'auteur Suma
Certainement Un*. Un* permettra de trouver le meilleur chemin possible ou pas de chemin du tout si aucun chemin d'accès n'existe. E. g. le chemin d'accès de ce bateau a été calculée à l'aide d'Un*
Un* Exemple sur la Carte du Jeu http://www.cokeandcode.com/images/path1.png
Voici un Java interactif de Démo à jouer avec. Veuillez noter que cet algorithme est ralentie par dort, si vous voyez la scène. Sans ce ralentissement, il allait trouver le chemin d'accès en moins d'une seconde.
L'algorithme est simple, mais puissant. Chaque nœud dispose de 3 valeurs, g est le coût de ce nœud. h est le coût estimé de ce nœud à la cible et f est la somme des deux (c'est une supposition pour le chemin d'accès complet). * Gère deux listes, l'Ouvert et le Fermé liste. La liste contient tous les nœuds qui n'ont pas été explorées jusqu'à présent. La liste Fermée de tous les nœuds ont été explorées. Un nœud compte que l'objet de l'algorithme a déjà testé chaque nœud connecté à ce nœud (connecté ne pouvait signifier horizontalement et verticalement, mais aussi en diagonale si les déplacements en diagonale entre les nœuds sont autorisés).
L'algorithme peut être décrit comme
Également jeter un oeil à Wikipedia pour les détails de mise en œuvre.
OriginalL'auteur Mecki
J'ai entendu parler d'un NN mise en œuvre pour gérer ce genre de problème. Donc, si vous voulez utiliser NNs finalement, vous trouverez votre chemin 😉 mais ils doivent être inférieurs par rapport à "algorithmes génétiques".
Si le calcul de l'/le temps de la consommation est un problème, je vous suggère fortement d'utiliser les algorithmes génétiques. C'est exactement le type de problèmes qu'ils sont exceptionnels.
Gaz sont basées sur une fonction qui décrit votre satisfaction pour toute solution. Vous pouvez modifier cette fonction pour répondre à vos besoins (ie. vous pouvez inclure non seulement le coût de chemin, mais n'importe quel facteur vous le souhaitez).
OriginalL'auteur
Serait un commun Dijkstra n'est pas suffisant?
http://improve.dk/generic-dijkstras-algorithm/
Correction du lien.
OriginalL'auteur Mark S. Rasmussen
Dijkstras algorithme, petit exemple pour vous
OriginalL'auteur