Beispiel #1
0
        //static readonly char sep = Path.DirectorySeparatorChar;
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}Provincial{sep}data{sep}kingdoms{sep}";
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}";

        static void Main(string[] args)
        {
            string     directoryPath = BuyAgenda.DirectoryPath;
            List <int> numbers       = new List <int> {
                -1, 2, 4, 7, 10
            };

            foreach (var item in new Subsets(numbers, 2))
            {
                WriteLine(item.Aggregate("", (e, f) => e + " " + f.ToString()));
            }

            List <Card> cards = PresetGames.Get(Games.BigMoney);

            string first       = "Tens";
            var    firstAgenda = new SimpleManager(directoryPath, "Tens_").LoadBest(cards);

            User getFirst() => new ProvincialAI(firstAgenda, first);

            string second       = "Fives";
            var    secondAgenda = new CachedManager(directoryPath, 5, "Fives_").LoadBest(cards);

            User getSecond() => new ProvincialAI(secondAgenda, second);

            Game game    = new Game(new User[] { getFirst(), getSecond() }, cards.GetKingdom(2), new MyLogger());
            var  task    = game.Play();
            var  results = task.Result;

            ReadLine();
        }
Beispiel #2
0
        void SetPrecomputedRandomGame(object sender, EventArgs e)
        {
            var manager = new SimpleManager(directoryPath, "Tens_");

            gameParams.Cards = manager.RandomKingdom();

            ShowCurrentKingdomCards();
            ShowExtensionCards();
        }
Beispiel #3
0
        private static void Main()
        {
            IMessageWriter writer     = new ConsoleMessageWriter();
            Salutation     salutation = new Salutation(writer);

            salutation.Hello();

            IManager manager = new SimpleManager
            {
                Animals = new List <IAnimal>
                {
                    new Bee("Bee0", new Drone(), 1)
                    //new Human("Human0", new Man(),1)
                }
            };

            string str = manager.Animals[0].GetType().ToString();

            writer.Write("Animal to simulate: " + str[(str.IndexOf(".") + 1)..]);
Beispiel #4
0
        public void Manager_Simple_Run()
        {
            //Arrange
            string   name    = "Barry";
            Type     gender  = typeof(Drone);
            IManager manager = new SimpleManager
            {
                Animals = new List <IAnimal>
                {
                    new Bee(name, (IGender)Activator.CreateInstance(gender), 1)
                }
            };

            //Act
            manager.Run();

            //Assert
            Assert.AreEqual(gender, manager.Animals[0].Gender.GetType());
            Assert.AreEqual(typeof(Queen), manager.Animals[1].Gender.GetType());
        }
Beispiel #5
0
        public void Bee_Pattern_Run()
        {
            //Arrange
            //Create animal number pattern
            IManager manager = new SimpleManager
            {
                Animals = new List <IAnimal>
                {
                    new Bee("Bee0", new Drone(), 1)
                }
            };

            //Act
            manager.Run();
            List <int> pattern = new List <int>(Quantification.CountGenerations(manager));

            //Assert
            for (int patternCnt = 1; patternCnt <= manager.NumberOfGenerations; patternCnt++)
            {
                Assert.AreEqual((int)Gensim.Helpers.Math.Fibonacci(patternCnt), pattern[patternCnt - 1]);
            }
        }
Beispiel #6
0
        public void Human_Pattern_Run()
        {
            //Arrange
            //Create animal number pattern
            IManager manager = new SimpleManager
            {
                Animals = new List <IAnimal>
                {
                    new Human("Human0", new Man(), 1)
                }
            };

            //Act
            manager.Run();
            List <int> pattern = new List <int>(Quantification.CountGenerations(manager));

            //Assert
            for (int patternCnt = 0; patternCnt < manager.NumberOfGenerations; patternCnt++)
            {
                Assert.AreEqual((int)System.Math.Pow(2, patternCnt), pattern[patternCnt]);
            }
        }
Beispiel #7
0
        void StartButton_Click(object sender, EventArgs e)
        {
            GamePanel.Show();
            SetKingdomPanel.Hide();
            SettingsPanel.Hide();
            LogTextBox.Text          = "";
            StartGameButton.Text     = "Restart";
            SetKingdomButton.Enabled = false;
            SettingsButton.Enabled   = false;
            PlayAreaPanel.Controls.Clear();
            PhaseLabel.Text       = "Loading";
            PhaseDescription.Text = "Please wait, game will be ready as soon as possible.";

            gameParams.Save();

            if (tokenSource != null)
            {
                tokenSource.Cancel();
                tokenSource = new CancellationTokenSource();
            }

            Task.Run(() =>
            {
                var human = new Human(PlayCard, GainCard, Choice, AlternativeChoice, job, gameParams.User1Name);
                BuyAgendaManager manager = null;

                switch (gameParams.AIType)
                {
                case AIType.Tens:
                    manager = new SimpleManager(directoryPath, "Tens_");
                    break;

                case AIType.Fives:
                    manager = new CachedManager(directoryPath, 5, "Fives_");
                    break;

                case AIType.Threes:
                    manager = new CachedManager(directoryPath, 3, "Threes43_");     // TODO
                    break;

                default:
                    break;
                }

                var agenda = manager.LoadBest(gameParams.Cards);
                if (agenda == null)
                {
                    Action function = () =>
                    {
                        MessageBox.Show("There is no suitable opponent for this kingdom. \n Please try different cards or" +
                                        " different type of opponent.");
                        StopButton_Click(sender, e);
                    };
                    this.Invoke(function);
                    return;
                }

                var ai = new ProvincialAI(agenda, gameParams.AIType.ToString());

                var source = new CancellationTokenSource();

                Game game = new Game(new User[] { ai, human }, gameParams.Cards.GetKingdom(2), new WindowLogger(Log), tokenSource);
                game.Play(int.MaxValue).ContinueWith((results) => EnableNextGame(results));
            });
        }
Beispiel #8
0
        //static readonly char sep = Path.DirectorySeparatorChar;
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}Provincial{sep}data{sep}kingdoms{sep}";
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}";

        static void Main(string[] args)
        {
            string directoryPath = BuyAgenda.DirectoryPath;
            var    array         = new List <int[]>();

            for (int i = 0; i < 33; i++)
            {
                array.Add(new int[3]);
                array[i][2] = i;
            }

            var threes43 = new CachedManager(directoryPath, 3, "Threes43_");

            for (int i = 0; i < 100; i++)
            {
                var Cards = Enumerable.Range((int)CardType.Adventurer, 25)
                            .Select(t => ((t, r: new ThreadSafeRandom().NextDouble())))
                            .OrderBy(a => a.r)
                            .Take(10)
                            .Select(((int type, double)a) => Card.Get((CardType)a.type))
                            .OrderBy(a => a.Price)
                            .ThenBy(a => a.Name)
                            .ToList();

                foreach (var c in threes43.LoadBest(Cards).Id.ToCardList())
                {
                    array[(int)c.Type][0]++;
                }

                foreach (var c in Cards)
                {
                    array[(int)c.Type][1]++;
                }
            }

            foreach (var c in array.OrderBy(a => (double)a[0] / a[1]))
            {
                WriteLine($"{(CardType)c[2]} {c[0]}/{c[1]}");
            }

            ReadLine();
            return;


            var tens   = new SimpleManager(directoryPath, "Tens_");
            var cards  = tens.RandomKingdom();
            var fives  = new CachedManager(directoryPath, 5, "Fives_");
            var threes = new CachedManager(directoryPath, 3, "Threes_");

            var agendas = new List <BuyAgendaTournament.Tuple>();

            //   agendas.Add(new BuyAgendaTournament.Tuple { Agenda = tens.LoadBest(cards), Id = "tens" });
            //  agendas.Add(new BuyAgendaTournament.Tuple { Agenda = tens.LoadBest(cards), Id = "tens" });
            agendas.Add(new BuyAgendaTournament.Tuple {
                Agenda = fives.LoadBest(cards), Id = "fives"
            });
            agendas.Add(new BuyAgendaTournament.Tuple {
                Agenda = threes.LoadBest(cards), Id = "threes"
            });

            var sw = new Stopwatch();

            sw.Start();
            agendas.Tournament(cards, gameCount);
            sw.Stop();
            WriteLine(sw.Elapsed.TotalSeconds);

            agendas.ShowResults(new MyLogger());

            ReadLine();
        }
Beispiel #9
0
        // params
        // -f -s 5 -t 4

        static void Main(string[] args)
        {
            // params
            EvolutionType et = EvolutionType.Tens;
            int           startIndex = 0, count = 1, parallelDegreeExt = -1, parallelDegreeInt = -1;

            var rnd = new ThreadSafeRandom();
            //char sep = Path.DirectorySeparatorChar;
            //string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}Provincial{sep}data{sep}kingdoms{sep}";
            //string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}";
            string directoryPath = BuyAgenda.DirectoryPath;

            string           subsetFile = null;
            BuyAgendaManager manager    = new SimpleManager(directoryPath, "Tens_");

            IEnumerator <string> kingdoms = null;

            // params handling
            for (int i = 0; i < args.Length; i++)
            {
                if (args[i][0] != '-')
                {
                    continue;
                }
                for (int j = 1; j < args[i].Length; j++)
                {
                    try
                    {
                        switch (args[i][j])
                        {
                        case 'c':
                            count = int.Parse(args[++i]);
                            break;

                        case 'd':
                            et      = EvolutionType.Tens;
                            manager = new SimpleManager(directoryPath, "Tens_");
                            break;

                        case 'f':
                            et = EvolutionType.Subsets;
                            //manager = new CachedManager(directoryPath, 5, "Fives_");
                            manager    = new SimpleManager(directoryPath, "Fives_");
                            subsetFile = "fives";
                            break;

                        case 'h':
                            et = EvolutionType.Subsets;
                            //manager = new CachedManager(directoryPath, 3, "Threes_");
                            manager    = new SimpleManager(directoryPath, "Threes43_");  // TODO 43
                            subsetFile = "threes";
                            break;

                        case 'n':
                            et = EvolutionType.NamedGames;
                            break;

                        case 's':
                            startIndex = int.Parse(args[++i]);
                            break;

                        case 't':
                            parallelDegreeExt = 1;
                            parallelDegreeInt = int.Parse(args[++i]);
                            break;

                        default:
                            break;
                        }
                    }
                    catch
                    {
                        WriteLine($"Parameter {i} failed.");
                    }
                }
            }

            WriteLine($"evolution: {et.ToString()}");

            if (et == EvolutionType.Subsets)
            {
                kingdoms = File.ReadAllLines($"{directoryPath}{BuyAgenda.sep}{subsetFile}.txt").Skip(startIndex).Take(count).GetEnumerator();
                WriteLine($"count: {count}");
                WriteLine($"start index: {startIndex}");
            }

            else
            {
                WriteLine($"kingdom: random");
            }

            for (int i = 0; i < count; i++)
            {
                //    try
                {
                    switch (et)
                    {
                    case EvolutionType.Tens:
                    {
                        //cards = PresetGames.Get(Games.FirstGame).AddRequiredCards();
                        List <Card> cards = null;

                        // get random 10 cards
                        cards = Enumerable.Range((int)CardType.Adventurer, 25)
                                .Select(t => ((t, r: rnd.NextDouble())))
                                .OrderBy(a => a.r)
                                .Take(10)
                                .Select(((int type, double)a) => Card.Get((CardType)a.type))
                                .ToList();

                        var kingdomName = cards.OrderBy(p => p.Type).Select(p => (int)p.Type).Aggregate("kingdom", (a, b) => a + " " + b);
                        WriteLine($"kingdom {i}: {kingdomName}");
                        if (manager.Load(cards) != null)
                        {
                            WriteLine($"Skipping kingdom.");
                            continue;
                        }

                        var evolution = new Evolution(new Params
                            {
                                Kingdom           = cards,
                                Evaluator         = new ProvincialEvaluator(),
                                ParallelDegreeExt = parallelDegreeExt,
                                ParallelDegreeInt = parallelDegreeInt,
                                LeaderCount       = 10,
                                PoolCount         = 50,
                                Generations       = 50,
                            }, new Logger());
                        var agenda = evolution.Run();
                        manager.Save(cards, agenda);
                    }
                    break;

                    case EvolutionType.Subsets:
                    {
                        List <Card> cards = null;
                        kingdoms.MoveNext();

                        cards = kingdoms.Current.Split(new char[] { }, StringSplitOptions.RemoveEmptyEntries)
                                .Select(a => Card.Get((CardType)int.Parse(a))).ToList();

                        var kingdomName = cards.OrderBy(p => p.Type).Select(p => (int)p.Type).Aggregate("kingdom", (a, b) => a + " " + b);
                        WriteLine($"kingdom {i}: {kingdomName}");

                        if (manager.Load(cards) != null)
                        {
                            WriteLine("skipping");
                            continue;
                        }

                        var evolution = new Evolution(new Params
                            {
                                Kingdom           = cards,
                                Evaluator         = new ProvincialEvaluator(),
                                ParallelDegreeExt = parallelDegreeExt,
                                ParallelDegreeInt = parallelDegreeInt,
                                LeaderCount       = 10,
                                PoolCount         = 50,
                                Generations       = 50,
                            }, new Logger());
                        var agenda = evolution.Run();
                        manager.Save(cards, agenda);
                    }
                    break;

                    case EvolutionType.NamedGames:
                    {
                        //cards = PresetGames.Get(Games.FirstGame).AddRequiredCards();
                        List <(List <Card> Cards, string Name)> games = new List <(List <Card>, string)>
                        {
                            (PresetGames.Get(Games.BigMoney), "bigMoneyGame"),
                            (PresetGames.Get(Games.Interaction), "interaction"),
                            (PresetGames.Get(Games.FirstGame), "firstGame"),
                            (PresetGames.Get(Games.SizeDistortion), "sizeDistortion"),
                            (PresetGames.Get(Games.ThrashHeap), "trasheap"),
                            (PresetGames.Get(Games.VillageSquare), "village"),
                            //((new int[]{ 9, 12, 15, 18, 22, 24, 27, 28, 31, 32}.Select(c => Card.Get((CardType)c)).ToList()), "badCards")
                            //(new List<Card>{Card.Get(CardType.Curse)}, "bigMoney")
                        };

                        games.ForEach(item =>
                            {
                                var kingdomName = item.Cards.OrderBy(p => p.Type).Select(p => (int)p.Type).Aggregate("kingdom", (a, b) => a + " " + b);
                                WriteLine($"kingdom {i}: {item.Name} {kingdomName}");
                                var evolution = new Evolution(new Params
                                {
                                    Kingdom     = item.Cards,
                                    Evaluator   = new ProvincialEvaluator(),
                                    LeaderCount = 10,
                                    PoolCount   = 50,
                                    Generations = 50,
                                }, new Logger());     //manager.First(a => a.Id == item.Name));
                                var agenda = evolution.Run();
                                manager.Save(item.Cards, agenda);
                            });
                    }
                    break;

                    default:
                        break;
                    }
                }
                //catch (Exception e)
                //{
                //    WriteLine(e.Message);
                //}
            }
            ReadLine();
        }