Algoritmo per la generazione di 2 squadre a caso dalla lista giocatori in base al livello di abilità

0

Sto cercando assistenza e idee per sviluppare un algoritmo per la scelta di squadre di calcio casuali in base ai livelli di abilità dei giocatori partecipanti.
Quello che ho fino ad ora è un elenco di giocatori partecipanti con livelli di abilità arbitrari tra 1 e 100. ad es.

PlayerA: 30,
PlayerB: 45,
PlayerC: 50,
PlayerD: 55,
PlayerE: 30,
PlayerF: 20,
PlayerG: 75,
PlayerH: 75

Mi piacerebbe poter scegliere squadre casuali, ma eseguirlo di nuovo in modo efficiente per offrire risultati diversi se i team non sembrano equi (anche se sulla carta corrispondono i livelli di competenza assegnati).

Ho già codificato un esempio che crea tutte le possibili combinazioni di squadre e le ordina prima per prima, in modo tale che crei in modo efficiente la funzionalità che permetta alla persona di colpire di nuovo il pulsante "randomize" e visualizzare immediatamente nuovi team. Tuttavia, questo è adatto solo per le squadre di 7 per lato (forse 8) in quanto ci sono troppe combinazioni dopo di essa e ci vuole troppo tempo per elaborare.

Qualcuno può suggerire un modo migliore per farlo per più di 8 giocatori? Ho provato l'opzione che imita il metodo del vecchio cantiere per scegliere i giocatori prendendo i due migliori giocatori come capitani e poi ogni giocatore che prende il meglio di chi è rimasto fino a quando tutti sono stati scelti, ma poi sono rimasto perplesso se quelle squadre non fossero state Sono accettabili e volevano un'opzione per randomizzare di nuovo.

Mille grazie - lo sto codificando in C # ma la lingua è probabilmente meno importante della teoria.

    
posta e-on 04.01.2017 - 13:36
fonte

2 risposte

1

Suggerisco un approccio time-box.

  1. Genera due squadre casuali usando qualsiasi metodo tu stia usando
  2. Calcola l'abilità totale di entrambi i team e fai la differenza
  3. Se la differenza è 0, le tue squadre sono perfettamente bilanciate. Esci.
  4. Scambia due membri del team a caso e ricalcala l'abilità e la differenza totali.
  5. Se la differenza è minore, procedi con i nuovi team. Altrimenti mantieni quelli vecchi.
  6. Ripeti i passaggi 3, 4 e 5 per un numero fisso di iterazioni o una durata fissa dell'esecuzione, ad es. continua a negoziare per tre secondi o mille iterazioni.
  7. Se continui a ottenere la stessa composizione del team, riduci il numero di iterazioni. Se continui a ricevere squadre molto squilibrate, aumentala.
risposta data 06.01.2017 - 01:51
fonte
0
  1. Suddividi gli utenti in bucket (di proprietà, esperto, immediato, principiante, noob)
  2. Divide in modo casuale le persone in due squadre da ciascun segmento
  3. Qualsiasi resto lasciato da ciascun segmento viene assegnato in modo casuale.

Nota che stai cercando di rendere le cose non distorte in un modo o nell'altro e, quindi, in sostanza, non assegnando realmente i giocatori a caso. In tale scenario, indipendentemente dall'algoritmo che si sceglie, si aspetta che fallisca intorno ai casi limite. Alcuni falliranno più di altri.

Nell'algo descritto sopra, la quantità di skew (e quindi casualità) è controllata dal numero di bucket che hai durante il passaggio 1.

    
risposta data 06.01.2017 - 02:42
fonte

Leggi altre domande sui tag