public void processSquares()
	{

		for (int i = 0; i < max_X; i++)
			for (int j = 0; j < max_Y; j++)
			{
				MemeNode original = terrain[i][j].copy();
				MemeNode cnbreed = null;
				
				cnbreed = terrain [i][(j+1+max_Y)%max_Y];
					
				if (terrain [i][(j-1+max_Y)%max_Y].fitness > cnbreed.fitness)
					cnbreed = terrain [i][(j-1+max_Y)%max_Y];

				if (terrain [(i+1+max_X)%max_X][j].fitness > cnbreed.fitness)
					cnbreed = terrain [(i+1+max_X)%max_X][j];
					
				if (terrain [(i-1+max_X)%max_X][j].fitness > cnbreed.fitness)
					cnbreed = terrain [(i-1+max_X)%max_X][j];
					
				crosscount++;
				cnbreed = cnbreed.copy();
				original.crossoverSimple(cnbreed, maxdepth);
								
				RNG dice = RNG.getInstance();
				if (dice.nextDouble() < mutrate)
				{
					mutcount++;
					memecount++;
					original.mutation(maxdepth);
				
					/* Setting meemtic Parameters */
					if (adaptive == 1)
					{
						Parameter P = Parameter.getInstance();
						P.setParam(yparamname, yparameter[j]);
						P.setParam(xparamname, xparameter[i]);
					}					
					original.memetize(T);
				}
					
				original.eval(T);
				if (original.fitness > terrain[i][j].fitness)
				{
					individual.remove(terrain[i][j]);
					individual.add(original);
					terrain[i][j] = original;
				}					
				
			}	// End double for
	}