Quando codifica le caratteristiche del nostro cromosoma (per mancanza di una parola migliore), il binario sembra essere il metodo preferito. Capisco che questo dia le massime possibilità di crossover e mutazione, ma sembra anche avere una seria limitazione.
Ad esempio, supponiamo che sto cercando di risolvere il problema descritto qui , date le cifre Da 0 a 9 e gli operatori +, -, * e /, trovano una sequenza che rappresenterà un dato numero di destinazione. Gli operatori verranno applicati sequenzialmente da sinistra a destra durante la lettura. Ciò richiede le cifre da 1 a 9, così come i quattro operatori, dando 13 caratteri da codificare. Quindi, ho bisogno di usare una rappresentazione binaria con una lunghezza di 4, con un totale di 16 possibili stringhe binarie.
Ora, affinché una sequenza sia valida in quel problema, dovrebbe essere nella forma ...
d o d o d ... o d
... dove d
significa una cifra e o
indica un operatore. Supponi di guardare una sequenza di lunghezza 5 (ad es. 1 + 2 * 3). Esistono 9 rappresentazioni binarie valide per cifre (ad es. Probabilità 0.5625) e 4 valide per operatori (probabilità 0.25). Quindi, c'è solo una probabilità di 0,5625 * 0,25 * 0,5625 * 0,25 * 0,5625 = 0,011124 di una stringa binaria casuale che è una sequenza valida. In altre parole, solo l'1% circa delle stringhe sarà valido.
Questo sembra estremamente inefficiente. Il crossover e la mutazione invalidano tutte le stringhe valide esistenti, quindi non vedo come mai l'AG convergerebbe.
Correlato a questo è la questione di come gestire le stringhe binarie non valide. Supponiamo che tu abbia attraversato e mutato, e finisci con una stringa non valida. Assegni un valore di fitness enorme, quindi verrà scartato il prima possibile o lo butti via e cerchi di trovare un cromosoma figlio valido? L'opzione precedente sembra inefficiente in quanto avresti pochissimi cromosomi validi nella tua popolazione, e quest'ultima sembra altrettanto inefficiente, dato che impiegheresti anni a cercare di trovare stringhe binarie valide.
Perdonami se questa è una domanda stupida, ma sono ancora abbastanza nuovo per gli GA e sto facendo fatica a capire cosa faresti in un caso come questo.