Rappresentazioni non binarie
Un cromosoma è una sequenza di simboli e questi simboli
sono cifre binarie, così ciascun simbolo ha cardinalità di due.
Alfabeti con alte cardinalità sono stati usati in varie ricerche
e alcuni ritengono che siano vantaggiosi. Secondo Goldberg la
rappresentazione binaria dà il più grande numero di schemi, e
fornisce il più alto grado di parallelismo implicito, mentre
Antonisse interpreta gli schemi differentemente e conclude che
gli alfabeti con alte cardinalità contengono più schemi di
quelli binari (è ancora argomento di discussioni).
Studi empirici sugli alfabeti con alte cardinalità hanno usato
cromosomi dove ciascun simbolo rappresenta un intero o un
floating point. Infatti poiché i parametri del problema
sono spesso numerici, rappresentarli direttamente come numeri,
anziché come cifre binarie, è un vantaggio. Così
possiamo definire facilmente degli operatori di crossover e
mutazione specifici:
Operatori di combinazione
- Media: prende la media aritmetica dei geni dei due genitori.
- Media Geometrica: prende la radice quadrata del prodotto dei
due valori.
- Extension: prende la differenza tra due valori e la aggiunge al
più alto o la sottrae al più basso.
Operatori di mutazione
- Rimpiazzamento casuale: rimpiazza un valore con uno casuale.
- Creep: aggiunge o sottrae un piccolo numero generato
casualmente.
- Geometric Creep: moltiplica per un valore prossimo a 1.
Per entrambi gli operatori creep il numero generato casualmente può avere diverse distribuzioni: uniforme dentro un dato range, esponenziale, gaussiana, binomiale etc.
Codifica con Permutazione
La codifica con permutazione può essere usata in problemi di ordinamento, come il problema del commesso viaggiatore.
Con questa codifica, tutti i cromosomi sono una stringa
di numeri.
Esempio:
Cromosoma A 1 5 3 2 6
4 7 9 8
Cromosoma B 8 5 6 7 2
3 1 4 9
Nei problemi di ordinamento per alcuni tipi di crossover and
mutazione devono essere fatte correzioni per non
compromettere la consistenza del cromosoma (cioè avere una
sequenza reale in esso).
Codifica per valore
Una codifica col valore diretto può essere usata in problemi dove si usano valori complicati come i numeri reali. Luso di una codifica binaria per questo tipo di problemi sarebbe molto difficile.
In questa codifica, ogni cromosoma è una stringa di alcuni valori. I valori possono essere qualsiasi cosa correlata al problema: da interi, numeri reali o caratteri fino ad alcuni oggetti complicati.
Esempio:
Cromosoma A1.2324 5.3243 0.4556 2.3293 2.4545
Cromosoma B ABDJEIFJDHDIERJFDLDFLFEGT
Cromosoma C (back), (back), (right), (forward), (left)
La codifica per valore è molto buona per alcuni problemi
speciali. Daltra parte, per questa codifica è spesso
necessario costruire nuovi operatori crossover e mutazione
specifici per il problema.
Codifica ad albero
La codifica ad albero è usata principalmente per programmi evolutivi or espressioni, per la programmazione genetica.
In questa codifica ogni cromosoma è un albero di alcuni
oggetti, come funzioni o comandi in linguaggio di programmazione.
Il linguaggio LISP è spesso usato con questa codifica, perché
in esso i programmi sono scritti in questa forma e possono
essere facilmente analizzati come un albero, in questo modo
crossover e mutazione possono essere fatti in modo relativamente
facile.