The code is simple, but it is totally uncommented and there is no explanation of what you are doing.
Problems:
You are basically dividing the 1000-loci problem in a lot of segments considering the fact that if the fitness on each segment is equal to 1, then the fitness on all the segments put together is again equal to 1. This maybe true in this case because the fitness function returns 1 if all the 1000 bits are 1’s, so transforming all the segments in vectors of 1’s and putting them together works fine, but it’s not always like this (and you shouldn’t assume that it works fine because you should treat the fitness as a black box). I make you an example: consider that the fitness gives a good result if the 1000-loci genomes is something like [0, 0, 0, … 0, 1, 1, … 1] , then evaluating each segment of for example length 4 and put them together would give something like [0, 0, 1, 1, 0, 0, 1, 1, …]
Some advice:
Represent your results more clearly, because I had to modify your code to see the fitness of all the segments put together (I confirm that in this case putting together the segments with fitness 1, returns a 1000-loci genome with fitness 1’s)
Remove or correct the cells with errors (to solve the error is enough to type “random.choices” instead of only “choices” since you have imported all the package “random”)
Try to implement some other techniques typical of the genetic algorithm to solve this type of problems
Add some markdowns or some comments to explain what you are doing also if the code is simple.
Some considerations:
Problems:
Some advice: