public boolean Update() {
		
		//System.out.println("Running Control Update");
		
		//run the sweepers through CParams::iNumTicks amount of cycles. During
		//this loop each sweepers NN is constantly updated with the appropriate
		//information from its surroundings. The output from the NN is obtained
		//and the sweeper is moved. If it encounters a mine its fitness is
		//updated appropriately,
		if(m_iTicks % 1000 == 0) {
			System.out.println("Ticks: " + m_iTicks);
		}
		if (m_iTicks++ < CParams.iNumTicks) {
			for (int i = 0; i < sweeperPositions.size(); i++) {
	
				if (!sweeperPositions.get(i).Update(minePositions)) {
					//error in processing the neural net
					System.out.println("Wrong amount of NN inputs!");
					return false;
				}
				
				int GrabHit = sweeperPositions.get(i).CheckForMine(minePositions, CParams.dMineScale);
	
				if (GrabHit >= 0) {
					sweeperPositions.get(i).incFit();
					minePositions.get(GrabHit).setX(Utils.RandDouble() * cxClient);
					minePositions.get(GrabHit).setY(Utils.RandDouble() * cyClient);
				}
	
			}
		} else {
			System.out.println("Time to update the brains");
			int bestFit = 0;
			int bestFitPos = 0;
			for(int i = 0; i < sweeperPositions.size(); i++) {
				if(sweeperPositions.get(i).getIncFit() > bestFit) {
					bestFitPos = i;
					bestFit = sweeperPositions.get(i).getIncFit();
				}
			}
			
			System.out.println("Best Fit Index: " + bestFitPos);
			System.out.println("Updating everyone brain");
			for(int i = 0; i < sweeperPositions.size(); i++) {
				if(i != bestFitPos) {
					sweeperPositions.get(i).updateBrain(sweeperPositions.get(bestFitPos));
				}
				sweeperPositions.get(i).incFit = 0;
			}
			
			// See who has the highest Fit and take their brain and give it to the rest
			m_iTicks = 0;
		}

		return true;
	}