NODElib Documentation

By Gary William Flake

NAME

nodelib.h - the Neural Optimization Development Engine library

SYNOPSIS

NODElib (which stands for Neural Optimization Development Engine library) is a programming library for rapidly developing powerful neural network simulations. Very few assumptions have been made regarding the system in which the code is to be used; thus, NODElib is suitable as a back-end engine for most applications.

But wait, there's more.

NODElib is general enough that you can probably find many other uses for it. The code is extremely modular, compact, and robust. It is written in an object oriented manner. All of the library code, example and test program source, documentation, and supporting text is only on the order of about 20,000 lines, which means that NODElib is extremely compact. This is important from the point of view of comprehending the code, and for the memory requirements of the library.

To use NODElib, you need only use the include directive below, and compile your program with a '-lnode -lm'.

#include <nodelib.h>

DESCRIPTION

Quick Start

To get up and running with NODElib as fast as possible, consult the examples directory, which contains several source code examples for using NODElib in a variety of ways. In general, simple tasks will require simple programs, and complex tasks will require slightly complex programs.

The Makefile in the examples directory can also be used as a template for your own Makefile.

Keep in mind that the examples attempt to show a wide range of NODElib functionality; thus, you may do well to take an example program and strip out the functionality that you do not need (e.g., advance optimization or data source hooks, etc.).

The next section gives a bird's eye view of NODElib, with the aim of giving you a general feel for the entire contents of NODElib.

Overview

In general, NODElib is divided into several modules that can be used more or less independently of each other. These modules can be roughly categorized in one of four groups: core routines (required by all other modules), basic data types, data set handling routines and interfaces, and numerical routines. A brief introduction to each category is provided below.

Core Routines - The core routines handle memory management and basic exception handling. The key idea is that localizing these two tasks simplify debugging and allow for error messages (for all of NODElib) to be directed to a single source that can be easily selected by a user.

Basic Data Types - The basic data types are used as building blocks by the other modules. All of the basic data types in NODElib are generic in the sense that they accept a void pointer and a set of user hooks so that they can operate over any other data type.

Data Set Interfaces - Most of the numerical methods in NODElib are defined with respect to an abstract ``dataset''. In some applications, you may want a dataset to be a chunk of memory in your C code, or a flat memory-mapped binary file, or perhaps a delayed coordinate embedding of ASCII time series data. NODElib can handle all of these cases because it has an abstract DATASET type that defines the interface for how data from a dataset should be accessed.

The details for how NODElib implements DATASETs may not be too interesting to you; however, you may wish to scan the list below to get a feel for the types of DATASETs that are implemented. The first two modules define the DATASET and DATASET_METHOD types; the latter type defines what methods are required to implement the DATASET interface. All other modules in this list are specific implementation of DATASET_METHODs.

Numerical Routines - The numerical routines are the heart of NODElib. If you are reading this, then you probably downloaded NODElib specifically for the neural network or support vector machine code. In this case, jump directly to those packages. Otherwise, you may wish to skim the contents below.

EXAMPLES

NODElib contains several example programs in the examples subdirectory of the source distribution. The examples do not exhaustively show how to use every feature of NODElib but, in general, they should help a new user quickly come up to speed with the library.

A partial list of example programs includes:

TEST PROGRAMS

NODElib has a basic set of test programs in the test directory. These test programs aren't particularly thorough; they are just there for testing minor new features. Nevertheless, you may find some of the useful, as they tend to exercise little known features of the library.

REFERENCES

While NODElib is lacking formal user and developer manuals (other than this online documentation), there exists a few publications that describe some of the more subtle features of NODElib. In no particular order:

DOWNLOAD

The unofficial home page of NODElib is located at: http://flakentstein.net/nodelib/html.

The latest version of NODElib can be downloaded from: http://flakentstein.net/lib/nodelib.tgz.

The author's home page is: http://flakenstein.net/.

COPYING

Copyright (c) 1992-2005 by Gary William Flake.

NODElib is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

AUTHOR

Gary William Flake (gary.flake@usa.net).