CSCI 470
HOMEWORK ASSIGNMENT #3
Assigned Date: Wednesday, October 13, 2004
Item 1 Due: Friday, October 22, 2004 (via email)
Everything Due: Friday, October 29, 2004 (via floppy)
Due Time: 3pm

In-Class Presentations: Monday, November 1, 2004

 

Updated: Friday, October 15, 2004.

 

Purpose:

This assignment focuses on state space search (problem formulation and algorithm selection).  Additionally, it will get you comfortable with WWW access and navigation through Python.

 

Documentation:

See previous assignment.

 

Assignment: 

Write a Python program that will take as command line arguments two existing URLs and will output a path of URLs from one to the other.  Make this program as robust as possible (adapted from [1]).

  1. In file LinkFinderDesign.txt discuss the following issues:
    1. Describe the search space for this problem and possible issues.  What should be contained in a search space node?
    2. Given the uninformed search algorithms we have studied (breadth-first, depth-first, uniform-cost, depth-limited, iterative deepening, data-driven search, goal-driven search, bidirectional deepening), explain the advantages and disadvantages of each as a potential algorithm for solving this problem. 
    3. Could a search engine be used to implement a predecessor function?
    4. Pick the best algorithm for your implementation and justify your selection (if not clear from (b)).
  2. In file LinkFinder.py implement your solution to the problem.  Try to separate the search algorithm from the actual problem as much as possible through abstraction (Hint:  Define classes Problem, Node, Fringe with appropriate functions, such as Problem.isGoal(Node), Problem.initialNode(), Problem.successors(Node), Problem.predecessors(Node), Fringe.first(), Fringe.rest(), Fringe.insert(), Fringe.isMember(Node)).
  3. In file Readme.txt describe the contents of your submitted files, explain how to run your program, and include special notes (e.g., limitations).

 

Notes:

  1. For examples on how to collect links from a webpage see linklister1.py and linklister2.py. Both make use of Python library urllib
  2. Assignment grade will be based on documentation, design, “correctness” of result, and presentation.  This assignment includes a presentation grade.
  3. Follow the naming specs carefully.
  4. You may use only up to one late day for the design part of the assignment.  No late days may be used for the presentation.

 

Submission: 

You should submit your source file on a floppy disk, as per syllabus instructions. 

Source filenames to be submitted:  A directory named <firstName_lastName_fourLastDigitsofSSN>_hmwk3 (for example, Bill_Manaris_2308_hmwk1).  This directory should contain the following files:

·        LinkFinderDesign.txt

·        LinkFinder.py

·        Readme.txt

 

Reference: 

  1. Russell, S. and Norvig, P. (2003) “Artificial Intelligence: A Modern Approach”, 2nd ed, Prentice Hall (problem 3.14, p. 91).