ajout solution a*

This commit is contained in:
François Pelletier 2019-02-03 22:01:12 -05:00
parent 4b74f0e5eb
commit bd195195e7

View file

@ -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()