示例#1
0
 public void WriteToFiles(string fileName)
 {
     //makes it an os-friendly fileName (with the correct / or \ depening on the platform), also makes it unique by adding file endings like (00, 01)
     fileName = fileName.Replace('/', Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar);
     TyDebug.LogInfo("Wrote " + fileName);
     CreatePathIfNonExistent(fileName);
     WriteCsvFile(fileName, _csvLogs);
 }
示例#2
0
        private static void LearnFromExe(string[] args)
        {
            TyDebug.LogInfo("Executable Learn");

            var enemy = TycheAgent.GetTrainingAgent(0.0f, false);

            TyLearnSetup learnSetup = new TyLearnSetup();

            learnSetup.Rounds          = 50;
            learnSetup.MatchesPerRound = 1;

            Dictionary <string, string> keyValues = new Dictionary <string, string>();

            char[] split = { '=' };

            for (int i = 0; i < args.Length; i++)
            {
                var keyValuePair = args[i].Split(split, StringSplitOptions.RemoveEmptyEntries);

                if (keyValuePair.Length == 2)
                {
                    keyValues.Add(keyValuePair[0], keyValuePair[1]);
                }
                else
                {
                    TyDebug.LogError("Arg '" + args[i] + "' is not allowed");
                }
            }


            var deck0Value = DeckFu.All.ToString();

            keyValues.TryGetValue("deck0", out deck0Value);

            var deck1Value = DeckFu.All.ToString();

            keyValues.TryGetValue("deck1", out deck1Value);

            int generations = TryGetIntValue(keyValues, "gens", 20);

            var myDeck  = DeckFromEnumString(deck0Value);
            var hisDeck = DeckFromEnumString(deck1Value);

            learnSetup.Clear();
            learnSetup.Run(generations, myDeck, hisDeck, enemy);
        }
示例#3
0
        private static void AllMirroredDecksAllAgents()
        {
            const int ROUNDS            = 100;
            const int MATCHES_PER_ROUND = 1;

            TyDebug.LogInfo("Debug Test");
            TyDebug.LogInfo("Total matches: " + (ROUNDS * MATCHES_PER_ROUND));

            List <List <TyDeckHeroPair> > decks = new List <List <TyDeckHeroPair> >
            {
                DeckFromEnum(DeckFu.Druid),
                DeckFromEnum(DeckFu.Mage),
                DeckFromEnum(DeckFu.Paladin),
                DeckFromEnum(DeckFu.Priest),
                DeckFromEnum(DeckFu.Rogue),
                DeckFromEnum(DeckFu.Shaman),
                DeckFromEnum(DeckFu.Warlock),
                DeckFromEnum(DeckFu.Warrior)
            };


            //for (int i = 0; i < _allEnemyAgents.Count; i++)
            {
                for (int j = 0; j < decks.Count; j++)
                {
                    var deck = decks[j];
                    TyDebug.LogInfo(deck[0].Name);


                    for (int l = 0; l < 4; l++)
                    {
                        var myAgent    = new TycheAgent();
                        var enemyAgent = TycheAgent.GetTrainingAgent();                         //_allEnemyAgents[i % _allEnemyAgents.Count];

                        TyMatchSetup training = new TyMatchSetup(myAgent, enemyAgent);
                        training.RunRounds(deck, deck, ROUNDS, MATCHES_PER_ROUND);
                        training.PrintFinalResults();
                    }
                }
            }

            TyDebug.LogInfo("Press a key to close.");
            Console.ReadLine();
        }
示例#4
0
        public void RunRounds(List <TyDeckHeroPair> decks0, List <TyDeckHeroPair> decks1, int rounds, int matchesPerRound)
        {
            var totalStartTime = TyUtility.GetSecondsSinceStart();

            System.Random random = new Random();

            var s1 = "";

            for (int i = 0; i < decks0.Count; i++)
            {
                s1 += decks0[i].Name + ",";
            }

            var s2 = "";

            for (int i = 0; i < decks1.Count; i++)
            {
                s2 += decks1[i].Name + ",";
            }

            TyDebug.LogInfo("Decks: " + s1 + " vs. " + s2);

            for (int i = 0; i < rounds; i++)
            {
                var roundStartTime = TyUtility.GetSecondsSinceStart();

                var deck0 = decks0.GetUniformRandom(random);
                var deck1 = decks1.GetUniformRandom(random);

                var startPlayer = (i % 2) + 1;

                RunMatches(deck0, deck1, matchesPerRound, startPlayer);

                var roundTime = TyUtility.GetSecondsSinceStart() - roundStartTime;

                if (PrintMatchTimes)
                {
                    PrintFinalResults(roundTime, matchesPerRound);
                }
            }

            _totalTimeUsed = TyUtility.GetSecondsSinceStart() - totalStartTime;
        }
示例#5
0
        private static void DebugLearn()
        {
            TyDebug.LogInfo("Debug Learn");
            var enemy = new BotB.BotB();

            TyLearnSetup learnSetup = new TyLearnSetup();

            learnSetup.Rounds          = 1;
            learnSetup.MatchesPerRound = 1;

            const int GENERATIONS = 20;

            learnSetup.Clear();
            learnSetup.Run(GENERATIONS, DeckFromEnum(DeckFu.Mage), DeckFromEnum(DeckFu.Mage), enemy);

            learnSetup.Clear();
            learnSetup.Run(GENERATIONS, DeckFromEnum(DeckFu.Warrior), DeckFromEnum(DeckFu.Warrior), enemy);

            learnSetup.Clear();
            learnSetup.Run(GENERATIONS, DeckFromEnum(DeckFu.Shaman), DeckFromEnum(DeckFu.Shaman), enemy);
        }
示例#6
0
        private static void Main(string[] args)
        {
            _randomLateAgent = new List <AbstractAgent> {
                GetAgent(Agent.RandomLate)
            };
            _faceHunterAgent = new List <AbstractAgent> {
                GetAgent(Agent.FaceHunter)
            };
            _randomAgent = new List <AbstractAgent> {
                GetAgent(Agent.Random)
            };
            _botBAgent = new List <AbstractAgent> {
                GetAgent(Agent.BotB)
            };

            _allEnemyAgents = new List <AbstractAgent> {
                GetAgent(Agent.RandomLate),
                GetAgent(Agent.FaceHunter),
                GetAgent(Agent.Random),
                GetAgent(Agent.BotB)
            };

            TyDebug.Assert(false);
            //var c = Cards.FromName("Medivh, the Guardian");
            //TyDebug.LogInfo(c.AssetId);


            //var allCards = Cards.All;
            //foreach(var card in allCards)
            //	TyDebug.LogInfo(card.FullPrint());

            QuickTest();
            //AllMirroredDecksAllAgents();

            //if (args.Length == 0)
            //	DebugLearn();
            //else
            //	LearnFromExe(args);
        }
示例#7
0
        private static void QuickTest()
        {
            const int ROUNDS            = 40;
            const int MATCHES_PER_ROUND = 1;

            TyDebug.LogInfo("Quick Test Setup");
            TyDebug.LogInfo("Total matches to play: " + (ROUNDS * MATCHES_PER_ROUND));

            List <List <TyDeckHeroPair> > decks = new List <List <TyDeckHeroPair> >
            {
                DeckFromEnum(DeckFu.Shaman)

                /*
                 * DeckFromEnum(DeckFu.Warrior),
                 * DeckFromEnum(DeckFu.Druid),
                 * DeckFromEnum(DeckFu.Warlock),
                 * DeckFromEnum(DeckFu.Paladin),
                 * DeckFromEnum(DeckFu.Rogue),
                 * DeckFromEnum(DeckFu.Priest),
                 * DeckFromEnum(DeckFu.Mage),
                 */
            };

            for (int j = 0; j < decks.Count; j++)
            {
                var myAgent    = TycheAgent.GetSearchTreeAgent(20);
                var enemyAgent = TycheAgent.GetTrainingAgent(0.0f, false);

                TyMatchSetup training = new TyMatchSetup(myAgent, enemyAgent);
                //training.PrintMatchTimes = true;
                training.RunRounds(decks[j], decks[j], ROUNDS, MATCHES_PER_ROUND);
                training.PrintFinalResults();
            }

            TyDebug.LogInfo("Press a key to close.");
            Console.ReadLine();
        }
示例#8
0
        public void Run(int numGenerations, List <TyDeckHeroPair> myDeck, List <TyDeckHeroPair> enemyDeck, AbstractAgent enemyAgent)
        {
            var myDeckName    = TyDeckHeroPair.GetDeckListPrint(myDeck);
            var enemyDeckName = TyDeckHeroPair.GetDeckListPrint(enemyDeck);

            FileName = myDeckName + "Vs" + enemyDeckName + "_" + enemyAgent.GetType().Name;

            while (File.Exists(FileName + ".txt"))
            {
                FileName += "0";
            }

            WriteGlobalToFile();

            TyDebug.LogInfo(FileName);
            TyDebug.LogInfo("Generations: " + numGenerations);

            for (int step = 0; step < numGenerations; step++)
            {
                var startDate = DateTime.Now;

                Train(_currentPopulation, myDeck, enemyDeck, enemyAgent);

                var children = GiveBirth(SelectFittest(_currentPopulation), _random, step + 1);

                Train(children, myDeck, enemyDeck, enemyAgent);

                _currentPopulation = MixPopulations(_currentPopulation, children, step + 1);

                Log("Generation " + (step));
                LogPopulation(_currentPopulation);
                var diff = DateTime.Now.Subtract(startDate);
                Log("Generation took " + diff.Minutes + " min, " + diff.Seconds + " s");
                WriteCurrentToFile(FileName + ".txt");
                _csvLog.WriteToFiles(FileName);
            }
        }
示例#9
0
 private void PrintFinalResults(double time, int matches)
 {
     TyDebug.LogInfo("Result: " + _agent0.GetType().Name + ": " + ((float)_agent0Wins / (float)_totalPlays) * 100.0f + "% vs " + _agent1.GetType().Name + ": " + ((float)_agent1Wins / (float)_totalPlays) * 100.0f + "%. " + matches + " matches took " + time.ToString("0.000") + "s");
 }