예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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]);
        }
예제 #5
0
 public NoeudS(NoeudS pere, PositionS p)
 {
     this.pere = pere;
     this.p    = p;
     fils      = new NoeudS[this.p.NbCoups1, this.p.NbCoups0];
 }
예제 #6
0
파일: JH.cs 프로젝트: sgsarbere/SandeepS
 public override int Jouer(PositionS p, bool asj1)
 {
     return(asj1 ? gen.Next(p.NbCoups1) : gen.Next(p.NbCoups0));
 }
예제 #7
0
 public void NouveauMatch(PositionS pInitiale)
 {
     pCourante = pInitiale.Clone();
 }
예제 #8
0
 public PartieS(JoueurS j1, JoueurS j0, PositionS pInitiale)
 {
     this.j1   = j1;
     this.j0   = j0;
     pCourante = pInitiale.Clone();
 }