Cover of Swarm Intelligence Book

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, code for implementing game trees and a framework for implementing cooperative and competitive co-evolutionary algorithms.

What are the requirements? Well, you need Java. Everything is written in Java. The newest version, i.e. version 0.6.9, requires JDK 1.6.

Where do I get a copy of CIlib? Download the newest version (version 0.6.9) 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, etc. where multiple individuals search in parallel), MultiPopulationBasedAlgorithm (base class for the algorithms using multiple populations like cooperative PSO and DE) 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.