Quanti parametri ci sono - ad esempio, quante dimensioni nello spazio di ricerca? Sono continui o discreti, ad es. Numeri reali o interi o solo pochi valori possibili?
Gli approcci che ho visto usati per questo tipo di problemi hanno una struttura generale simile: prendi un gran numero di punti campione e li aggiusti tutti verso regioni che hanno in qualche modo risposte "buone". Dato che hai molti punti, le loro differenze relative fungono da gradiente improvvisato.
- Simulated Annealing: L'approccio classico. Prendi un po 'di punti, spostali in qualche modo in un punto vicino scelto a caso a seconda di quanto meglio è.
- Particle Swarm Optimization: Prendi uno "sciame" di particelle con velocità nello spazio di ricerca, muovendo a caso una particella in modo probabilistico; se è un miglioramento, fai sapere a tutto lo sciame.
- Genetic Algorithms: questo è un po 'diverso. Piuttosto che usare le informazioni dei vicini come sopra, ottieni sempre i migliori risultati e "incrocia" sperando di ottenere le migliori caratteristiche di ciascuno.
I collegamenti di Wikipedia hanno uno pseudocodice per i primi due; I metodi GA hanno così tanta varietà che è difficile elencare solo un algoritmo, ma puoi seguire i link da lì. Nota che esistono implementazioni per tutto quanto sopra che puoi usare o prendere come punto di partenza.
Si noti che tutti questi - e in realtà qualsiasi approccio a questo algoritmo di ricerca di grandi dimensioni - sono euristici, il che significa che hanno parametri che devono essere sintonizzati sul problema specifico. Quale può essere noioso.
A proposito, il fatto che la valutazione della funzione sia così costosa può essere fatta funzionare un po 'per voi; poiché tutti i metodi sopra citati comportano molte valutazioni indipendenti delle funzioni, tale parte dell'algoritmo può essere banalmente parallelizzata con OpenMP o qualcosa di simile per utilizzare tutti i core presenti sulla macchina.
fonte
2010-10-10 14:47:32
Potrebbe pubblicare il modello funzionale? E, se possibile, fornire un suggerimento su cosa stai cercando di modellare ... –
@belisarius I parametri sono fattori di modifica in un'IA progettata per riprodurre un gioco specifico. Ad esempio, per ottimizzare la funzione che valuta un "livello di minaccia" per una determinata posizione. Il passaggio "valuta" nella mia ottimizzazione produce il numero di volte in cui l'IA in fase di sviluppo vince contro un set fisso di altre IA su un set fisso di mappe. (Sono consapevole che questo lo ottimizza davvero contro questi specifici avversari su queste mappe specifiche, ma spero che ci siano troppi fattori di modifica per avere uno scopo di over-fit) –