trois premiers problemes fonctionnent

This commit is contained in:
François Pelletier 2019-02-03 21:35:39 -05:00
parent 234e96b463
commit 4b74f0e5eb

View file

@ -130,12 +130,12 @@ def breadthFirstSearch(problem):
while (not maFile.isEmpty()):
# Extraire le noeud courant
noeudCourant, listeDirections = maFile.pop()
print "Noeud courant: ", noeudCourant
#print "Noeud courant: ", noeudCourant
# La marquer comme visite
maListeFermee.append(noeudCourant)
# Verifier si c'est un but
if(problem.isGoalState(noeudCourant)):
print "Nous avons atteint le but !"
#print "Nous avons atteint le but !"
return listeDirections
# Effectuer la recherche de successeurs
for s in problem.getSuccessors(noeudCourant):
@ -144,7 +144,7 @@ def breadthFirstSearch(problem):
# Verifier si le noeud n'est pas deja visite et n'est pas dans la file
if (succNoeudCourant not in maListeFermee+[i[0] for i in maFile.list]):
# Dans ce cas, ajouter le noeud et le chemin pour s'y rendre a la file
print "Ajout du noeud a la file: ", succNoeudCourant
#print "Ajout du noeud a la file: ", succNoeudCourant
maFile.push((succNoeudCourant,listeDirections+[succDirection]))
print "pas de solution"
util.raiseNotDefined()
@ -152,6 +152,46 @@ def breadthFirstSearch(problem):
def uniformCostSearch(problem):
"""Search the node of least total cost 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])
# 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()
def nullHeuristic(state, problem=None):