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

 
ivandurak:
Quali criteri e quanti figli devono essere uccisi. Quanti genitori e discendenti dovrebbe essere a seconda del numero di parametri ottimizzati .Da quale epoca incesto può essere consentito . In generale non è del tutto chiaro su quale principio per uccidere i genitori .Just purtroppo il vostro lavoro non è del tutto adatto per i miei scopi , ma quindi grazie mille con un pennello .

Non è necessario uccidere nessuno. Può funzionare anche con un solo cromosoma (incrocio con se stesso). E quindi in media 50 cromosomi sono sufficienti per tutti gli scopi.

Non si capisce l'algoritmo.

L'algoritmo è universale, adatto a qualsiasi scopo, ecco perché si chiama UGA. Ci sono solo alcuni compiti che possono essere risolti più velocemente in altri modi.

 
ivandurak:

1. Dammi un suggerimento plz....

2. con quale criterio e quanti discendenti uccidere.

3. Quanti genitori e discendenti devono essere a seconda del numero di parametri da ottimizzare.

4. A partire da quale epoca l'incesto può essere consentito.

5. In generale, non è chiaro in base a quale principio uccidere i genitori.

6. Solo purtroppo il vostro lavoro non è abbastanza adatto per i miei scopi, ma così tanti grazie con un pennello.

1. Non mi è chiaro lo scopo del tuo post. Se hai bisogno di consigli sull'implementazione del tuo algoritmo, hai bisogno di dettagli, un concetto generale, per così dire, in modo che ci sia qualcosa da discutere.

Se le domande riguardano l'algoritmo descritto nell'articolo, consultare i punti 2, 3, 4, 5, 5. 2, 3, 4, 5, 6.

2. I discendenti non vengono uccisi. I duplicati dei genitori e dei loro discendenti vengono eliminati.

3. 50 individui nella massa della popolazione è il significato più comunemente usato.

4. L'incrocio "con se stesso" non è consentito. Ma se è molto necessario (la popolazione si sta "estinguendo"), è possibile. :) vengono fatti diversi tentativi per trovare un "partner" adatto.

5. I genitori non vengono "uccisi" a caso o in alcune condizioni, ma vengono sostituiti dalla prole (esattamente metà della popolazione viene sostituita dalla prole - se, ovviamente, la popolazione è piena).

6. Se il problema è molto "specifico", forse (se è possibile) cercate di trovare prima una soluzione analitica.

 

Grazie per la vostra pronta risposta. Ho bisogno di genetica per vari esperimenti. La vostra biblioteka come sembra a me non è molto conveniente in uso così sto scrivendo il mio. Purtroppo in rete mal descritto l'intero algoritmo principalmente solo determinatori GA, se si dà un link alla descrizione (in russo) sarò molto grato. Di seguito descriverò come vedo il tutto, se non è difficile da correggere.

1 Creare casualmente individui parentali, non meno di 50.

2 Generare da loro da incroci e mutazioni colonia di numero di prole non inferiore a ..... da nessuna parte trovato una descrizione.

3 Alla ricerca di duplicati, si rimuove quello parentale.

5 Se necessario, si completano le colonie di discendenti e genitori. I genitori vengono creati in modo casuale, i discendenti in modo naturale.

4 Eseguire tutte le colonie attraverso il FF. Il FF viene posto al di fuori del GA.

5 Li classifichiamo tutti. Al migliore viene dato lo status di Rambo. Più alto è il ranking, più è probabile che diventi un papà.

6 Dividiamo l'intero gruppo di individui in forti e deboli. I più forti diventeranno genitori nella fase successiva.

7 Eliminare una parte della colonia dalla progenie (i più inadatti). Con una piccola probabilità tagliamo fuori una parte della colonia di genitori, come se si trattasse di una morte accidentale, Rambo non è soggetto all'epurazione dei fotogrammi.

8 Questa è la fine dell'era.

9 Se durante .... (specificare) uno stesso individuo detiene la bandiera Rambo - i calcoli terminano GA convergente, altrimenti andare al punto 3.

 
ivandurak:
....
Mi scusi, ma ho l'impressione che debba rileggere l'articolo.
 
Ho scritto il mio GA con molto impegno. Ma si blocca agli estremi locali. Avete qualche raccomandazione generale su come evitarlo?
 
ivandurak:
Ho scritto il mio GA con molto impegno. Ma si blocca agli estremi locali. Potete darmi qualche consiglio generale su come evitarlo?

Non è un contagio, è una magia speciale, "genetica". :)

Che funzione usi come FF?

Consiglio di testare, calibrare e debuggare il vostro algoritmo di ottimizzazione su funzioni appositamente progettate per questo scopo.

Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
  • www.mql5.com
Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
 
Perdonate la mia invadenza, ma si tratta di una questione di principio. Ho preso un esempio dal vostro articolo e ho scritto uno script per verificarlo. La risposta non coincide con l'esempio, o gli sci non viaggiano o il problema è nell'imbottitura tra la sedia e la tastiera. Se non è difficile punzecchiare come un gattino, il secondo giorno non riesco a trovare l'errore. Saluti
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("La soluzione 1 è probabilmente giusta = ",y) ;
//-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("La soluzione 2 è mia = ",y) ;
  }
 
ivandurak:
Perdonate la mia invadenza, ma si tratta di una questione di principio. Ho preso un esempio dal vostro articolo e ho scritto uno script per verificarlo. La risposta non coincide con l'esempio, o gli sci non viaggiano o il problema è nell'imbottitura tra la sedia e la tastiera. Se non è difficile punzecchiare come un gattino, il secondo giorno non riesco a trovare l'errore. Osservazioni
Esattamente, la guarnizione deve essere cambiata. Mi dispiace.
 
ivandurak:
Perdonate la mia invadenza, ma si tratta di una questione di principio. Ho preso un esempio dal vostro articolo e ho scritto uno script per verificarlo. La risposta non coincide con l'esempio, o gli sci non viaggiano o il problema è nell'imbottitura tra la sedia e la tastiera. Se non è difficile punzecchiare come un gattino, il secondo giorno non riesco a trovare l'errore. Cordiali saluti

Se non c'è fiducia nella FF stessa, nel senso che non siete sicuri che i vostri estremi siano tali, potete eseguire la funzione in un tester, il tester GA in questo senso è abbastanza buono, e trova una soluzione abbastanza accurata, ma solo con un piccolo numero di parametri (1,2).

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

 
ivandurak:
Perdonate la mia invadenza, ma si tratta di una questione di principio. Ho preso un esempio dal vostro articolo e ho scritto uno script per verificarlo. La risposta non coincide con l'esempio, o gli sci non viaggiano o il problema è nell'imbottitura tra la sedia e la tastiera. Se non è difficile punzecchiare come un gattino, il secondo giorno non riesco a trovare l'errore. Saluti.
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("La soluzione 1 è corretta = ",y) ;
   //-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("Decisione 2. Sbagliato = ",y) ;
  }
Per qualche motivo ho una corrispondenza. Probabilmente perché ho usato la funzione come nell'articolo.