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.


More than I can think of. If you would like to participate, please check out the project page at . Please let me know if you find this framework useful.

Thank you for your interest.

This project is hosted by .
SourceForge Logo

Last modified: 10/10/2001
Copyright (c) 2001 Peter Nehrer