EvolvableObject
JINGPaC definisce la classe astratta EvolvableObject come interfaccia di un qualunque oggetto evolutivo. In essa vengono definiti i metodi essenziali che serviranno all'evoluzione dell'oggetto come:
- I metodi per la gestione della fitness
- L' interfaccia di clonazione
- I metodi per identificare un particolare oggetto nel contesto del sistema evolutivo
La maggior parte della complessità e delle responsabilità per la corretta evoluzione di uno specifico oggetto sono demandate alla Factory associata, come precedentemente illustrato, tuttavia la definizione di un'unica interfaccia per tutti gli oggetti "evolvibili" rappresenta uno dei pilastri fondamentali su cui regge l'architettura di JINGPaC. La figura seguente mostra come viene estesa il JINGPaC questa classe astratta:
In particolare in JINGPaC vengono definite 3 categorie di oggetti che possono essere fatti evolvere:
- Genetic Program
- Genetic Algorithm
- Neural Net
Cerchiamo ora di analizzare in dettaglio la realizzazione di ciascuna.
Genetic Program
In JINGPaC un Genetic Program è visto come un insieme di nodi terminali (i dati) e nodi funzione (la logica del programma) organizzati in una struttura ad albero; i nodi funzione presentano un numero di figli pari al numero di argomenti richiesti dalla funzione che implementano, questi nodi "figli" a loro volta possono essere di tipo funzione oppure terminali; in particolare questi ultimi, sono i nodi foglia del nostro albero e in quanto tali non possono possedere altri "figli".
Genetic Algorithm
In JINGPaC un Genetic Algorithm non è solo un tipo di oggetto "evolvibile" piuttosto rappresenta una struttura per l'incapsulamento di più oggetti "evolvibili": semanticamente può esser visto come un oggetto ArrayList<EvolvableObject> Java.
Neural Net
Architettura
Architettura generale del sistema. In cui è possibile notare la suddivisione dei thread all'interno d un environment.
Vi è un ulteriore thread relativo al World che contiene i vari thread Environment.