Come può il mio algoritmo genetico accettare un numero arbitrario di basi di qualsiasi tipo, senza accettare una lista?

2

Sfondo:

Sto scrivendo un algoritmo genetico da utilizzare per controllare i pesi di una rete neurale.

Per specificare le basi ("bit" del codice) del "DNA", sto permettendo al chiamante di passare in List<T> di tutte le possibili basi. Quando ho bisogno di mutare una base o generare una sequenza casuale, sarà basata su questo passato List .

Quindi qual è il problema?

Fino ad ora non me ne ero reso conto, ma la rete neurale potrebbe richiedere una massiccia List di pesi possibili (forse migliaia di basi diverse, il nostro DNA ha 4 ). Ovviamente, il passaggio di un List che in realtà contiene ogni possibile base sarebbe molto inefficiente; potrebbe potenzialmente essere enorme.

La mia "soluzione" era implementare una classe Range che implementa List che può rappresentano tutte le basi possibili memorizzando solo 3 numeri (assumendo che seguano uno schema regolare). Il mio tentativo è su CR qui: Recensione del codice intervallo .

Risolve il problema, ma ha i suoi problemi:

  • Implementa a malapena List ; metà dei metodi richiesti lancia un UnsupportedOperationException , poiché la maggior parte delle operazioni non ha senso per un Range .
  • Dato che Java non sembra avere un'interfaccia Number utilizzabile che consenta la matematica, sto usando il tipo di numero più "generale" che potrei pensare; a Double . Chiunque utilizzi Range dovrà e a partire da Double se sta utilizzando un altro tipo.
  • Il contenitore è soggetto a errori in virgola mobile poiché l'intero "contenitore" fa molto affidamento sulla matematica per ottenere elementi.

La mia domanda:

Devo essere in grado di consentire all'utente dell'algoritmo genetico di specificare le basi che vogliono che utilizzi. Le basi potrebbero essere di qualsiasi tipo e ci potrebbe essere un numero qualsiasi di possibili basi.

Come posso consentire loro di specificare tutte le possibili basi senza usare un potenziale inefficiente come memorizzare ogni possibile base in modo esplicito in una lista?

    
posta Carcigenicate 12.07.2015 - 19:54
fonte

1 risposta

1

Crea un'interfaccia per le funzionalità necessarie per le basi o utilizza un'interfaccia già esistente.

Hai solo bisogno di generare nuove basi casuali? Crea un'interfaccia per farlo

interface BaseGenerator<T> {
    T randomBase();
}

o utilizza un'interfaccia già esistente, come Supplier<T> .

Chromosome<T> mutate(Chromosome<T> old, Supplier<T> randomBaseGenerator) {
    [...]
}
    
risposta data 12.07.2015 - 22:36
fonte

Leggi altre domande sui tag