trois premiers problemes fonctionnent
This commit is contained in:
parent
234e96b463
commit
4b74f0e5eb
1 changed files with 43 additions and 3 deletions
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue