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]