public override void Initialize(GameIA gameTmp) { Main = new List <Domino>(); game = gameTmp; nbDominoInitial = game.players.Length > 2?6:7; nbPiocheInitial = game.Dominos.Count - game.players.Length * nbDominoInitial; nbPioche = 0; EnemyPossibleMains = new Dictionary <Player, List <DominoProbabilite> >(); while (Main.Count < nbDominoInitial) { var index = GameIA.rnd.Next(game.Pioche.Count); var domino = game.Pioche[index]; game.Pioche.RemoveAt(index); Main.Add(domino); } var possibleDominos = game.Dominos.Where(d => !Main.Contains(d)); foreach (var e in game.players) { if (e != this) { EnemyPossibleMains[e] = new List <DominoProbabilite>(); foreach (var d in possibleDominos) { EnemyPossibleMains[e].Add(new DominoProbabilite(d, (double)nbDominoInitial / (double)possibleDominos.Count())); } } } PiocheProbalibites = new List <DominoProbabilite>(); foreach (var d in possibleDominos) { PiocheProbalibites.Add(new DominoProbabilite(d, (double)nbPiocheInitial / (double)possibleDominos.Count())); } }
public void Evaluate() { Dictionary <string, HashSet <string> > playedMatches = new Dictionary <string, HashSet <string> >(); for (int i = 0; i < GENETIQUE_ITERATION; i++) { // Selection de celui qui à fait le moins de match var gamePlayers = SelectPlayers(playedMatches); // 100 games Dictionary <string, int> nbWin = new Dictionary <string, int>(); foreach (var p in gamePlayers) { nbWin[p.pl.id] = 0; } Parallel.For(0, GAME_ITERATION, new ParallelOptions { MaxDegreeOfParallelism = MAX_DEGREE_PARALLEL }, k => { GameIA game = new GameIA(50, 6, gamePlayers.Select(p => p.pl).ToArray()); var winnersGame = game.Run(); var winnerlist = winnersGame.Select(w => w.id); lock (syncObj) { foreach (var win in winnersGame) { nbWin[win.id] += 1; } } }); // Mise à jour du classement var winners = nbWin.GroupBy(x => x.Value).OrderByDescending(x => x.Key).First(); var wins = winners.Select(x => x.Key); foreach (var win in winners) { classement[win.Key].won += 1; foreach (var p in nbWin.Where(x => !wins.Contains(x.Key))) { classement[win.Key].wonGames.Add(new Tuple <string, int>(p.Key, win.Value)); classement[p.Key].lostGames.Add(new Tuple <string, int>(win.Key, p.Value)); } } } }