Alle Operatoren werden von der Basisklasse cOperation
abgeleitet. Von der Klasse cOperation
selbst können keine Instanzen erzeugt werden.
Operatoren werden vom Algorithmus gestartet, um neue bessere Individuen zu erzeugen. Ob und wieviele neue Individuen ein Operation erzeugt und welche Informationen sie dafür benutzt bleibt der Operation überlassen.
Wenn eine Operation kein Individuum erzeugt, wird für sie vom Kernalgorithmus ein Dummyindividuum eingefügt, um die Operation bewerten zu können. Dieses Dummyindividuum besteht nur aus Individueninformationen cIndividualInfo
über ein totes Individuum. Die Fitness dieses Dummyindividuums ist die minimal mögliche Fitness.
Jeder Operation muss ein eindeutiger Identifier cOperationIdentifier
(siehe Abschnitt 78.2 auf Seite ) bei der Erzeugung zugeordnet werden. Jeder Operatorklasse darf nur einen Konstruktor haben dem als einziger Parameter der Operationsidentifier cOperationIdentifier
übergeben wird. Auf diese Art können die Operationsobjekte/-instanzen zu den Operatoren immer auf die gleiche Weise (von einer Factory) erzeugt werden.
Wenn für Operationen Funktionalität verwendet wird, die auch für andere Operatoren interessant sein könnte, ist diese Funktionalität in seperate Module oder Klassen auszulagern. Die Operatoren sollten nur zum Verwalten der Operation dienen und nicht zum Verarbeiten von weiteren Informationen.
Wenn beispielsweise eine Operation auf Bildern gleichfarbige Flächen sucht und zu kompakten Fib-Objekten zusammenfasst. So sollte der Quellkode aus der von cOperation
abgeleiteten Klasse für die Operation nicht viel mehr tun, als Funktionen aus anderen Modulen aufzurufen, welche die gleichfarbigen Flächen suchen und diese zusammenfassen.
Über die Konstante OPERATION_DOMAIN
kann die Art der Individuen ermittelt werden, auf denen die Operation arbeitet. Dies ist der Klassenname der Individuen (z. B. cIndividual
) auf denen die Operation arbeitet.
Neu Operatoren sollten leicht hinzugefügt werden können.