public override int Jouer(PositionS p, bool asj1) { PositionP4S p4 = (PositionP4S)p; int k; do { Console.WriteLine("Choisissez la colonne pour les {0} :", asj1 ? "rouges" : "bleus"); string s = Console.ReadLine(); k = -10; if (s.Length == 1) { k = s[0] - 'a' + 1; } }while (k < 1 || k > PositionP4S.nbCo || p4.cases[0][-1 + k * PositionP4S.nbLi] || p4.cases[1][-1 + k * PositionP4S.nbLi] || p4.cases[2][-1 + k * PositionP4S.nbLi]); k--; int rep = 0; for (int i = 1; i <= k; i++) //b * nbLi + a { if (!p4.cases[0][-1 + i * PositionP4S.nbLi] && !p4.cases[1][-1 + i * PositionP4S.nbLi] && !p4.cases[2][-1 + i * PositionP4S.nbLi]) { rep++; } } return(rep); }
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 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 NoeudS(NoeudS pere, PositionS p) { this.pere = pere; this.p = p; fils = new NoeudS[this.p.NbCoups1, this.p.NbCoups0]; }
public override int Jouer(PositionS p, bool asj1) { return(asj1 ? gen.Next(p.NbCoups1) : gen.Next(p.NbCoups0)); }
public void NouveauMatch(PositionS pInitiale) { pCourante = pInitiale.Clone(); }
public PartieS(JoueurS j1, JoueurS j0, PositionS pInitiale) { this.j1 = j1; this.j0 = j0; pCourante = pInitiale.Clone(); }