AIMA.Core.Environment.NQueens.NQueensFitnessFunction.getValue C# (CSharp) Method

getValue() public method

public getValue ( String individual ) : double
individual String
return double
        public double getValue(String individual)
        {
            double fitness = 0;

            NQueensBoard board = getBoardForIndividual(individual);
            int boardSize = board.getSize();

            // Calculate the number of non-attacking pairs of queens (refer to AIMA
            // page 117).
            List<XYLocation> qPositions = board.getQueenPositions();
            for (int fromX = 0; fromX < (boardSize - 1); fromX++)
            {
                for (int toX = fromX + 1; toX < boardSize; toX++)
                {
                    int fromY = qPositions.get(fromX).getYCoOrdinate();
                    bool nonAttackingPair = true;
                    // Check right beside
                    int toY = fromY;
                    if (board.queenExistsAt(new XYLocation(toX, toY)))
                    {
                        nonAttackingPair = false;
                    }
                    // Check right and above
                    toY = fromY - (toX - fromX);
                    if (toY >= 0)
                    {
                        if (board.queenExistsAt(new XYLocation(toX, toY)))
                        {
                            nonAttackingPair = false;
                        }
                    }
                    // Check right and below
                    toY = fromY + (toX - fromX);
                    if (toY < boardSize)
                    {
                        if (board.queenExistsAt(new XYLocation(toX, toY)))
                        {
                            nonAttackingPair = false;
                        }
                    }

                    if (nonAttackingPair)
                    {
                        fitness += 1.0;
                    }
                }
            }

            return fitness;
        }