Discussione sull’articolo "Algoritmi Genetici - È Facile!" - pagina 15

 

Salve, non farò domande.

Voglio solo dirvi un enorme grazie per il vostro lavoro! Grazie!

È molto utile.

 

Salve, anch'io vorrei esprimere un grande ringraziamento. GA mi è stato segnalato di recente. Tutte le fonti trovate "su GA" mi hanno scoraggiato. Non sapevo dove andare.... E poi mi sono imbattuto nel vostro articolo attraverso un link. In una parola, evviva! ))

Ho un paio di domande. Mi rendo conto che l'articolo è stato scritto molto tempo fa. Ma comunque...

1. Le variabili dichiarate non sono utilizzate da nessuna parte.

input int    FFNormalizeDigits_P  = 0;        /Numero di marchi di adattamento
input int    GeneNormalizeDigits_P= 0;        /Numero di caratteri del gene

È un progetto per il futuro?

2. Ho eseguito UGA più volte e ho ottenuto valori diversi, cioè una volta corretti, la seconda volta non del tutto corretti. Domanda: quale dei parametri di UGA dovrebbe essere impostato "più grande" per aumentare il numero di risposte corrette.

Nel trailer osservato... L'immagine di sinistra mostra un risultato non corretto.

File:
111.png  8 kb
 
Alexey_74:

...La domanda è quale dei parametri del GA debba essere impostato "più grande" per aumentare il numero di risposte corrette.

In generale, purtroppo, non esiste e non può esistere una risposta univoca. Tutto dipende dal compito.

Nel vostro caso specifico, provate a modificare questi parametri:

input int    ChromosomeCount_P    = 100;    /Numero di cromosomi nella colonia
input int    Epoch_P               = 50;    /Numero di epoche senza miglioramento
//---
input string GA_OperatorParam     =        "----Parametri dell'operatore----";
input double ReplicationPortion_P  = 100.0; //Dole replicare.
input double NMutationPortion_P    = 10.0;  //Frazione di mutazione naturale.
input double ArtificialMutation_P  = 10.0;  //Dole della mutazione artificiale.
input double GenoMergingPortion_P  = 20.0;  //Prestito di geni.
input double CrossingOverPortion_P = 20.0;  //Crossingover share.
input double ReplicationOffset_P   = 0.5;   //Coefficiente di offset del limite dell'intervallo
input double NMutationProbability_P= 5.0;   //Probabilità di mutazione di ciascun gene in %

:)

Modificando i primi due parametri verso l'alto si aumenta la convergenza, ma, ovviamente, si aumenta il tempo di ricerca.

 

Grazie per la risposta. Ho giocato, osservato.... In generale, non ha senso condividere tutte le osservazioni. Le "varianti estreme" sono sufficienti.

Con i primi due parametri uguali a 50 e 2, rispettivamente, il tempo di esecuzione dell'algoritmo è di 170-200 ms.

...., pari a 100 e 50 il tempo di esecuzione era di 103203 ms. Sì, l'algoritmo ha prodotto una corrispondenza assoluta in termini di risultati, "come dovrebbe" e "come è risultato".

Purtroppo, come mi sembra, il consumo di tempo non corrisponde affatto ai risultati ottenuti.

 
Alexey_74:

Grazie per la risposta. Ho giocato, osservato.... In generale, non ha senso condividere tutte le osservazioni. Le "varianti estreme" sono sufficienti.

Con i primi due parametri pari a 50 e 2, rispettivamente, il tempo di esecuzione dell'algoritmo è di 170-200 ms.

...., pari a 100 e 50, il tempo di esecuzione è stato di 103203 ms. Sì, l'algoritmo ha prodotto una corrispondenza assoluta in termini di risultati, "come dovrebbe" e "come è risultato".

Purtroppo, come mi sembra, il consumo di tempo non corrisponde affatto ai risultati ottenuti.

Se il problema è risolvibile con i metodi newtoniani, dovrebbe essere risolto con questi. Otterrete risultati accurati in breve tempo.

In caso contrario, ben venga il GA. In questo caso mi viene in mente il detto del microscopio e delle noci.

 
Urain:

Se il problema è risolvibile con i metodi newtoniani, allora dovrebbe essere risolto con essi. Ottenere risultati accurati in breve tempo.

Altrimenti, ci si rivolge al GA. Mi viene in mente il detto sul microscopio e le noci.

Purtroppo, non esistono metodi semplici. Qualunque sia il compito da svolgere, si pone il problema dell'ottimizzazione. Poiché tutte le ipostasi BP, chiamate indicatori, sono parametriche. Anche lo stesso zigzag, sembrerebbe....

E poiché ci sono dei parametri, significa che devono essere ri(sotto)battuti. La variante più semplice è quella dei cicli annidati. Come dimostra la pratica, il più delle volte non è un'opzione. Ecco perché usiamo i GA. E non da quello malvagio. )) È una necessità urgente.

Un anno o due fa ho fatto un esperimento puro. Se si prendono due mashki con periodi lunghi, la loro differenza (in una finestra separata) appare come un grafico abbastanza regolare di forma chiaramente sinusoidale. Volevo vedere

se la somma di diverse sinusoidi può ripetere questo grafico. Ho creato uno script che doveva raccogliere 3 sinusoidi. All'inizio ne volevo 5, poi ho cambiato idea scegliendone tre (esperimento, perché scaldarsi?). Il risultato è stato di 3 cicli (2 annidati).

Naturalmente, se si eliminano i commenti dai cicli, gli algoritmi ciclici funzionano più velocemente. Ma non 100 volte, purtroppo, e la possibilità di seguire il processo scompare completamente.

Per questo motivo l'esperimento è stato cancellato senza essere iniziato. Ma la portata e la gravità di una situazione apparentemente semplice "è stata ascoltata" mi ha sorpreso e quasi spaventato. ))

 

Andrew ci sono altre 2 domande:

1. Nell'esempio dello zigzag alternativo hai usato la frase "...quando il genotipo di un cromosoma non corrisponde al fenotipo". Che cosa significa in relazione al GA?

2. Da quanto ho capito, la classificazione avviene in ordine decrescente. Cioè, più alto è il valore in Colony[0][chromos], più l'individuo è adattato?

Cioè, se ho capito bene, nel caso di lavoro con le crivuline in FF, si possono (dovrebbero) usare i coefficienti di correlazione r o R perché tendono a 0->1. E non si può usare l'MSE perché è ->0.

 
Alexey_74:

Andrew ci sono altre 2 domande:

1. Nell'esempio dello zigzag alternativo hai usato la frase "...quando il genotipo di un cromosoma non corrisponde al fenotipo". Che cosa significa in relazione al GA?

2. Da quanto ho capito, la classificazione avviene in ordine decrescente. Cioè, più alto è il valore in Colony[0][chromos], più l'individuo è adattato?

3. Se ho capito bene, nel caso di lavoro con le curvuline in FF, si possono (dovrebbero) usare i coefficienti di correlazione r o R, in quanto tendono a 0->1. e non si può usare l'MSE, in quanto è ->0.

1. Se i geni di un cromosoma sono uguali agli argomenti della funzione da ottimizzare, il genotipo corrisponde al fenotipo (genotipo - valori dei geni, fenotipo - valori degli argomenti). Se i geni e gli argomenti non sono uguali (viene utilizzato un qualche tipo di trasformazione), allora non corrispondono. Cercate su Google i concetti di genotipo e fenotipo in biologia.

2. Sì, ma non è fondamentale. Si può specificare esplicitamente la direzione del ranking, oppure si può moltiplicare il valore di FF per -1.

3. Scusate, non ho capito la domanda.

 
joo:

1. Se i geni di un cromosoma sono uguali agli argomenti della funzione da ottimizzare, il genotipo corrisponde al fenotipo (genotipo - valori dei geni, fenotipo - valori degli argomenti). Se i geni e gli argomenti non sono uguali (viene utilizzato un qualche tipo di trasformazione), allora non corrispondono. Cercate su Google i concetti di genotipo e fenotipo in biologia.

2. Sì, ma non è fondamentale. Si può specificare esplicitamente la direzione del ranking, oppure si può moltiplicare il valore di FF per -1.

3. Scusa, non avevo capito la domanda.

Grazie.

1. È quello che ho ipotizzato. Ma tirare a indovinare è una cosa torbida e pericolosa. È molto più auspicabile saperlo con certezza. Riguardo a Google, grazie per il consiglio, ma credo che non lo userò. Dai tempi della scuola ricordo recessivo, dominante, allele, fenotipo, genotipo, omozigote, eterozigote.... Santo cielo, quanta spazzatura nella mia testa. Sì, nella scuola sovietica sapevano come impartire nozioni.... ))

2. Anche questo è comprensibile.

3. Ma non c'era un terzo punto. Solo la terza riga (una continuazione del secondo paragrafo), in cui il pensiero ad alta voce, come, "Se ho ragione...". Non è una domanda. Anche se sembra che possa esserlo. Allora, domanda retorica. Spiegherò il significato. Per esempio, in modo puramente sintetico. Abbiamo un segnale di curva di forma sinusoidale e sappiamo che è una somma di tre sinusoidi. Sono quasi assolutamente certo che il GA affronterà facilmente questo compito e produrrà i periodi di tutte e tre le sinusoidi. Ma nel processo è in qualche modo necessario misurare quanto la somma delle tre sinusoidi sia simile al riferimento. Nel mio arsenale ci sono tre misure di questo tipo: r (Pearson), R (p-quadrato) e MSE. Soprattutto perché queste misure sono utilizzate anche nei paradigmi delle reti neurali come misure di "fitness".

Grazie ancora, questo rende tutto più chiaro e trasparente. Ancora una volta, mi sono immerso solo di recente nell'argomento dei GA. Quindi tutti gli epiteti come novizio, scemo, valenok sono, ahimè, tutti miei.... ))

P.S. Conosco gli analoghi biologici, naturalmente. Ma questa conoscenza serve solo a far comprendere l'essenza dei processi descritti dai linguaggi di programmazione di alto livello. E questo, non ovunque e non sempre. Non lego gli analoghi biologici con gli analoghi dei neurocomputer in un nodo stretto. In qualche modo in biologia (natura) tutto funziona una tantum. Ma nel neurocomputing, per qualche motivo, il più delle volte non funziona.

 

Andrew, un'altra domanda.

input string GA_OperatorParam     =        "----Parametri dell'operatore----";
input double ReplicationPortion_P  = 100.0; //Dole replicare.
input double NMutationPortion_P    = 10.0;  //Frazione di mutazione naturale.
input double ArtificialMutation_P  = 10.0;  //Dole della mutazione artificiale.
input double GenoMergingPortion_P  = 20.0;  //Prestito di geni.
input double CrossingOverPortion_P = 20.0;  //Crossingover share.
input double ReplicationOffset_P   = 0.5;   //Coefficiente di offset del limite dell'intervallo
input double NMutationProbability_P= 5.0;   //Probabilità di mutazione di ciascun gene in %

Possiamo dire che tali valori di queste variabili sono adatti alla maggior parte dei problemi di ottimizzazione? Come si dice in alcune fonti "... il 90% dei problemi può essere risolto utilizzando un normale perceptron".