public void neighborhoodGames(int neighChoice, int from, int to){
		orgSolutionFalse = sol.checkConstraint();
		List<ArrayList<Integer>> listOfGames = sol.getGameList();
		
		if(neighChoice==0){ //random neighbor
			int times = 1000;
			for(int neighCnt=from; neighCnt<to; neighCnt++){
					listNeighborhoodGameRandom(listOfGames, listOfGames.size(), neighCnt, times);
			}
			//System.out.println("Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+times);
			if(Util.protocolBoolean){
				Util.protocol += "Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+times+"\n";
			}
		}
		else if(neighChoice==1){//next improvement: search in a specified order, take first solution, which is better than x
			List<List<Game>> oldSolution = sol.deepCopy();
			List<ArrayList<Integer>> listOfGamesCnt = sol.getGameListCosts();
			for(int neighCnt=from; neighCnt<to; neighCnt++){
				listNeighborhoodGame(listOfGamesCnt,minNotMax,neighCnt);
			}
			//System.out.println("Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+iterationStep);
			if(Util.protocolBoolean){
				Util.protocol += "Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+iterationStep+"\n";
			}
		}
		else if(neighChoice==2){//best improvement: search through N completely and take the best solution
			for(int neighCnt=from; neighCnt<to; neighCnt++){
				bestNeighborhoodGame(listOfGames,neighCnt);
			}
			//System.out.println("Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+iterationStep);
			if(Util.protocolBoolean){
				Util.protocol += "Neighborhood (games) "+neighChoice+": "+sol.getCumulativeCost()+" (costs), Iterationsteps: "+iterationStep+"\n";
			}
		}
	}