Określenie funkcji celu oraz zbioru jej argumentów

Program GenMachine został napisany w zorientowanym obiektowo języku programowania C++. Jego głównym i niezmiennym elementem jest obiekt klasy GenMachine zdefiniowany w dołączanej statycznie bibliotece GenMachine.lib. Kod źródłowy obiektu klasy GenMachine podany jest w załączniku, w plikach machine.h i machine.cpp. Większość parametrów potrzebnych do pracy systemu, takich jak maksymalna liczba pokoleń, czy też prawdopodobieństwo mutowania, przekazywana jest za pomocą obiektu klasy IniFile (pliki: IniFile.h, IniFile.cpp) i za pośrednictwem pliku tekstowego GenMachine.ini, a zatem zmiany parametrów na potrzeby przeprowadzanych w tym rozdziale badań nie wymagają rekompilacji programu.

Musi jednak istnieć osobny egzemplarz programu dla każdej funkcji celu i każdego zbioru jej argumentów. Określenie nowej funkcji celu jest równoznaczne ze zdefiniowaniem funkcji wirtualnej o nazwie real Formula(real* x) , która jako argument otrzymuje wektor liczb rzeczywistych oraz zwraca liczbę rzeczywistą. Na przykład określenie jednej z funkcji testowych De Jonga:

f (x1,x2) = 100(x2 – x2)2 + (1 – xi)2                                                                ( 4.1. )

jako funkcji celu do maksymalizacji dla GenMachine wymaga włączenia do programu następującego fragmentu kodu:

real MyGenMachine::Formula( real* x )

{

double dopasowanie;

dopasowanie = ( x[0] * x[0] – x[1] ) * ( x[0] * x[0] – x[1] );

dopasowanie *= 100;

dopasowanie += ( 1 – x[0] ) * ( 1 – x[0] );

dopasowanie *= -1;

return (real) dopasowanie;

};

Kolejnym krokiem jest określenie liczby zmiennych decyzyjnych oraz dziedziny funkcji. Dokonuje się tego przez zdefiniowanie stałych VARS i GM_DOMAIN. Dla zdefiniowanej powyżej funkcji będzie to następujący fragment kodu:

#define VARS 2

#define GM_DOMAIN                                                                                  \

minmax[0] = (real) -2.048      ;    minmax[1]     = (real)  2.048  ;                        \

minmax[2] = (real) -2.048      ;    minmax[3]     = (real)  2.048  ;

Tablica minmax zawiera dokładnie dwa razy więcej elementów niż wynosi liczba zmiennych decyzyjnych, ponieważ jej elementy określają kolejno dolną granicę pierwszej zmiennej, górną granicę pierwszej zmiennej, następnie dolną i górną granicę drugiej zmiennej, itd.

W zależności od potrzeb program GenMachine może operować na zmiennych rzeczywistych siedmiocyfrowych z zakresu od 3,4 • 10-38 do 3,4 • 1038 , wtedy typ zmiennej real odpowiada standardowemu typowi C++ float, lub też piętnastocyfrowych z zakresu od 1,7 • 10-308 do 1,7 • 10308 , wtedy typ real jest zdefiniowany jako double.