public SimulationResultsHolder runSimulation() {
		resultsHolder = new SimulationResultsHolder();
		resultsHolder.addFlyReleaseInfo(fr.toString());
		for (int i = 1; i<=numberOfDays; i++) {
			System.err.println("Running simulation for day " + i + "...");
			double totalProbForDay = 0;
			int numberOfFlies = 0;
			Iterator<OutbreakLocation> releasePointItr = fr.allOutbreakLocations.iterator();
			while (releasePointItr.hasNext()) {
				OutbreakLocation currentReleasePoint = releasePointItr.next();
				ArrayList<Point2D.Double> flyLocations = currentReleasePoint.locateFlies(i);
				Iterator<Point2D.Double> flyLocationItr = flyLocations.iterator();
				while (flyLocationItr.hasNext()) {
					Point2D.Double currentLocation = flyLocationItr.next();
					Double currentEscapeProb = tg.getTotalEscapeProbability(currentLocation);
					String[] results = {Integer.toString(i), currentReleasePoint.shortString(),
							locationToString(currentLocation), Double.toString(currentEscapeProb)};
					resultsHolder.addRawData(results);
					totalProbForDay += currentEscapeProb;
					numberOfFlies += 1;
				}				
			}				
			double avgForDay = totalProbForDay / numberOfFlies;
			cumulativeProb *= avgForDay;
			resultsHolder.addAvgEscapeProbability(i, avgForDay);
		}					
		System.err.println("Simulation complete!");
		return resultsHolder;
	}