@Override
	public GASolution<int[]> mutate(GASolution<int[]> chr) {
		int[] data = chr.getData().clone();
		IRNG rand = RNG.getRNG();
		if (rand.nextDouble() <= probability) {
			data[0] = rand.nextInt(0, 256);
		}
		int size = data.length;
		int n = size / 5;
		for (int i = 0; i < n; i++) {
			if (rand.nextDouble() <= probability) data[i * 5 + 1] = rand.nextInt(0, imgWidth);
			if (rand.nextDouble() <= probability) data[i * 5 + 2] = rand.nextInt(0, imgHeight);
			if (rand.nextDouble() <= probability) data[i * 5 + 3] = rand.nextInt(1, imgWidth - data[i * 5 + 1] + 1);
			if (rand.nextDouble() <= probability) data[i * 5 + 4] = rand.nextInt(1, imgHeight - data[i * 5 + 2] + 1);
			if (rand.nextDouble() <= probability) data[i * 5 + 5] = rand.nextInt(0, 256);
		}
		return new Solution(data);
	}