Esempio n. 1
0
        public void HandleEvalConfig_HasHandledEvalConfigCorrect_Equal()
        {
            string fileName = "EvalConfigTest.txt";

            using (File.Create(fileName)) { }
            string path = Path.GetFullPath(fileName);

            string[] textLines = { "false", "20", "1337", "10", "15" };
            File.WriteAllLines(fileName, textLines);
            int Depth;

            Bayes.HandleEvalConfig(out Depth, path);

            File.Delete(path);

            Assert.Equal(Convert.ToBoolean(textLines[0]), Bayes.TuneEvalValues);
            Assert.Equal(textLines[1], Bayes.TuningBounderies.ToString());
            Assert.Equal(textLines[2], Bayes.Seed.ToString());
            Assert.Equal(textLines[3], Bayes.RepetetionPerEvalConfiguration.ToString());
            Assert.Equal(textLines[4], Depth.ToString());
        }
Esempio n. 2
0
        public void RandomizeEvalConfiguration_HasRandomizedCorrectly_Equal()
        {
            string fileName = "EvalConfigTest.txt";

            using (File.Create(fileName)) { }
            string path = Path.GetFullPath(fileName);

            string[] textLines = { "true", "20", "1337", "10", "15" };
            File.WriteAllLines(fileName, textLines);
            int Depth;

            Bayes.HandleEvalConfig(out Depth, path);

            Assert.True(Bayes.TuneEvalValues);
            Assert.Equal(20, Bayes.TuningBounderies);
            Assert.Equal(1337, Bayes.Seed);
            Assert.Equal(10, Bayes.RepetetionPerEvalConfiguration);
            Assert.Equal(15, Depth);

            Random randomGenerator = new Random(Bayes.Seed);

            #region resultString
            ChessBoard board = new ChessBoard();
            board.InitializeGame();
            string result;
            result = Eval.BasePawnValue.ToString() + " " + Eval.BaseBishopValue.ToString() + " " + Eval.BaseKnightValue.ToString() + " " + Eval.BaseRookValue + " " +
                     Eval.BaseQueenValue.ToString() + " " + Eval.BaseKingValue.ToString() + " " + Eval.CheckMateConstant.ToString() + " " + Eval.LateGameBonusRooks.ToString() + " " +
                     Eval.LateGameBonusKnights.ToString() + " " + Eval.LateGameBonusBishop.ToString() + " " + Eval.FactorRook.ToString() + " " + Eval.FactorBishop.ToString() + " " +
                     Eval.FactorKnight.ToString() + " ";


            foreach (int i in board.WhitePawn.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.WhiteKnight.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.WhiteBishop.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.WhiteRook.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.WhiteQueen.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.WhiteKing.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackPawn.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackKnight.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackBishop.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackRook.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackQueen.PositionValues)
            {
                result += i + " ";
            }

            foreach (int i in board.BlackKing.PositionValues)
            {
                result += i + " ";
            }
            #endregion

            string[] ToBeModifiedConfigurationString = result.Split(' ');
            string   modifiedString = null;

            foreach (string valueString in ToBeModifiedConfigurationString)
            {
                if (valueString != string.Empty)
                {
                    double value = Convert.ToDouble(valueString);
                    value           = value * (1 - ((double)(randomGenerator.Next(-Bayes.TuningBounderies, Bayes.TuningBounderies)) / 100));
                    modifiedString += value + " ";
                }
            }

            Assert.Equal(modifiedString, Bayes.RandomizeEvalConfiguration(result));
        }
Esempio n. 3
0
        public void Handler(string inputString)
        {
            Trace.WriteLine("Handler() input: " + inputString);
            string[] input = inputString.Split(' ');
            switch (input[0])
            {
            case "protover":
                protover = Convert.ToInt32(input[1]);
                if (protover == 2)
                {
                    Console.WriteLine("feature colors=0 done=1");
                }
                break;

            case "new":
                chessBoard.InitializeGame();
                Bayes.HandleEvalConfig(out depth, Path.GetFullPath("config.txt"));
                if (Bayes.TuneEvalValues)
                {
                    Bayes.ModifyValues(Bayes.RandomizeEvalConfiguration(Bayes.CreateOutputString(chessBoard)), chessBoard);
                }
                else
                {
                    Bayes.ModifyValues(Bayes.FindBestEvalConfiguration(Path.GetFullPath("log.txt")), chessBoard);
                }
                isFirstGo = true;
                break;

            case "level":
                movesPerMinutes = Convert.ToInt32(input[1]);
                minutes         = Convert.ToInt32(input[2]);
                break;

            case "accepted":
                switch (input[1])
                {
                case "colors":
                    isAcceptedColors = true;
                    break;

                case "time":
                    isAcceptedTime = true;
                    break;
                }
                break;

            case "quit":
                System.Environment.Exit(0);
                break;

            case "force":
                force = true;
                break;

            case "rejected":
                throw new Exception("Feature '" + input[1] + "' was not accepted.");

            case "result":

                if (Bayes.TuneEvalValues)
                {
                    Bayes.RepetetionPerEvalConfiguration--;
                    if (Bayes.RepetetionPerEvalConfiguration == 0)
                    {
                        Bayes.Seed++;
                        Bayes.RepetetionPerEvalConfiguration = 10;
                    }
                }

                Bayes.WriteToEvalConfig(Path.GetFullPath("config.txt"), depth);

                switch (input[1])
                {
                case "1-0":
                    chessBoard.State = ChessBoardGameState.WhiteMate;
                    Bayes.WriteLineToTxtFile(Path.GetFullPath("log.txt"), Bayes.CreateEvalConfigurationStringLogFormat(true, Bayes.CreateOutputString(chessBoard)));
                    break;

                case "0-1":
                    chessBoard.State = ChessBoardGameState.BlackMate;
                    Bayes.WriteLineToTxtFile(Path.GetFullPath("log.txt"), Bayes.CreateEvalConfigurationStringLogFormat(false, Bayes.CreateOutputString(chessBoard)));
                    break;

                case "1/2-1/2":
                    chessBoard.State = ChessBoardGameState.Draw;
                    Bayes.WriteLineToTxtFile(Path.GetFullPath("log.txt"), Bayes.CreateEvalConfigurationStringLogFormat(false, Bayes.CreateOutputString(chessBoard)));
                    break;

                case "*":
                    Console.WriteLine("Error (unknown command): " + input[0]);
                    break;
                }
                break;

            case "go":
                if (isFirstGo == true)
                {
                    force = false;
                    DoMove();
                    isFirstGo = false;
                }
                else
                {
                    Console.WriteLine("Error (Not handled): go");
                }
                break;

            default:
                if (STRINGMOVE_FORMAT.IsMatch(input[0]))
                {
                    Logger.OutputMove(input[0]);
                    ColoredBitBoard bitBoardMoveRecived = _winboardConverter.ConvertStringMoveToBitBoard(input[0]);
                    chessBoard.Update(bitBoardMoveRecived);
                    whiteTurn = !whiteTurn;
                    if (force == false)
                    {
                        DoMove();
                    }
                }
                else
                {
                    Console.WriteLine("Error (unknown command): " + input[0]);
                }
                break;
            }
        }