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.