## CIlib -- Computational Intelligence Library### General Information on CIlib **What is CIlib?** CIlib (Computational Intelligence library) is in essence a framework for the implementation and execution of Computational Intelligence (CI) algorithms. The framework, developed using design patterns, is generic to allow for easy development and integration of new algorithms, implemented in Java. The objective of CIlib is to provide a mechanism to save development time in evaluating and benchmarking new algorithms. While attempts have been made to optimise computational time, then intention is not to provide algorithms for solving real-time problems. It is a research tool.
CIlib is not a finalised product. Development happens continuously, with new additions being made daily. You are welcome to add to it. Please send us your code, and we will add it to new distributions. **What is in CIlib?** CIlib is currently very extensive in the CI paradigms provided. Currently, CIlib contains a large body of particle swarm optimisation (PSO) algorithms, some ant algorithms, a framework for implementing evolutionary algorithms (with some algorithms already implemented), a framework for implementing neural networks (with some feedforward training algorithms already implemented), and some code for implementing game trees.
**What are the requirements?** Well, you need Java. Everything is in Java. The newest version, i.e. version 0.5.6, requires JDK 1.5.
**Where do I get a copy of CIlib?** Download the newest version (version 0.5.6) from sourceforge
### CIlib Structure Overview **CIlib Object hierarchy**: Cilib is a library of 5 essential object hierarchies. They are:
- Algorithm hierarchy
- Problem hierarchy
- Measurement hierarchy
- Control Parameters hierarchy
- Type system hierarchy
All algorithms are defined within the Algorithm hierarchy, with the
Algorithm class being the super class of all algorithms. The algorithms
are then divided into 3 branches, PopulationBasedAlgorithm (base class
of PSO, EC, ACO, etc. where multiple individuals search in parallel), MultiPopulationBasedAlgorithm (base class for
the algorithms using multiple populations like island GAs, cooperative PSO) and
SingularAlgorithm (base class for algorithms with a single search like
neural networks and K-mean clustering). Algorithms are of course
governed by StoppingConditions. The StoppingConditions determine when an algorithm terminates. The problem hierarchy defines a set of problems that are all
OptimisationProblems. An optimisation problem can be Minimisation or
Maximisation. All problems will fall into one of these categories, or
into both of them (specifically, multi-objective problems).
Problems can be defined in terms of a classical function, or based on
some measure defined over a set. Meaurements are defined to be the output of an algorithm during the
execution of the algorithm. You could for example want to trace the
fitness of a particle or individual after every 5 iterations of the
algorithm. There are a wide selection of measurements, all
located within the measurements package within. The Control Parameters provide a generic manner to define parameters
within algorithms. You may want a control parameter of an algorithm to decrease
over time (such as the mutation rate in a GA), for which the
LinearDecreasingControlParameter could be used. Using the
XML file these objects can be injected into the containing class. The Type system is the core of the new versions (as from version 0.5) of CIlib. The Java defined primitives, such as double
and int, are not used. CIlib relies on the
type system which provides its own implementation of Int and Real (and other
types). These classes provide information
such as the upper and lower bound on variables of the specific type.
Another benefit of the type system is that
it enables a short-hand notation to define the representation of an
entity (which can be a particle, and individual, or an ant).
For example, if an entity's domain is defined as
R(-30.0,30.0)^30, the entity will be 30-dimensional where each dimension is a Real object and is
randomly initialized within the range of -30 and 30.
As another example, defining the domain as
B^30 will result in a 30-dimensional bit representation, with each
bit randomly initialised. |