Development Strategy

Our development cycle is divided into the following general stages:

  • design
  • implement/debug
  • evaluate
  • document

    -= design =-

    A comprehensive design is completed before any coding begins. Several points are important to keep in mind:

  • the goals of the project will most likely change during development
  • the software will grow, and not necessarily in a linear fashion
  • interfaces for components are targeted toward practical re-use

    All of the interfaces for each component are designed completely before coding begins. Interfaces and features are prioritized so that only the least-important will be amputated if a time shortage occurs.

    -= implement/debug =-

    Implementing and debugging are considered part of the same stage because of their arbitrarily iterated and intertwined nature. Coding does not occur without debugging, and vice versa. Coding is done in a highly commented and cross-referenced manner. Testing is an integral part of debugging. The finer points of coding strategies are described in the programming discipline section.

    -= evaluate =-

    Since this is a research-oriented project, we are interested in the quality of our checkers-playing program once it has taught itself to play. We will consider ways in which certain key variables in the genetic algorithm affect the speed and accuracy of the evolution. We will compare some of our best results to some widely-available commercial checkers programs.

    -= document =-

    A well-documented software project is like a six-toed sloth -- they are very hard to find. But they are also very valuable and exciting once you find them, and sometimes they hang upside-down.

    Much of the documentation resides within the code itself. This is to facilitate future programmers who will be learning from the code or maintaining it. Less technical documentation is found on this website, in a manner accessible to anyone interested in the program as an exercise in quality coding practice or genetic algorithms applied to game-playing agents.