Nuovi nodi che si uniscono all'algoritmo genetico distribuito

0

Sono un po 'lacerato su cosa fare per l'implementazione del mio problema dell'algoritmo genetico distribuito. Mi piacerebbe essere in grado di far entrare e far parte dei nodi a volontà e non di rimuovere l'intero sistema. Ma questo introduce il problema della mancata corrispondenza delle generazioni. Spesso le simulazioni di un algoritmo genetico sono limitate da una certa quantità di generazioni e se ho un nodo che si trova su 75 su 100 generazioni e un nuovo nodo si unisce al cluster non sono sicuro se dovrei fingere e iniziare a 75 e copiare uno degli altri nodi come punto di partenza o farlo partire a 0 e potenzialmente ritardare i risultati fino alla fine dell'esecuzione del nuovo nodo. Speravo che qualcuno avesse un input su ciò che potevano vedere come problemi oltre a un lungo tempo di attesa con questo nuovo nodo se partivo da 0, sto facendo fatica a pensare a cosa potrebbe andare storto in entrambi gli approcci diversi da quello.

    
posta csteifel 02.10.2013 - 13:20
fonte

3 risposte

2

Il mio consiglio è di solito mai utilizzare il conteggio delle generazioni come criterio di rendimento o criterio di terminazione. A parte il problema che stai affrontando, è troppo dipendente dalla dimensione della popolazione per essere di grande utilità. Non puoi confrontare le corse, perché se il tuo GA ha una popolazione di 10 e il mio ha una popolazione di 10.000 allora ovviamente il mio sarà migliore del tuo su un numero fisso di generazioni, come si ottiene fare 1000 volte più ricerche.

Interrompi semplicemente il GA dopo un numero fisso di valutazioni. Quando un nuovo nodo si unisce, inizia a contribuire al conteggio delle valutazioni globali. Se si desidera alleviare un sovraccarico di comunicazione, lasciare che ciascun nodo memorizzi localmente un numero limitato di valutazioni e quindi periodicamente le facciano incrementare il contatore globale in base alle numerose valutazioni eseguite dall'ultimo aggiornamento. Quando il conteggio globale supera il limite, basta terminare tutti i nodi e restituire la risposta.

    
risposta data 02.10.2013 - 14:08
fonte
1

Quindi ... un nodo è una raccolta di popolazione GA da un altro computer, quindi l'aspetto distribuito? E stai chiedendo come unire le popolazioni?

Per trarre il massimo vantaggio dalla distribuzione del calcolo, è necessario unire le popolazioni. Sei preoccupato di unire le popolazioni con una quantità di tempo e potenza di elaborazione diversi. E sì, la popolazione più giovane probabilmente non sarà così avanzata o in forma quanto la popolazione più anziana. Può essere.

Se aggiungi un nodo con una popolazione che ha avuto zero generazioni, in pratica hai una raccolta di rifiuti casuali senza che vengano applicate forze selettive e nessuna evoluzione. Ma non hai sprecato tempo di elaborazione. Hai letteralmente sprecato tempo zero per evolversi e averli tutti eliminati all'istante non è una grande perdita.

Se aggiungi un nodo con, diciamo, metà delle generazioni del tuo gruppo principale, allora lo guardano (circa a occhio) circa la metà delle probabilità di aggiungere qualcosa di significativo alla popolazione nel suo complesso. Ma hey, potrebbero.

Beneficiate di avere nodi separati avendo diversi tentativi di risolvere lo stesso problema. Allarga la tua ricerca, se non aggiungi profondità. Si spera che uno di loro diventi fortunato e fornisca una spinta perspicace all'insieme. E protegge da monoculture che rimangono bloccate sui massimi locali. Non vuoi essere fuori moda e avere la tua intera popolazione identica. Se hai uno spazio di ricerca semplice ed è tutto solo in salita, allora la distribuzione della GA probabilmente non aiuta molto. Se si tratta di uno spazio di ricerca complesso e ci sono un sacco di massimi locali su GA per rimanere bloccati, la GA distribuita può essere d'aiuto.

Ma quando si uniscono, si seleziona ancora in base alla loro forma fisica. Se invii un nodo a quell'antico 486 nell'angolo, e il giorno dopo passa solo a 2 generazioni mentre la tua server farm è sulla sua 10.000a generazione, probabilmente non sta contribuendo a nulla di valore. Tutta la sua popolazione verrà buttata fuori. E giustamente, tutta la popolazione non fa nulla per far avanzare la soluzione attuale.

    
risposta data 02.10.2013 - 18:18
fonte
0

start out at 0 and potentially have the results delayed until the end of execution of the new node.

Questo potrebbe renderlo arbitrariamente lento: un altro nodo potrebbe unirsi quando sei appena arrivato e così via ...

Il modo più semplice è buttare via l'idea della generazione intera:

  • In realtà, non ci sono nemmeno generazioni, solo individui più vecchi e nuovi, nessun master clock.
  • Non ci sono prove di alcun vantaggio dell'approccio generazionale.

A meno che tu non voglia esattamente imitare un algoritmo esistente, limitati semplicemente al tuo per il numero totale di individui. Cerca di utilizzare i nodi nel modo più efficiente in base alla loro disponibilità.

    
risposta data 02.10.2013 - 14:05
fonte