//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(); }
void SetPrecomputedRandomGame(object sender, EventArgs e) { var manager = new SimpleManager(directoryPath, "Tens_"); gameParams.Cards = manager.RandomKingdom(); ShowCurrentKingdomCards(); ShowExtensionCards(); }
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)..]);
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()); }
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]); } }
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]); } }
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)); }); }
//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(); }
// 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(); }