SoFi Solution Finder
SoFi is an extensible Java framework that can be used to create, test and
experiment with common search algorithms described in Artificial Intelligence
textbooks. It allows one to 1). define new or extend existing search algorithms,
2). define problem space representations, and 3). write client applications
to trace execution of the searches.
The Framework
The base package (sofi) consists of interfaces and base classes
that define the core domain concepts, such as the State, Operator, Node,
and Search. Other elements represent common concepts that should be present
throughout the framework (such as the event system).
The search package contains some common classes and interfaces used
to define the search algorithms and their various aspects. The idea is to
encapsulate these aspects in their own classes so that the search can be
heavily parameterized. For instance, queuing strategy and node qualification
strategy are used to parameterize a basic GeneralSearch algorithm. Other
classes are used to introduce heuristic and iterative searching. The "classic"
search algorithms, such as A*, are thus instantiated as a composition of
these aspects. Many more algorithms need to be implemented and the framework
refactored appropriately (if needed) in order to achieve maximum decoupling
and reusability benefits.
The problem package contains so far only two problem abstractions,
namely the n-puzzle and simple map search. The goal is to implement many
sample problems that can be used independently of the search strategies.
The clients package contains two simple command-line drivers to
test the search algorithms. Ideally, a rich GUI client would be developed
to illustrate the search progress. The event system embedded in the core
framework is intended to allow such clients to interact with the search
algorithm and display its progress on screen.
One of the secondary goals of this project is to have fun with design patterns.
I will strive to document the source files and discuss the patterns used
in different places within the framework.
TO DO
More than I can think of. If you would like to participate, please check
out the project page at http://sourceforge.net/projects/sofi
. Please let me know if you find this framework useful.
Thank you for your interest.
This project is hosted by
SourceForge.net
.
Last modified: 10/10/2001
Copyright (c) 2001 Peter Nehrer