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

 
Vi ho detto che ho la testa in disordine, quindi sono andato nella direzione sbagliata.
Hash può essere applicato alla ricerca di duplicati all'interno della colonia, e la funzione di trovare un hash può essere resa semplice e veloce, perché anche 1-2 duplicati non faranno il tempo e non rovineranno il risultato.
 

Il tempo di esecuzione dell'algoritmo GA è incommensurabilmente piccolo rispetto all'esecuzione di FF. Pertanto, non ha senso cercare di accelerare ulteriormente l'algoritmo, così come non ha senso spostare GA su un dll, ad esempio.

Dobbiamo cercare di ridurre il numero di esecuzioni di FF con la precisione richiesta del risultato. L'algoritmo dispone di impostazioni flessibili a questo scopo. Inoltre, il tempo di ricerca può essere ulteriormente ridotto migliorando le qualità di ricerca dei GA in generale e degli operatori in particolare. Raccomando di indirizzare il potenziale di ricerca in queste direzioni.

 
joo:

Il tempo di esecuzione dell'algoritmo GA è incommensurabilmente piccolo rispetto all'esecuzione di FF. Pertanto, non ha senso cercare di accelerare ulteriormente l'algoritmo, così come non ha senso spostare GA su un dll, ad esempio.

Dobbiamo cercare di ridurre il numero di esecuzioni di FF con la precisione richiesta del risultato. L'algoritmo dispone di impostazioni flessibili a questo scopo. Inoltre, il tempo di ricerca può essere ulteriormente ridotto migliorando le qualità di ricerca dei GA in generale e degli operatori in particolare. Raccomando di indirizzare il potenziale di ricerca in queste direzioni.


Sembra che il dll ora non sarà più veloce di mql 5.
Ok, appena scriverò una libreria la testerò, poi scriverò cosa è venuto fuori)).

 

Nota importante per l'articolo.

Non utilizzare i parametri dell'algoritmo

FFNormaliseDigits e GeneNormaliseDigits

Non è necessario normalizzare il valore della funzione di fitness e i geni. La normalizzazione comporta una diminuzione della ricercabilità dell'algoritmo e un aumento del numero di esecuzioni di FF. Inoltre, più decimali vengono scartati, maggiore è l'impatto negativo sull'algoritmo.

In altre parole, l'introduzione dell'operazione di normalizzazione nell'algoritmo è stata un errore.

Da non confondere con l'operazione di campionamento controllata dal parametro Precision!

 
Importante osservazione all'articolo.

Non utilizzare i parametri dell'algoritmo

FFNormalizeDigits e GeneNormalizeDigits

Non è necessario normalizzare il valore della funzione fitness e dei geni. La normalizzazione porta a una diminuzione della capacità di ricerca dell'algoritmo e a un aumento della quantità di FF iniziali. Inoltre, più segni dopo la virgola vengono rifiutati, più forte è l'influenza negativa sull'algoritmo.

In altre parole, l'introduzione dell'operazione di normalizzazione nell'algoritmo è stata un errore.

Da non confondere con l'operazione di digitalizzazione operata nel parametro Precision!

 
joo:

Nota importante per l'articolo.

Non utilizzare i parametri dell'algoritmo

FFNormaliseDigits e GeneNormaliseDigits

Non è necessario normalizzare il valore della funzione di fitness e i geni. La normalizzazione comporta una diminuzione della ricercabilità dell'algoritmo e un aumento del numero di esecuzioni di FF. Inoltre, più decimali vengono scartati, maggiore è l'impatto negativo sull'algoritmo.

In altre parole, l'introduzione dell'operazione di normalizzazione nell'algoritmo è stata un errore.

Da non confondere con l'operazione di campionamento controllata dal parametro Precision!

Pertanto, nella libreria UGAlib stessa è meglio rimuovere la normalizzazione o solo in FF.
 
Serj_Che:
È meglio rimuovere la normalizzazione nella libreria UGAlib stessa o solo in FF.
FFNormalizeDigits è usato in FF per normalizzare il valore di fitness e GeneNormalizeDigits è usato nell'algoritmo stesso per normalizzare i geni. Non è necessario normalizzare entrambi.
 
joo:
FFNormalizeDigits viene utilizzato in FF per normalizzare il valore di fitness e GeneNormalizeDigits viene utilizzato nell'algoritmo stesso per normalizzare i geni. Non è necessario normalizzare entrambi.

Capisco. Naturalmente lo correggerò io stesso, ma se non è difficile, vi prego di postare la versione corretta di UGAlib.

Ho paura di commettere errori.

 
Libreria UGA aggiornata ed esempi nell'articolo. L'attuale versione 1.1.0 gratuita dell'autore è disponibile ai link nel testo alla fine dell'articolo.
 

Grazie all'autore per la libreria!

Aggiungete la riga "cnt++;" nel ciclo della funzione di ricerca genitore, altrimenti potrebbe entrare in un loop eterno!

 //Отбор двух родителей.

void SelectTwoParents

(

int &address_mama,

int &address_papa

)

{

  //-----------------------Переменные-------------------------------------

  int cnt=1;

  address_mama=0;//адрес материнской особи в популяции

  address_papa=0;//адрес отцовской особи в популяции

  //----------------------------------------------------------------------

  //----------------------------Отбор родителей--------------------------

  //Десять попыток выбрать разных родителей.

  while (cnt<=10)

  {

    //Для материнской особи

    address_mama=NaturalSelection();

    //Для отцовской особи

    address_papa=NaturalSelection();

    if (address_mama!=address_papa)

      break;

    cnt++; 

  }

  //---------------------------------------------------------------------

}