ajout solution a*
This commit is contained in:
parent
4b74f0e5eb
commit
bd195195e7
1 changed files with 40 additions and 0 deletions
|
@ -204,6 +204,46 @@ def nullHeuristic(state, problem=None):
|
|||
def aStarSearch(problem, heuristic=nullHeuristic):
|
||||
"""Search the node that has the lowest combined cost and heuristic first."""
|
||||
"*** YOUR CODE HERE ***"
|
||||
maFileEtat = util.PriorityQueue()
|
||||
# Je fais une 2e file parce que sinon je ne peux pas comparer le cout
|
||||
# si je le met dans le meme tuple que le chemin
|
||||
maFileChemin = util.PriorityQueue()
|
||||
maListeFermee = []
|
||||
# Verifier si le depart est un but
|
||||
if problem.isGoalState(problem.getStartState()):
|
||||
return []
|
||||
# Mettre le premier noeud dans la file
|
||||
maFileEtat.push(problem.getStartState(),0)
|
||||
# Extraire le noeud courant
|
||||
listeDirections = []
|
||||
|
||||
while (not maFileEtat.isEmpty()):
|
||||
noeudCourant = maFileEtat.pop()
|
||||
#print "Noeud courant: ", noeudCourant
|
||||
# La marquer comme visite
|
||||
if noeudCourant not in maListeFermee:
|
||||
maListeFermee.append(noeudCourant)
|
||||
# Verifier si c'est un but
|
||||
if(problem.isGoalState(noeudCourant)):
|
||||
#print "Nous avons atteint le but !"
|
||||
return listeDirections
|
||||
# Effectuer la recherche de successeurs
|
||||
for s in problem.getSuccessors(noeudCourant):
|
||||
# Decomposer le tuple pour faciliter la lecture
|
||||
succNoeudCourant, succDirection, succCost = s
|
||||
# Verifier si le noeud n'est pas deja visite
|
||||
if (succNoeudCourant not in maListeFermee+[i[0] for i in maFileEtat.heap]):
|
||||
# obtenir le cout total du chemin
|
||||
succCostChemin = problem.getCostOfActions(listeDirections+[succDirection])+heuristic(succNoeudCourant,problem)
|
||||
# Si le noeud est encore dans la file, mettre a jour la priorite si elle devient inferieure
|
||||
#print "Ajout du noeud a la file: ", succNoeudCourant
|
||||
maFileEtat.push(succNoeudCourant,succCostChemin)
|
||||
# Ajouter le nouveau chemin dans la file avec son cout
|
||||
maFileChemin.push(listeDirections+[succDirection],succCostChemin)
|
||||
elif (succNoeudCourant in [i[0] for i in maFileEtat.heap]):
|
||||
maFileEtat.update(succNoeudCourant,succCostChemin)
|
||||
listeDirections = maFileChemin.pop()
|
||||
print "pas de solution"
|
||||
util.raiseNotDefined()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue