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

 
Urain:

....

In generale, bisogna capire che il GA non trova una soluzione esatta, ma una soluzione robusta. Cioè una soluzione che ha un buon successo rispetto al campo delle soluzioni possibili.

Le funzioni di prova sono "sconfitte". Devono essere sconfitte.

E quindi - hai detto tutto correttamente.

 
joo:

Le funzioni di test sono "sconfitte". Devono essere sconfitte.

Ma lei sta dicendo tutte cose giuste.

Sì, sì, non mi sono dilungato, ed è per questo che sono funzioni di test, l'algoritmo deve accettarle, altrimenti un tale algoritmo non può essere considerato di successo.

È difficile immaginare cosa troverà l'algoritmo nel campo sconosciuto se non supera nemmeno il test.

 

Grazie a tutti, funziona.

Dovevo essere così stupido da confondere il meno con il moltiplicatore.

 
ivandurak:

Grazie a tutti, funziona.

Intendi il tuo algoritmo? Congratulazioni!
 

Mi chiedo come avvitare correttamente UGA, se dobbiamo ottimizzare diverse variabili con lo stesso valore della funzione fitness per minimizzare l'errore di approssimazione. Problema classico. Una rete neurale a due strati a cinque passaggi con 4 neuroni, ad esempio, richiede la ricerca di 22 coefficienti insieme a bias nell'intervallo [-1...1] con una precisione di 0,0001 e contemporaneamente nella stessa funzione obiettivo la selezione dei parametri degli indicatori di input 5 pezzi*2parametri= 10 variabili nell'intervallo 5...50. Oppure separatamente, ma con un passo di 0,01.

Naturalmente, è possibile codificare i valori degli indicatori nell'intervallo dei pesi. Ma è un po' diverso.

Un'altra domanda. È possibile passare a UGA le condizioni di salto dei geni? Cioè, per esempio, i geni responsabili dell'indicatore dovrebbero corrispondere alla condizione G23< G24 G25<G26 e così via.

 
miklelv:

Mi chiedo come avvitare correttamente UGA, se dobbiamo ottimizzare diverse variabili con lo stesso valore della funzione fitness per minimizzare l'errore di approssimazione. Problema classico. Una rete neurale a due strati a cinque passaggi con 4 neuroni, ad esempio, richiede la ricerca di 22 coefficienti insieme a bias nell'intervallo [-1...1] con una precisione di 0,0001 e contemporaneamente nella stessa funzione obiettivo la selezione dei parametri degli indicatori di input 5 pezzi*2parametri= 10 variabili nell'intervallo 5...50. Oppure separatamente, ma con un passo di 0,01.

Naturalmente, è possibile codificare i valori degli indicatori nell'intervallo dei pesi. Ma è un po' diverso.

Un'altra domanda. È possibile passare a UGA le condizioni di salto dei geni? Cioè, per esempio, i geni responsabili dell'indicatore dovrebbero corrispondere alla condizione G23< G24 G25<G26 e così via.

Ecco, questo è tutto,

c'è un intervallo in cui funziona la maggior parte dei parametri, il resto viene semplicemente regolato mediante spostamento e scalatura.

Capite bene che il codice riportato nell'articolo non è uno sviluppo commerciale lucidato per ogni starnuto del consumatore.

C'è il desiderio di creare intervalli prestabiliti per ogni parametro, nessuno vi sta tenendo per mano, ma non dimenticate che con il numero di parametri che si contano a migliaia, impostare gli intervalli a mano diventerà molto problematico.


avere un intervallo di geni [-1;1] --> (int)NormaliseDouble( ((gene+1)/2)*45+5 ,0) --> [5;50]

Anche se sono d'accordo sul fatto che ci saranno molti geni diversi che daranno lo stesso risultato, qui si può creare un setter di precisione per combinare i geni, per esempio da 0 al 1000° gene precisione a 3 cifre, da 1000 a 1010 precisione a 0 cifre.

 
miklelv:

E un'altra domanda. È possibile passare le condizioni di salto genico a UGA? Cioè, ad esempio, i geni responsabili dell'indicatore devono soddisfare la condizione G23< G24 G25<G26 e così via.

Possiamo farlo in questo modo: Parametro1=G23 Parametro2=G23+G24.
 
her.human:
Si può fare così: Parametro1=G23 Parametro2=G23+G24.

Quando si converte l'intervallo, è meglio effettuare una conversione con un controllo logico, che includa l'interruzione.

Altrimenti non ci sarà alcun collegamento tra una parte dell'intervallo interrotto e un'altra; a questo proposito è necessario capire che i geni vengono presi in prestito da cromosomi diversi solo di conseguenza, il secondo gene può essere preso in prestito solo per la produzione del secondo gene del nuovo cromosoma.

Se un parametro è rappresentato da due geni, non ci sarà alcuna connessione tra loro.

 
Urain:

È meglio effettuare una trasformazione con un controllo logico, che includa la rottura.

In caso contrario, non ci sarà alcun collegamento tra una parte dell'intervallo interrotto e un'altra; si deve capire che i geni vengono presi in prestito da cromosomi diversi solo di conseguenza, il secondo gene può essere preso in prestito solo per la produzione del secondo gene del nuovo cromosoma.

Se un parametro è rappresentato da due geni, non ci sarà alcun legame tra loro.

Forse è meglio.

Ho proposto una variante semplice. Il GA può gestirla senza problemi.

In generale, i geni non sono sempre presi in prestito, possono essere generati nuovi geni.

 
Grazie per i vostri commenti. È certamente più facile da codificare. Sto cercando di replicare Prediction Wizard da Neuroshell su mql. Lì per 2-3 secondi su una storia di 200-2000 barre in un ciclo di 20 indici con 2-4 parametri ciascuno nell'intervallo di 5...50 è formato per 2-3 secondi su una storia di 200-2000 barre dal selezionato da questo 20 migliori indicatori (per esempio, 5 pz). E tutto questo è scritto in VBbasic. Deve trattarsi di un algoritmo molto interessante. UGA andrà benissimo.