(AI) algoritmo per ottimizzare i parametri di input

0

Informazioni di base

Sto costruendo un programma che giochi a dama il meglio possibile. Gioca già piuttosto bene, ma l'obiettivo è migliorarlo ancora di più.

Questo può essere fatto aggiungendo nuovi metodi per valutare quanto "buono" sia un determinato stato della scheda. Ho già implementato questi metodi, ma ognuno dei metodi ha un parametro con il quale può essere moltiplicato.

Ho già implementato il fatto che posso permettere al programma di giocare contro se stesso e l'esito del gioco è un numero che è positivo se il giocatore vince (o gioca un pareggio con un vantaggio in pezzi), un numero negativo se il il giocatore perde (o gioca un pareggio con un vantaggio in pezzi) o 0 se disegna e i pezzi sono uguali.

Domanda

Ho 3 parametri che possono variare da 0 a 1. Devo trovare una combinazione di questi 3 parametri che devono essere quanti più numeri possibile dopo la virgola e devono essere calcolati il più velocemente possibile.

Posso lasciare giocare 2 diversi set di parametri con un risultato positivo se il primo set di parametri ha un vantaggio (maggiore è il numero positivo, maggiore è il vantaggio), negativo se il secondo set di parametri ha un vantaggio e 0 se hanno entrambi lo stesso tipo di vantaggio.

E.g .: (0.232, 1, 0.62) contro (0.12345, 0.71, 0) può emettere 1.32987, il che significa che il primo set di parametri ha un vantaggio. Tieni conto che richiede circa 2 minuti per ottenere un risultato di 2 set che giocano uno contro l'altro!

Mi piacerebbe conoscere un algoritmo / letteratura / parole chiave / esempi di come posso trovare un insieme il più preciso possibile di numeri che vince contro tutti gli altri gruppi di numeri?

Statistiche

Ho già eseguito alcuni test e ho scoperto che probabilmente (non sono sicuro) per ciascun parametro l'effetto sarà che i risultati miglioreranno fino a che non raggiungeranno un picco e che vadano a mancare ancora una volta.

    
posta Stan Callewaert 23.11.2017 - 09:56
fonte

2 risposte

3

Consiglierei di provare diversi algoritmi standard per l'ottimizzazione delle funzioni non differenziabili e vedere come funziona. Fuori di testa, in crescente complessità:

risposta data 23.11.2017 - 12:53
fonte
2

SMAC , Configurazione algoritmo basato su modello sequenziale, è un approccio relativamente recente a questo problema. Potrebbe essere eccessivo. È finalizzato allo scenario in cui la valutazione di una particolare configurazione è molto costosa. Molti approcci tradizionali di ottimizzazione dei parametri presumono che valutare una particolare scelta di parametri non sia così costoso. Esiste un'implementazione per Python .

L'idea di alto livello di SMAC è quella di costruire un modello predittivo delle prestazioni dell'algoritmo per vari parametri di configurazione (questa è la parte "basata sul modello") e di aggiornare e migliorare quel modello quando nuove istanze sono valutato (questa è la parte "sequenziale"). Il modello predittivo consente di guidare la scelta della configurazione da provare successivamente in modo che la maggior parte delle informazioni possa essere acquisita con il minor numero di valutazioni. Certo, sono i dettagli di questo a rendere SMAC.

Altri lavori di Frank Hutter , uno dei lead su SMAC, è anche rilevante e interessante. Ha lavorato su sistemi precedenti ma ancora rilevanti come ParamILS . Anche il lavoro strettamente correlato ma non di Hutter è Algoritmi genetici basati sul genere (GGA).

Se sei molto interessato a utilizzare questo tipo di strumenti, potresti trovare insidie e best practice nella configurazione dell'algoritmo interessanti.

    
risposta data 24.11.2017 - 06:20
fonte