Exemple #1
0
        public override void GradeBoards( MoveRepresentationList list, BoardRepresentation initialBoard )
        {
            int race = 1;
            bool opponentFound = false;
            for ( int i = 0; i < initialBoard.SquareCount() && race == 1; i++ )
            {
                if ( !opponentFound && initialBoard.GetPiecesAt( i ) < 0 )
                    opponentFound = true;

                if ( opponentFound && initialBoard.GetPiecesAt( i ) > 0 )
                    race = 0;
            }

            for ( int i = 0; i < list.Count(); i++ )
            {
                int[] pubevalBoard = new int[28];
                MoveRepresentation currentBoard = list.GetMoveRepresentation( i );

                for ( int j = 0; j < currentBoard.SquareCount(); j++ )
                    pubevalBoard[j] = currentBoard.GetPiecesAt( j );

                pubevalBoard[26] = currentBoard.BearOffCountCurrent();
                pubevalBoard[27] = currentBoard.BearOffCountOpponent();

                double s = PubevalGrade( race, pubevalBoard );
                list.GetMoveRepresentation( i ).AddScore( s );
            }
        }
Exemple #2
0
 public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
 {
     LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );
     for ( int i = 1; i < 26; i++ )
         if ( board.GetPiecesAt( i ) > 0 )
             result.CrispValue = i;
     return result;
 }
Exemple #3
0
 public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
 {
     bool opponentFound = false;
     LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );
     for ( int i = 0; i < 26; i++ )
     {
         if ( board.GetPiecesAt( i ) < 0 )
         {
             opponentFound = true;
         }
         if ( board.GetPiecesAt( i ) > 0 && opponentFound )
         {
             result.CrispValue = 1;
             break;
         }
     }
     return result;
 }
Exemple #4
0
        private int Race( BoardRepresentation currentBoard )
        {
            int race = 1;
            bool opponentFound = false;
            for ( int j = 0; j < currentBoard.SquareCount() && race == 1; j++ )
            {
                if ( !opponentFound && currentBoard.GetPiecesAt( j ) < 0 )
                    opponentFound = true;

                if ( opponentFound && currentBoard.GetPiecesAt( j ) > 0 )
                    race = 0;
            }
            return race;
        }
Exemple #5
0
        private float[] BoardToNetworkInput( BoardRepresentation currentBoard )
        {
            int Idx = 0;
            float[] board = new float[196];

            for ( int i = 1; i < 25; i++ )
            {
                int pieces = currentBoard.GetPiecesAt( i );

                if ( pieces == 0 )
                {
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == 1 )
                {
                    board[Idx++] = 1;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == 2 )
                {
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == 3 )
                {
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 0;

                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces > 3 )
                {
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = ( pieces - 3 ) / 2.0f;

                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == -1 )
                {
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 1;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == -2 )
                {
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                }
                else if ( pieces == -3 )
                {
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 0;
                }
                else if ( pieces < -3 )
                {
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;
                    board[Idx++] = 0;

                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = 1;
                    board[Idx++] = ( -pieces - 3 ) / 2.0f;;
                }
            }

            board[Idx++] = currentBoard.GetPiecesAt( 25 ) / 2.0f;
            board[Idx++] = -currentBoard.GetPiecesAt( 0 ) / 2.0f;

            board[Idx++] = currentBoard.BearOffCountCurrent() / 15.0f;
            board[Idx++] = -currentBoard.BearOffCountOpponent() / 15.0f;

            return board;
        }
Exemple #6
0
        private void SetContactInput( BoardRepresentation board, float[] input )
        {
            for ( int i = 0; i < input.Length; i++ )
                input[i] = 0.0f;

            for ( int i = 0; i < 26; i++ )
            {
                m_OwnBoardView[i] = board.GetPiecesAt( i );
                m_OppBoardView[25-i] = -board.GetPiecesAt( i );
            }

            int idx = 0;
            idx = SetBoard( m_OwnBoardView, input, idx );
            idx = SetContactBeardOff( m_OwnBoardView, input, idx );
            idx = SetBar( m_OwnBoardView, input, idx );
            idx = SetHalfContactInput( m_OwnBoardView, input, idx );
            idx = SetHalfContactInput( m_OppBoardView, input, idx );
        }
Exemple #7
0
 public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
 {
     LinguisticInputValue result = new LinguisticInputValue( GetName(), -board.GetPiecesAt( 0 ) );
     return result;
 }
Exemple #8
0
    public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
    {
        LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );

        float r = 0.0f;
        for ( int i = 1; i < 25; i++ )
        {
            if ( board.GetPiecesAt( i ) == 1 )
            {
                bool[,] possibleDices = new bool[6,6];
                for ( int x = 0; x < 6; x++ )
                    for ( int y = 0; y < 6; y++ )
                        possibleDices[x,y] = false;

                for ( int j = 0; j < i; j++ )
                    if ( board.GetPiecesAt( j ) < 0 )
                        CalculateHitProbability( i, j, board, possibleDices );

                int waysToBeHit = 0;
                for ( int x = 0; x < 6; x++ )
                    for ( int y = 0; y < 6; y++ )
                        if ( possibleDices[x,y] )
                            waysToBeHit++;

                float p = ( ((float)waysToBeHit) / 36.0f ) * 100;
                r += ((24.0f - ((float)i-1))/24.0f) * p;
            }
        }

        if ( r > 50.0f )
            r = 50.0f;

        result.CrispValue = (int)Math.Round( r, 0 );
        return result;
    }
Exemple #9
0
    public void CalculateHitProbability( int position, int hitFrom, BoardRepresentation board, bool[,] hittingDices )
    {
        int distance = position - hitFrom;

        for ( int i = 1; i <= 6; i++ )
        {
            for ( int j = 1; j <= 6; j++ )
            {
                if ( distance == i || distance == j )
                {
                    if ( board.GetPiecesAt( 0 ) == 0 )
                    {
                        hittingDices[i-1,j-1] = true;
                    }
                    else if ( board.GetPiecesAt( 0 ) < 0 && hitFrom == 0 )
                    {
                        hittingDices[i-1,j-1] = true;
                    }
                    else if ( board.GetPiecesAt( 0 ) == -1 && hitFrom != 0 )
                    {
                        if ( distance == i && board.GetPiecesAt( j ) < 2 )
                        {
                            hittingDices[i-1,j-1] = true;
                        }
                        else if ( distance == j && board.GetPiecesAt( i ) < 2 )
                        {
                            hittingDices[i-1,j-1] = true;
                        }
                    }
                    else if ( i == j && ( board.GetPiecesAt( 0 ) == -1 || board.GetPiecesAt( 0 ) == -2 || board.GetPiecesAt( 0 ) == -3 ) && board.GetPiecesAt( i ) < 2 )
                    {
                        hittingDices[i-1,j-1] = true;
                    }
                }
                else if ( distance == i + j )
                {
                    if ( board.GetPiecesAt( 0 ) == 0 )
                    {
                        if ( board.GetPiecesAt( hitFrom + i ) < 2 || board.GetPiecesAt( hitFrom + j ) < 2 )
                            hittingDices[i-1,j-1] = true;
                    }
                    else if ( board.GetPiecesAt( 0 ) == -1 && hitFrom == 0 )
                    {
                        if ( board.GetPiecesAt( hitFrom + i ) < 2 || board.GetPiecesAt( hitFrom + j ) < 2 )
                            hittingDices[i-1,j-1] = true;
                    }
                    else if ( i == j && ( board.GetPiecesAt( 0 ) == -1 || board.GetPiecesAt( 0 ) == -2 ) && board.GetPiecesAt( i ) < 2 )
                    {
                        if ( board.GetPiecesAt( hitFrom + i ) < 2 )
                            hittingDices[i-1,j-1] = true;
                    }
                    else if ( i == j && board.GetPiecesAt( 0 ) == -3 && hitFrom == 0 && board.GetPiecesAt( i ) < 2 )
                    {
                        hittingDices[i-1,j-1] = true;
                    }
                }
                else if ( i == j && ( distance == 3 * i || distance == 4 * i ) )
                {
                    if ( board.GetPiecesAt( 0 ) == 0 )
                    {
                        if ( distance == 3 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                        if ( distance == 4 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 && board.GetPiecesAt( hitFrom + ( i * 3 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                    }
                    else if ( ( board.GetPiecesAt( 0 ) == -1 && hitFrom == 0 ) )
                    {
                        if ( distance == 3 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                        if ( distance == 4 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 && board.GetPiecesAt( hitFrom + ( i * 3 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                    }
                    else if ( ( board.GetPiecesAt( 0 ) == -2 && hitFrom == 0 ) )
                    {
                        if ( distance == 3 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                    }
                    else if ( board.GetPiecesAt( 0 ) == -1 && hitFrom != 0 && board.GetPiecesAt( i ) < 2 )
                    {
                        if ( distance == 3 * i )
                        {
                            if ( board.GetPiecesAt( hitFrom + i ) < 2 && board.GetPiecesAt( hitFrom + ( i * 2 ) ) < 2 )
                                hittingDices[i-1,j-1] = true;
                        }
                    }
                }
            }
        }
    }
Exemple #10
0
 public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
 {
     int currentConsecutiveOwned = 0;
     LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );
     for ( int i = 1; i < 25; i++ )
     {
         if ( board.GetPiecesAt( i ) > 1 )
         {
             currentConsecutiveOwned++;
             if ( currentConsecutiveOwned > result.CrispValue )
                 result.CrispValue = currentConsecutiveOwned;
         }
         else
         {
             currentConsecutiveOwned = 0;
         }
     }
     return result;
 }
Exemple #11
0
    public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
    {
        LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );

        int ownPips = 0;
        for ( int i = 0; i < 26; i++ )
            if ( board.GetPiecesAt( i ) > 0 )
                ownPips += i * board.GetPiecesAt( i );

        int opponentPips = 0;
        for ( int i = 0; i < 26; i++ )
            if ( board.GetPiecesAt( i ) < 0 )
                opponentPips += ( 25 - i ) * ( -board.GetPiecesAt( i ) );

        int r = opponentPips - ownPips;

        if ( r > 50 )
            r = 50;
        if ( r < -50 )
            r = -50;

        result.CrispValue = r;
        return result;
    }
Exemple #12
0
 public override LinguisticInputValue CreateLinguisticInputValue( BoardRepresentation board )
 {
     LinguisticInputValue result = new LinguisticInputValue( GetName(), 0 );
     for ( int i = 25; i > 0; i-- )
     {
         if ( board.GetPiecesAt( i ) > 0 )
         {
             result.CrispValue = board.GetPiecesAt( i );
             break;
         }
     }
     return result;
 }
Exemple #13
0
        public bool Double()
        {
            if ( IsAgentPlaying( m_BgGame.CurrentOpponentPlayer ) && ( m_BgGame.CurrentOpponentPlayer == m_BgGame.GetCubeOwner() || m_BgGame.GetCubeOwner() == BgPlayer.None) )
            {
                BoardRepresentation currentBoard = new BoardRepresentation( m_BgGame );

                int[] flippedPattern = new int[currentBoard.SquareCount()];
                for ( int i = 0; i < currentBoard.SquareCount(); i++ )
                    flippedPattern[25-i] = -currentBoard.GetPiecesAt( i );

                BoardRepresentation flippedBoard = new BoardRepresentation( flippedPattern );

                int evaluator = m_GUI.SelectedEvaluator();
                if ( evaluator >= 0 )
                    return m_Plugins[evaluator].Double( flippedBoard );
            }
            return false;
        }