Domanda

Nel nostro ufficio, ci godiamo regolarmente alcuni round di calcio balilla / calcio balilla dopo il lavoro. Ho messo insieme un piccolo programma Java che genera formazioni casuali 2vs2 dai giocatori disponibili e memorizza i risultati delle partite in un database in seguito.

La previsione attuale del risultato utilizza una media semplice di tutti i risultati delle partite precedenti dei 4 giocatori coinvolti. Questo dà una stima molto approssimativa, ma vorrei sostituirlo con qualcosa di più sofisticato, tenendo conto di cose come:

  • i giocatori possono essere bravi a giocare come attaccanti ma cattivi come difensore (o viceversa)
  • i giocatori fanno bene contro un avversario specifico / cattivi contro gli altri
  • alcuni team lavorano bene insieme, altri no
  • le abilità cambiano nel tempo

Quale sarebbe l'algoritmo migliore per prevedere i risultati del gioco nel modo più accurato possibile?

Qualcuno ha suggerito di utilizzare una rete neurale per questo, che sembra abbastanza interessante ... ma non ho abbastanza conoscenze sull'argomento per dire se potrebbe funzionare, e sospetto anche che potrebbero essere necessari troppi giochi per essere ragionevolmente allenati .

EDIT:
Ho dovuto fare una pausa più lunga da questo a causa di alcune scadenze del progetto. Per rendere la domanda più specifica:

Dato il seguente tavolo mysql contenente tutte le partite giocate finora:

table match_result

match_id      int pk
match_start   datetime
duration      int (match length in seconds)
blue_defense  int fk to table player
blue_attack   int fk to table player
red_defense   int fk to table player
red_attack    int fk to table player
score_blue    int
score_red     int

Come scrivere una funzione predictResult (blueDef, blueAtk, redDef, redAtk) {...}
stimare il risultato il più vicino possibile, eseguendo sql, facendo calcoli o usando librerie esterne?

È stato utile?

Soluzione

Utilizza l'algoritmo TrueSkill, è molto bravo in questo. L'ho implementato per il calcio balilla e gli scacchi e funziona molto bene. I colleghi mi hanno detto che è quasi troppo bravo in questo.

Per i dettagli completi su come funziona e un link alla mia implementazione, vedi il mio " Computing Your Skill " post del blog.

Altri suggerimenti

Perché usare una rete neuronale? Usa le statistiche, probabilmente la correlazione tra ciascun giocatore sarebbe una buona misura.

Giusto per iniziare, raccogliamo alcune informazioni: Per un determinato giocatore abbiamo bisogno di:

  1. la posizione che hanno giocato
  2. il punteggio finale

Un buon attaccante accumulerà punti. Un buon difensore eviterà che i punti vengano segnati.

Le informazioni reali verranno da un buon attaccante che gioca contro un buon difensore.

Prova ad applicare il classificatore Naive Bayes.

  

L'apprendimento bayesiano è probabilistico   approccio basato su un   supponiamo che le quantità di   gli interessi sono regolati dalla probabilità   distribuzioni e quella ottimale   le decisioni possono essere prese ragionando   di queste probabilità insieme   con i dati osservati. [Mitchell, T.   (1997), Apprendimento automatico]

La stessa esatta distribuzione dei giocatori può comportare risultati di partita diversi. Se i tuoi dati contengono un modello, un modello basato sulle tue variabili, il classificatore Naive Bayes può produrre buoni risultati.

L'algoritmo non è molto complesso. Penso che uno con qualche conoscenza in probabilità, possa capire & amp; applicalo.

Nei sistemi di rilevamento delle intrusioni, viene utilizzato per determinare le anomalie della rete, esaminando vari parametri di rete. L'approccio bayesiano può avere molto successo in particolari tipi di dati e produrre alti TP & amp; bassi tassi di FP. Ma può anche comportare alte percentuali di FP, a seconda dei dati. I tuoi dati determineranno l'approccio migliore.

Puoi usare Weka ( http: //www.cs.waikato. ac.nz/~ml/weka/ ), una libreria di software di data mining e provare diversi algoritmi. Contiene il classificatore Naive Bayes. Basta provare e vedere.

Un'opzione sarebbe quella di provare a indovinare la diffusione del punto come una sorta di modello lineare . Se hai più partite che giocatori, puoi fare un minimo di quadrati di punti per giocatore costruendo una matrice di giochi (+1 per giocatore in una squadra, -1 per l'altra, 0 per spettatore) per tutte le partite e un risultato vettore per gli spread.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top