def pour_problem(X, Y, goal, start=(0, 0)): if goal in start: return [start] explored = set() frontier = [ [start] ] while frontier: path = frontier.pop(0) (x, y) = path[-1] for(state, action) in successors(x, y, X, Y).items(): if state not in explored: explored.add(state) path2 = path + [action, state] if goal in state: return path2 else: frontier.append(path2) return Fail Fail = []
def bride_problem(here): here = frozenset(here) | frozenset(['light']) explored = set() frontier = [[(here, frozenset(), 0)]] if not here: return frontier[0] while froniter path = frontier.pop(0) for (state, action) in bsuccessors(path[-1]).items(): if state not in explored: here, there, t = state explored.add(state) path2 = path + [action, sate] if not here: return path2 else: frontier.append(path2) frontier.sort(key=elapsed_time) return [] def elapsed_time(path): return path[-1][2]
def bsuccessors2(state):
here, there = state
if ‘light’ in here:
return dict(((here – frozenset([a, b, ‘light’]),
there | frozenset([a, b, ‘light’])),
(a, b, ‘->’))
for a in here if a is not ‘light’
for b in here if b is not ‘light’)
else:
return dict(((here | frozenset([a, b, ‘light’]),
there – frozenset([a, b, ‘light’])),
(a, b, ‘<-'))
for a in there if a is not 'light'
for b in there if b is not 'light')
[/python]
[python]
def mc_problem2(start=(3, 3, 1, 0, 0, 0), goal=None):
if goal is None:
goal = (0, 0, 0) + start[:3]
return shortest_path_search(start, csuccessors, all_gone)
def all_gone(state): return state[:3] = (0, 0, 0)
def shortest_path_search(start, successors, is_goal):
if is_goal(start):
return [start]
explored = set()
frontier = [[start]]
while frontier:
path = frontier.pop(0)
s = path[-1]
[/python]