Beispiel #1
0
            public double apply(Individual <int> 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).
                ICollection <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);
            }
 /**
  * Implements a GOAL-TEST for the n-queens problem.
  */
 public static bool testGoal(NQueensBoard state)
 {
     return(state.getNumberOfQueensOnBoard() == state.getSize() && state.getNumberOfAttackingPairs() == 0);
 }