C++ implementation of the PAES algorithm
0.1
Project Information
Author
-
Antonio J. Nebro (University of Málaga)
-
Francisco Luna (University of Málaga)
-
Enrique Alba (University of Málaga)
If you have any question, please send a message to: Antonio J. Nebro (antonio@lcc.uma.es)
Version
0.1 (February 2004)
Table of Contents
Introduction
This document describes briefly an implementation of the PAES algorithm in C++. Please, note that this is a preliminary version, so some files are not properly documented, and some functions must be still tested.
Some features of our implementation of PAES are the following:
-
We have added a constraint handling mechanism similar to the one employed in the micro-GA algorithm.
-
For continuous problems, we can choose two different representations for the decision variables: REAL and BINARY_REAL (binary-coded real values).
-
Our implementation also supports binary variables (for example, see the
OneMax
problem, a mono-objective problem used for testing purpose).
-
Currently, there is a bit-flip mutation operator for binary individuals, and three mutant operators for real-coded problems: random, polynomial, and uniform. In our preliminary tests, we have used random mutation; the other two mutation operators must be exhaustively tested.
Currently, our program incorporates a number of both constrained and unconstrained problems. You can find the problem names in the file ProblemHeaders.h
.
Goals
The goals of this work is to provide a implementation of the PAES algorithm described by Knowles and Corne in C++. The motivaton of this work is to simply the adding of new problems, and it must serve as the basis of future sequential and parallel implementations.
Components
The codes are written in C++, and they have been developed in Linux and Windows 2000 using Gnu's g++ compiler.
Installation
There is not any installation process.
Compilation
To compile the program, just type "make" in the "Paes" directory.
Executing the Program
There exists a configuration file named "paes.cfg" that is read by the program when it starts. One you have modified that file according to your preferences (archive length, mutation probability, etc.), just type:
$ PaesSeq
Currently, the program produces two output files, name "VAR" y "FUN". The first one contains the values of the decision variables, while the second one stores the values of the functions. You can change easily the names of these files (see line 40 in the file PaesSeq.cpp).
Adding new Problems
In this section we detail how to define a multi-objective problem to be solved by the applications of the project. The program has been designed to try to simplify this task as possible. The key is to use the inheritance mechanism to provide a base class, MultiobjectiveProblem
, that must be inherited by all the classes representing problems.
Let us suppose we want to add a new unconstrained multi-objective problem called Example
. The easiest way is to take an existing problem as a reference; for example, let us choose the problem Kursawe
. This problem is defined in a class so named, which is defined in the files Kursawe.h
and Kursawe.cpp
. The steps required to add the problem are the following:
-
Create a header file for the class. In our example, it should be named
Example.h
.
-
Create the implementation file
Example.cpp
. In this file you have to define the constructor of the class and the method evaluate
. The constructor contains sentences to specify,among other information, the number of objective functions, the number of state variables, the number of constraints, and the limits of the state variables.
-
Include the header file
Example.h
in the file ProblemHeaders.h
-
Modify the program
PaesSeq.cpp
to create an instance of the new problem.
-
Modify the makefiles to add the object file
Example.o
in the macro named OBJS
.
If your problem has constraints, then you should override the methods numberOfNonSatisfiedConstraints
in the file Example.cpp
; see, for example, the implementation files of the problems Viennet4
or Tanaka
. (You do not need to override the method constraintsAreSafisfied
; it is intended for future use.)
Now, you should be ready to re-compile the project: type make
and (if there are not compilation errors) then you can execute the programs to solve your multi-objective problem.
If you are insterested in solving a binary problem, please take the OneMax
problem as an example.
Current and future work
We are currently working in the following:
-
Complete documentation of the header and source files.
-
Exahustive testing of the program. In particular, attention should be paid to the polynomial and uniform mutation operators and the adaptive grid mechanism.
-
We intend to use a more elaborated constraint handling mechanism.
-
Study of possible parallel extensions.
Generated on Wed Feb 11 10:38:00 2004 for Paes by
1.3.3