public override int Jouer(PositionS p, bool asj1) { sw.Restart(); Func <int, float, float> phi = (C, W) => (a + W) / (a + C); racine = new NoeudS(null, p); iter = 0; while (sw.ElapsedMilliseconds < temps) { NoeudS no = racine; do // Sélection { no.CalculMeilleurFils(phi, gen); no = no.MeilleurFils(); } while (no.cross > 0 && no.fils.Length > 0); float re = JeuHasard(no.p); // Simulation while (no != null) // Rétropropagation { no.cross += 1; no.win += re; no = no.pere; } iter++; } racine.CalculMeilleurFils(phi, gen); int rep = (asj1) ? racine.indiceMeilleurFils1 : racine.indiceMeilleurFils0; return(rep); }
public virtual float JeuHasard(PositionS p) { PositionS q = p.Clone(); while (q.NbCoups1 > 0 && q.NbCoups0 > 0) { q.EffectuerCoup(gen.Next(0, q.NbCoups1), gen.Next(0, q.NbCoups0)); } return(q.Eval); }
public override int Jouer(PositionS p, bool asj1) { //Re-ecrire méthode Jouer PositionTron pT = (PositionTron)p; int choix1 = 0; int choix0 = 0; ; string c = ""; if (asj1 == true) { Console.WriteLine("Vous avez " + pT.NbCoups1 + " coups possibles à choisir." + "Vous pouvez choisir entre 0 et " + (pT.NbCoups1 - 1) + "."); Console.WriteLine("sens comme dessous:"); if (pT.direc1[0, 0] == -1) { Console.WriteLine("Vous pouvez bouger vers le haut"); } if (pT.direc1[1, 1] == -1) { Console.WriteLine("Vous pouvez bouger à gauche"); } if (pT.direc1[2, 1] == 1) { Console.WriteLine("Vous pouvez bouger à droit"); } if (pT.direc1[3, 0] == 1) { Console.WriteLine("Vous pouvez bouger vers le bas"); } Console.WriteLine("Joueur 1, entrez votre choix !"); c = Console.ReadLine(); while (!Int32.TryParse(c, out choix1) || choix1 > pT.NbCoups1 - 1) { Console.WriteLine("Erreur Input!!!entrez votre choix correcte!!!"); c = Console.ReadLine(); Int32.TryParse(c, out choix1); } } else if (asj1 == false) { Console.WriteLine("Vous avez " + pT.NbCoups0 + " coups possibles à choisir." + "Vous pouvez choisir entre 0 et " + (pT.NbCoups0 - 1) + "."); Console.WriteLine("sens comme dessous:"); if (pT.direc0[0, 0] == -1) { Console.WriteLine("Vous pouvez bougez vers le haut"); } if (pT.direc0[1, 1] == -1) { Console.WriteLine("Vous pouvez bougez vers à gauche"); } if (pT.direc0[2, 1] == 1) { Console.WriteLine("Vous pouvez bougez vers à droit"); } if (pT.direc0[3, 0] == 1) { Console.WriteLine("Vous pouvez bougez le bas"); } Console.WriteLine("Joueur 0, donnez votre choix !"); c = Console.ReadLine(); while (!Int32.TryParse(c, out choix0) || choix1 > pT.NbCoups0 - 1) { Console.WriteLine("Erreur Input!!!entrez votre choix correcte!!!"); c = Console.ReadLine(); Int32.TryParse(c, out choix0); } } return asj1 ? choix1 : choix0; }
public NoeudSP MeilleurFils(int j) { if (fils[indiceMeilleurFils1[j], indiceMeilleurFils0[j]] != null) { return(fils[indiceMeilleurFils1[j], indiceMeilleurFils0[j]]); } PositionS q = p.Clone(); q.EffectuerCoup(indiceMeilleurFils1[j], indiceMeilleurFils0[j]); fils[indiceMeilleurFils1[j], indiceMeilleurFils0[j]] = new NoeudSP(this, q, this.N); return(fils[indiceMeilleurFils1[j], indiceMeilleurFils0[j]]); }
public NoeudS MeilleurFils() { if (fils[indiceMeilleurFils1, indiceMeilleurFils0] != null) { return(fils[indiceMeilleurFils1, indiceMeilleurFils0]); } PositionS q = p.Clone(); q.EffectuerCoup(indiceMeilleurFils1, indiceMeilleurFils0); fils[indiceMeilleurFils1, indiceMeilleurFils0] = new NoeudS(this, q); return(fils[indiceMeilleurFils1, indiceMeilleurFils0]); }
public override int Jouer(PositionS p, bool asj1) { sw.Restart(); Func <int, float, float> phi = (W, C) => (a + W) / (a + C); racine = new NoeudSP(null, p, this.N); if (racine == null) { racine = new NoeudSP(null, p, this.N); } else { racine = racine.MeilleurFils(0); for (int i = 0; i < racine.p.NbCoups1 - 1; i++) { for (int j = 0; j < racine.p.NbCoups1 - 1; j++) { if ((racine.fils[i, j] != null) && (racine.fils[i, j].p.Equals(p))) { racine = racine.fils[i, j]; break; } } } } int iter = 0; while (sw.ElapsedMilliseconds < temps) { this.TaskList = new List <Task>(); NoeudSP no = racine; for (int i = 0; i < this.N; i++) { int j = i; this.TaskList.Add(Task.Run(() => Calcul(no, phi, j))); iter++; } Task.WaitAll(this.TaskList.ToArray()); } Console.WriteLine("{0} itérations", iter); Console.WriteLine(racine); racine.CalculMeilleurFils(phi, gen[N - 1]); int rep = (asj1) ? racine.indiceMeilleurFils1[0] : racine.indiceMeilleurFils0[0]; return(rep); }
public NoeudSP(NoeudSP pere, PositionS p, int nb_thread) { this.pere = pere; // this.p = p; // this.fils = new NoeudSP[this.p.NbCoups1, this.p.NbCoups0]; // this.N = nb_thread; this.win = new int[nb_thread]; this.cross = new int[nb_thread]; for (int i = 0; i < N; i++) { this.win[i] = 0; this.cross[i] = 0; } this.indiceMeilleurFils1 = new int[nb_thread]; this.indiceMeilleurFils0 = new int[nb_thread]; }
public override int Jouer(PositionS p, bool asj1) { sw.Restart(); Func <int, float, float> phi = (W, C) => (a + W) / (a + C); racine = new NoeudS(null, p); int iter = 0; int totale_re; while (sw.ElapsedMilliseconds < temps) { this.TaskList = new List <Task <int> >(); totale_re = 0; NoeudS no = racine; do // Sélection { no.CalculMeilleurFils(phi, gen[N - 1]); no = no.MeilleurFils(); } while (no.cross > 0 && no.fils.Length > 0); for (int i = 0; i < this.N; i++)//simulation { int j = i; TaskList.Add(Task.Run(() => JeuHasard(no.p, j))); } Task.WaitAll(TaskList.ToArray()); for (int i = 0; i < TaskList.Count; i++) { totale_re += TaskList[i].Result; } while (no != null) // Rétropropagation { no.cross += this.N * 2; no.win += totale_re; no = no.pere; } iter++; } racine.CalculMeilleurFils(phi, gen[N - 1]); int rep = (asj1) ? racine.indiceMeilleurFils1 : racine.indiceMeilleurFils0; return(rep); }
int JeuHasard(PositionS p, int i) { PositionS q = p.Clone(); int re = 1; while (q.NbCoups1 > 0 && q.NbCoups0 > 0) { q.EffectuerCoup(gen[i].Next(0, q.NbCoups1), gen[i].Next(0, q.NbCoups0)); } if (q.Eval < 0) { re = -1; } if (q.Eval > 0) { re = 1; } return(re); }
public void NouveauMatch(PositionS pInitiale) { pCourante = pInitiale.Clone(); }
//Constructeur de la classe PartieS public PartieS(JoueurS j1, JoueurS j0, PositionS pInitiale) { this.j1 = j1; this.j0 = j0; pCourante = pInitiale.Clone(); }
public abstract int Jouer(PositionS p, bool asj1);
public override int Jouer(PositionS p, bool asj1) { return asj1 ? gen.Next(p.NbCoups1) : gen.Next(p.NbCoups0); }
public NoeudS(NoeudS pere, PositionS p) { this.pere = pere; this.p = p; fils = new NoeudS[this.p.NbCoups1, this.p.NbCoups0]; }