示例#1
0
 /// <summary>Updates the record and calculate the winning chance if possible.</summary>
 public void Update(GameState state, MT19937Generator rnd)
 {
     foreach (var record in this.Where(r => state.Round == r.Round))
     {
         record.Update(state, rnd);
     }
 }
示例#2
0
        public void Distribution_SomRuns_ShouldBeFairlyEqual()
        {
            var distribution = new Dictionary <Card, int[]>();

            foreach (var card in Cards.Deck)
            {
                distribution[card] = new int[9];
            }

            var runs = 52 * 100;
            var rnd  = new MT19937Generator(17);

            for (var run = 0; run < runs; run++)
            {
                var shuffle = Cards.GetShuffledDeck(rnd);

                var i = 0;
                foreach (var card in shuffle.Take(9))
                {
                    distribution[card][i++]++;
                }
            }

            foreach (var kvp in distribution)
            {
                Console.WriteLine("{0}\t{1}", kvp.Key, String.Join("\t", kvp.Value));
            }
        }
        public GameAction Action(GameState state, MT19937Generator rnd)
        {
            if (state.Own.Stack <= 0)
            {
            }

            var pWin = PokerHandEvaluator.Calculate(state.Own.Hand, state.Table, rnd, 10);

            // Only play doable small blinds.
            if (state.IsPreFlop && pWin < 0.4 && state.AmountToCall > 0)
            {
                return(GameAction.Fold);
            }
            if (state.MaxinumRaise > 0)
            {
                if (pWin > 0.55 && state.AmountToCall == 0)
                {
                    return(GameAction.Raise(state.MaxinumRaise));
                }
                if (pWin > 0.7)
                {
                    return(GameAction.Raise(state.MaxinumRaise));
                }
            }
            if (pWin < 0.35 && state.AmountToCall > 0)
            {
                return(GameAction.Fold);
            }

            return(GameAction.CheckOrCall(state));
        }
示例#4
0
        static void Main(string[] args)
        {
            var rnd = new MT19937Generator();

            while (true)
            {
                Console.WriteLine("[M]manual - [R]andom - Monte [C]arlo - [Q]uit");
                bool valid = false;
                while (!valid)
                {
                    valid = true;
                    switch (Console.ReadKey().Key)
                    {
                    case ConsoleKey.R: Play(rnd, new RandomSolver(rnd), TimeSpan.Zero, 100000, false, @"C:\code\game-2048\logs\randomsolver.log"); break;

                    case ConsoleKey.C: Play(rnd, new MonteCarloSolver(rnd), TimeSpan.FromMilliseconds(50), 200, false, @"C:\code\game-2048\logs\MonteCarloSolver.log"); break;

                    case ConsoleKey.M: PlayManual(rnd); break;

                    case ConsoleKey.Q: return;

                    default:
                        valid = false;
                        break;
                    }
                }
            }
        }
示例#5
0
        public List <BattlePairing> GetPairings(MT19937Generator rnd)
        {
            lock (locker)
            {
                var best   = GetHighestElo();
                var stable = GetHighestStableElo();

                var pairings = new List <BattlePairing>();

                // if the best is not the best stable, only pair the top unstable.
                if (best != stable && stable != null)
                {
                    foreach (var bot in GetUnstable().Where(b => b.Elo >= stable.Elo))
                    {
                        pairings.AddRange(PairOther(bot));
                    }
                }
                else
                {
                    // Pair best.
                    pairings.AddRange(PairOther(best));
                    // Pair random.
                    pairings.AddRange(GetRandomPairings(rnd));

                    // Pair unstable.
                    foreach (var bot in GetUnstable())
                    {
                        pairings.AddRange(PairOther(bot));
                    }
                }
                return(pairings);
            }
        }
        private Cell[] WorkerAsynchronousEvolutionStep(int row, int colFrom, int colTo)
        {
            AbstractGenerator randomGenerator = new MT19937Generator();
            Cell cell;
            IEnumerable <Cell> neighborhood;
            Tuple <Cell, Cell> parents;
            Cell offspring;

            int index = 0;

            Cell[] result = new Cell[colTo - colFrom];

            for (int col = colFrom; col < colTo; col++)
            {
                cell         = GetAt(row, col);
                neighborhood = GetNeighborhood(row, col, NeighborhoodSelectionMethod);

                parents   = Operators.SelectParents(neighborhood);
                offspring = Operators.Reproduction(col, row, parents, randomGenerator);

                if (ReplaceMethod == ReplaceType.ReplaceWorstInNeighbourhood)
                {
                    offspring.ToReplace = neighborhood.First(n => n.GetFitness() == neighborhood.Min(x => x.GetFitness())).Location;
                }
                else if (ReplaceMethod == ReplaceType.ReplaceOneParent)
                {
                    offspring.ToReplace = randomGenerator.NextBoolean() ? parents.Item1.Location : parents.Item2.Location;
                }
                result[index++] = offspring;
            }
            return(result);
        }
示例#7
0
        /// <summary>Starts a new round.</summary>
        /// <param name="rnd">
        /// The randomizer to shuffle the deck.
        /// </param>
        public bool StartNewRound(MT19937Generator rnd)
        {
            this.Round++;
            var deck = Cards.GetShuffledDeck(rnd);

            this.Player1.Hand = Cards.Create(deck.Take(4));
            this.Player2.Hand = Cards.Create(deck.Skip(4).Take(4));
            this.Table        = Cards.Create(deck.Skip(8).Take(5));
            this.OnButton     = this.OnButton.Other();

            if (this.Round > 1 && this.Round % HandsPerLevel == 1)
            {
                this.SmallBlind += 5;
            }

            if (Player1.Stack < BigBlind || Player2.Stack < BigBlind)
            {
                return(false);
            }

            Button.Post(this.SmallBlind);
            Blind.Post(this.BigBlind);

            return(true);
        }
示例#8
0
        private MT19937Seed()
        {
            // Get a random number for the seed
            MT19937Generator r  = new MT19937Generator();
            StringBuilder    sb = new StringBuilder();

            const Int32  SEED_STRING_LENGTH     = 20;
            const String SEED_STRING_CHARACTERS = "1234567890";

            for (Int32 index = 0; index < SEED_STRING_LENGTH; ++index)
            {
                sb.Append(SEED_STRING_CHARACTERS[r.Next(0, SEED_STRING_CHARACTERS.Length)]);
            }

            String seedString = sb.ToString();

            Byte[] seedStringArray = Encoding.ASCII.GetBytes(seedString);
            Byte[] hashArray       = MT19937Seed.mSha512.ComputeHash(seedStringArray);

            MT19937Generator random      = new MT19937Generator(hashArray.ToUInt32Array());
            String           alpha26Seed = seedString.ToUInt64Hash().ToAlphaBase26();

            this.mRandom          = random;
            this.mSeedAlphaBase26 = alpha26Seed;
            this.mSeedString      = seedString;
        }
示例#9
0
        private async void AnimatedLoot()
        {
            MT19937Generator rand;

            if (SEED_VALUE_GLOBAL != -1)
            {
                rand = new MT19937Generator(SEED_VALUE_GLOBAL);
            }
            else
            {
                rand = new MT19937Generator();
            }

            lbl_processing.Visible = false;

            for (int itemCount = 0; itemCount < num_nbrOfItems.Value; itemCount++)
            {
                GenerateASingleItem(rand);

                if (itemCount != num_nbrOfItems.Value - 1)
                {
                    await Task.Delay(1000);
                }
            }

            lbl_processing.Visible = true;
        }
示例#10
0
        public Bot[] CreatePair(MT19937Generator rnd, double k)
        {
            var bots = new Bot[2];

            var f = rnd.Next(2);
            var s = f == 1 ? 0 : 1;

            var selected = GetSelectedBot();

            if (selected != null)
            {
                bots[f] = selected;
                bots[s] = this.GetActive().Where(bot => !bot.IsSelected).OrderBy(bot => rnd.Next()).FirstOrDefault();
                return(bots);
            }

            var stable   = GetStable(k).ToList();
            var unstable = GetUnstable(k).ToList();

            // pair a stable and an unstabel
            if (stable.Count > 0 && unstable.Count > 0)
            {
                bots[f] = stable[rnd.Next(stable.Count)];
                bots[s] = unstable[rnd.Next(unstable.Count)];
            }
            else
            {
                var random = GetActive().OrderBy(b => rnd.Next()).ToList();
                bots[f] = random[0];
                bots[s] = random[1];
            }
            return(bots);
        }
示例#11
0
        internal MemoryStream EncodeMdf(Stream stream, string key, uint?keyLength)
        {
            //var bts = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("1232ab23478cdconfig_info.psb.m"));
            var bts = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(key));

            uint[] seeds = new uint[4];
            seeds[0] = BitConverter.ToUInt32(bts, 0);
            seeds[1] = BitConverter.ToUInt32(bts, 1 * 4);
            seeds[2] = BitConverter.ToUInt32(bts, 2 * 4);
            seeds[3] = BitConverter.ToUInt32(bts, 3 * 4);

            MemoryStream ms  = new MemoryStream((int)stream.Length);
            var          gen = new MT19937Generator(seeds);

            BinaryReader br = new BinaryReader(stream);
            BinaryWriter bw = new BinaryWriter(ms, Encoding.UTF8, true);

            bw.Write(br.ReadBytes(8));
            //uint count = 0;
            List <byte> keys = new List <byte>();

            if (keyLength != null)
            {
                for (int i = 0; i < keyLength / 4 + 1; i++)
                {
                    keys.AddRange(BitConverter.GetBytes(gen.NextUIntInclusiveMaxValue()));
                }

                keys = keys.Take((int)keyLength.Value).ToList();
            }
            else
            {
                while (keys.Count < br.BaseStream.Length)
                {
                    keys.AddRange(BitConverter.GetBytes(gen.NextUIntInclusiveMaxValue()));
                }
            }

            int currentKey = 0;

            while (br.BaseStream.Position < br.BaseStream.Length)
            {
                var current = br.ReadByte();
                if (currentKey >= keys.Count)
                {
                    currentKey = 0;
                }

                current ^= keys[currentKey];
                currentKey++;

                //if (keyLength == null || (count < keyLength.Value))
                //{
                //    current ^= gen.NextUIntInclusiveMaxValue();
                //}
                bw.Write(current);
            }

            return(ms);
        }
示例#12
0
 public NodeDecisionMaker(MT19937Generator rnd)
 {
     MaximumDepth    = int.MaxValue;
     MinimumDuration = TimeSpan.MaxValue;
     MaximumDuration = TimeSpan.MaxValue;
     Rnd             = rnd;
 }
示例#13
0
 public void Calculate(MT19937Generator rnd)
 {
     // if a hand was revealed, calculate the winning change.
     if (this.HandOpp != null && this.HandOpp.Count > 0 && double.IsNaN(WinningChance))
     {
         this.WinningChance = 1.0 - PokerHandEvaluator.Calculate(this.HandOpp, this.Table ?? Cards.Empty, rnd, 200);
     }
 }
示例#14
0
        /// <summary>Gets a new shuffled deck.</summary>
        public static Cards GetShuffledDeck(MT19937Generator rnd = null)
        {
            var deck = Cards.Empty;

            rnd = rnd ?? s_Rnd;
            deck.AddRange(Deck.OrderBy(c => rnd.Next()));
            return(deck);
        }
示例#15
0
 /// <summary>Update a record.</summary>
 public void Update(GameState state, MT19937Generator rnd)
 {
     if (state.Opp.Hand.Count > 0)
     {
         this.HandOpp = state.Opp.Hand.Copy();
     }
     Calculate(rnd);
 }
示例#16
0
 public AppState(string id, DirectoryInfo location, NameTypes nameTypes)
 {
     Id              = string.IsNullOrWhiteSpace(id) ? "Unknown" : id;
     Location        = location ?? new DirectoryInfo(".");
     NameTypes       = nameTypes;
     CurrentNameType = nameTypes.IsSingleGender() ? nameTypes : NameTypes.Boys;
     Rnd             = new MT19937Generator();
     OwnBoyVetos     = new List <Name>(Vetos.Load(Path.Combine(Location.FullName, Id + ".boys.vetos.txt")).Select(n => (Name)n));
     OwnGirlVetos    = new List <Name>(Vetos.Load(Path.Combine(Location.FullName, Id + ".girls.vetos.txt")).Select(n => (Name)n));
 }
示例#17
0
        public void Defender_is_None_on_successfull_attack()
        {
            var rnd      = new MT19937Generator(17);
            var attacker = Player.P1.Army(10);
            var defender = Player.P2.Army(5);

            var result = Dice.AutoAttack(attacker, defender, rnd);

            Assert.IsTrue(result.IsSuccess);
            Assert.AreEqual(new AttackResult(Player.P1.Army(9), Army.None), result);
        }
示例#18
0
        void Mt21_5()
        {
            var rnd  = new MT19937Generator(new uint[] { 3812420242, 459506247, 2183839257, 580200489, 2015677638, 927419777, 441890165, 2639697008, 2119246415, 1824953119, 2556517629, 704541974 });
            var list = new List <double>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(scaleInt2(rnd.NextDouble()));
            }
            Assert.Equal(10, list.Count());
        }
示例#19
0
        void Mt24()
        {
            var rnd  = new MT19937Generator(34);
            var list = new List <double>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(rnd.NextUIntInclusiveMaxValue());
            }
            Assert.Equal(10, list.Count());
        }
示例#20
0
        private void precomputeSeeds(int seed, int amount)
        {
            var g = new MT19937Generator(seed);
            ContinuousUniformDistribution rand = new ContinuousUniformDistribution(g);

            seedList = new int[amount];
            for (int i = 0; i < seedList.Length; i++)
            {
                seedList[i] = (int)(rand.NextDouble() * MAX);
            }
        }
示例#21
0
        public void GetMoveResult_Performance()
        {
            var rnd = new MT19937Generator(17);

            var board  = Board.Initial(rnd);
            var solver = new MonteCarloSolver(rnd);

            var result = solver.Move(board, TimeSpan.FromSeconds(1));

            Console.WriteLine(result);
        }
示例#22
0
        void Mt()
        {
            var rnd  = new MT19937Generator(new uint[] { 1, 2, 3 });
            var list = new List <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(rnd.Next(1, 7));
            }
            Assert.Equal(10, list.Count());
        }
示例#23
0
        public static Int64[] Generate(IList <int> seed, int count, long max)
        {
            var arr = new Int64[count];
            var rnd = new MT19937Generator(seed);

            for (int i = 0; i < count; i++)
            {
                arr[i] = Convert.ToInt64(rnd.NextDouble(1, max));
            }
            return(arr);
        }
示例#24
0
        public void Defender_has_armies_on_nonsuccessfull_attack()
        {
            var rnd      = new MT19937Generator(14);
            var attacker = Player.P1.Army(10);
            var defender = Player.P2.Army(8);

            var result = Dice.AutoAttack(attacker, defender, rnd);

            Assert.IsFalse(result.IsSuccess);
            Assert.AreEqual(new AttackResult(Player.P1.Army(3), Player.P2.Army(3)), result);
        }
示例#25
0
        public BattleSimulator(MT19937Generator rnd)
        {
            File        = new FileInfo("parameters.xml");
            SearchDepth = AppConfig.Data.SearchDepth;

            Rnd        = rnd;
            Randomizer = new ParameterRandomizer(rnd);

            Bots    = new Bots();
            Results = new ConcurrentQueue <BattlePairing>();
        }
示例#26
0
        void Mt21_2()
        {
            var rnd  = new MT19937Generator(new[] { 1, 2, 3 });
            var list = new List <double>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(rnd.NextUInt());
            }
            Assert.Equal(10, list.Count());
        }
示例#27
0
 public KubismeBot(MT19937Generator rnd)
 {
     DecisionMaker = new NodeDecisionMaker(rnd)
     {
         Evaluator         = new Evaluator(),
         Generator         = new MoveGenerator(),
         MaximumDepth      = 10,
         MaximumDuration   = TimeSpan.FromMilliseconds(700),
         DefaultEvaluation = EvaluatorParameters.GetDefault(),
     };
 }
        public void Calculate_Tc9c8dQhTable3_AreEqual()
        {
            var rnd = new MT19937Generator(17);

            var hand  = Cards.Parse("[Tc,9c,8d,Qh]");
            var table = Cards.Parse("[Jc,2d,4s]");

            //var ch = OmahaHand.Calculate(hand, table, 1024, rnd);
            var ch = PokerHandEvaluator.Calculate(hand, table, rnd, 100000);

            Assert.AreEqual(0.309, ch, 0.01);
        }
        public void Calculate_AcAdKCKdTable0_AreEqual()
        {
            var rnd = new MT19937Generator(17);

            var hand  = Cards.Parse("[Ac,Ad,Kc,Kd]");
            var table = Cards.Empty;

            //var ch = OmahaHand.Calculate(hand, table, 1024, rnd);
            var ch = PokerHandEvaluator.Calculate(hand, table, rnd, 100000);

            Assert.AreEqual(0.706, ch, 0.01);
        }
        public void Calculate_Tc9c8dQhTable5_AreEqual()
        {
            var rnd = new MT19937Generator(17);

            var hand  = Cards.Parse("[Tc,9c,8d,Qh]");
            var table = Cards.Parse("[Qd,Jc,2d,4s,3h]");

            var ch = PokerHandEvaluator.Calculate(hand, table, rnd, 100000);

            Assert.AreEqual(0.382, ch, 0.01);
            AssertPokerHandOutcome(0.372, 0.008, 0.615, ch);
        }