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 unUnsupportedOperationException
, poiché la maggior parte delle operazioni non ha senso per unRange
. - 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; aDouble
. Chiunque utilizziRange
dovrà e a partire daDouble
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?