public Knapsack executeOnce(Knapsack knapsack) {
		int neighbours = generateRandomNumberOfNeighbours();
		Knapsack best = null;
				
		for (int i=0; i<neighbours; i++) {
			Knapsack candidate = generateNeighbour(knapsack);
			
			if (best == null) {
				best = candidate;
			} else if (candidate.compareWith(best) > 0) {
				best = candidate;
			}
		}
		
		if (best.compareWith(knapsack) >= 0) {
			heatTemperature();
			return best;
		} else {
			if (Math.random() >= calculateProbability(best, knapsack)) {
				freezeTemperature();
				return best;
			} else {
				return knapsack;
			}
		}
	}