Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

A group of researchers are being chased by zombies through a dark forest late at night. They come to a rope bridge over a ravine.

A group of researchers are being chased by zombies through a dark forest late at night. They come to a rope bridge over a ravine. If they can all get over the bridge before the zombies arrive, they will survive. At most two people can cross at a time. The group has only a single flashlight among them, so one person must bring the flashlight back across the bridge to the starting side before anyone else can cross.

Each person moves at a different pace:

The Undergrad can cross the bridge in 1 minute

The Grad Student can cross the bridge in 2 minutes

The Postdoc can cross the bridge in 5 minutes

The Professor can cross the bridge in 10 minutes

MODIFY THE FOLLOWING CODE SO IT FINDS THE BEST SOLUTION USING GRAPH REPRESENTATION AND A HEURISTIC. MAKE SURE IT RUNS WITH NO ERRORS.

"""

Solution stub for the Zombie Problem.

Fill in the implementation of the `Zombie_problem` class to match the

representation and heuristic that you specified in questions (2a) and (2c).

We will test your solution by calling ``python3 zombie.py`` from the shell

prompt. DO NOT EDIT the main() function. You may add additional tests to the

`unit_tests` function if you desire.

"""

from heapq import heappush, heappop

class Zombie_problem(object):

def __init__(self):

pass

def start_node(self):

"""returns start node"""

#TODO

return (None,)

def is_goal(self, node):

"""is True if `node` is a goal"""

#TODO

return False

def neighbors(self, node):

"""returns a list of the arcs for the neighbors of `node`"""

#TODO

return []

def arc_cost(self, arc):

"""Returns the cost of `arc`"""

#TODO

return 0

def cost(self, path):

"""Returns the cost of `path`"""

return sum( self.arc_cost(arc) for arc in path )

def heuristic(self, node):

"""Returns the heuristic value of `node`"""

#TODO

return 0

def search():

"""Return a solution path"""

#TODO

return None

class Frontier(object):

"""

Convenience wrapper for a priority queue usable as a frontier

implementation.

"""

def __init__(self):

self.heap = []

def add(self, path, priority):

"""Add `path` to the frontier with `priority`"""

# Push a ``(priority, item)`` tuple onto the heap so that `heappush`

# and `heappop` will order them properly

heappush(self.heap, (priority, path))

def remove(self):

"""Remove and return the smallest-priority path from the frontier"""

priority,path = heappop(self.heap)

return path

def is_empty(self):

return len(self.heap) == 0

def unit_tests():

"""

Some trivial tests to check that the implementation even runs.

Feel free to add additional tests.

"""

print("testing...")

p = Zombie_problem()

assert p.start_node() is not None

assert not p.is_goal(p.start_node())

assert p.heuristic(p.start_node()) >= 0

ns = p.neighbors(p.start_node())

assert len(ns) > 0

soln = p.search()

assert p.cost(soln) > 0

print("tests ok")

def main():

unit_tests()

p = Zombie_problem()

soln = p.search()

if soln:

print("Solution found (cost=%s) %s" % (p.cost(soln), soln))

else:

raise RuntimeError("Empty solution")

if __name__ == '__main__':

main()

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Programming With Visual Basic .NET

Authors: Carsten Thomsen

2nd Edition

1590590325, 978-1590590324

More Books

Students also viewed these Databases questions