Project 1: Search Agent

Updates


For this first project, you will implement an agent that solves problems in the MÆDEN environment. Do not wait until the last minute to start on the project; you will suffer in many ways if you do. This is an individual project. As always, I encourage you to talk to your peers about ideas or to me and to ask questions. But the code you submit must be your own code.

Requirements

Write an agent that solves problems in the MÆDEN environment. Problems will involve only wall obstacles and will be guaranteed to have solutions. These sub-tasks are intended to provide a reasonable development path of increasing complexity and capability.

  1. Stimulus-Response agent. Create a primitive agent that merely follows its nose toward the food. This agent should be able to solve any world without obstacles.
  2. Search within the visual field. Having completed the S-R agent, add the ability to search for paths within the visual field. That is, suppose your agent has been following its nose and encounters a wall blocking its progress. If there is a viable path through the visual field to a spot beyond the obstacle, your search method should find the optimal such path. Your method should search for a path from the agent's current location to any given location in the visual field. While the search mechanism should work for an arbitrary location, you must employ some means to establish an actual goal. Once the path is found, your agent should follow the path to the specified target, at which point it should continue following its nose to the food. Whenever its progress is blocked, it should attempt this search through the visual field. This version of your agent is not expect to solve every conceivable problem although a solution will always exist.
  3. Searching through mental maps. As your agent moves about (following its nose for example), it encounters more and more of the world. Sometimes, an agent must rely on a memory of where it has been previously in order to solve more challenging problems. For example, perhaps the agent cannot get around an obstacle using search through the visual field. Augment your agent with the ability to construct mental maps of all the places it has observed. Once the agent is constructing maps of the explored portion of the environment, either generalize your search method from above or provide an additional search method so as to search for paths to an arbitrary location in the mental map. Having found such a path, your agent should follow it and then continue with what it was doing (e.g., following its nose).
  4. Putting everything together. The intended idea is that your agent uses a lower-cognitive function (following its nose) until it encounters an obstacle. At that point, it tries to find a path through the visual field; if that fails, it resorts to search through the mental map constructed so far. Finally (if searching through the mental map will not traverse unknown territory), the agent should move in an exploratory mode in the hopes that an expanded mental map will yield progress.

Your code should be documented thoroughly. Do not neglect to include an acknowledgments header within your submission. You may use a language of your choice. However, I must be able to run your system without an IDE or installing any specialized libraries. FYI, I have Racket, Common Lisp, Ruby, Python, Java, and C++ on my machine. If you want to use something else, talk to me before investing effort on the above tasks. If you need assistance connecting to MÆDEN via the socket layer, ask me for help.

Submission instructions:

Create a folder named with your name or Westmont email user-name (no spaces) followed by "P1A". For example, someone named Eva Bailey might create a folder called "evabaileyP1A" or "ebaileyP1A". Make sure that inside that folder you have the following: documented source file(s) for your agent; a README file that includes your acknowledgments and instructions for running your agent. Finally, either tar or zip the folder so that when we extract it, the folder "<yourname>P1A" will be created. Do not use any other archiving tool. Submit the archive for project 1 on Eureka.