The code is well-written, and the comments in it really help with understanding. I like that you chose to implement not just an evolutionary algorithm but also an island model, using some techniques we've learned about recently, like extinction and migrants.
A suggestion I have is to try using slightly different settings for your algorithms. In my opinion, using 2000 iterations with a population size of 10 and offspring size of 60 seems a bit unbalanced. You can get a much higher max_fitness by increasing your population and offspring while reducing the number of iterations to avoid too many fitness calls.
For example, with 1500 iterations and a population size of 200, offspring size of 300, you can achieve 100% max_fitness for PROBLEM_SIZE=1 in both models you used and get close to 100% for PROBLEM_SIZE=2. In any case, performance improves considerably for all PROBLEM_SIZE, with a more extensive selection among individuals in your population, resulting in more widespread mutations and crossovers.
Either way, your work is really good—congratulations!
The code is well-written, and the comments in it really help with understanding. I like that you chose to implement not just an evolutionary algorithm but also an island model, using some techniques we've learned about recently, like extinction and migrants.
A suggestion I have is to try using slightly different settings for your algorithms. In my opinion, using 2000 iterations with a population size of 10 and offspring size of 60 seems a bit unbalanced. You can get a much higher max_fitness by increasing your population and offspring while reducing the number of iterations to avoid too many fitness calls. For example, with 1500 iterations and a population size of 200, offspring size of 300, you can achieve 100% max_fitness for PROBLEM_SIZE=1 in both models you used and get close to 100% for PROBLEM_SIZE=2. In any case, performance improves considerably for all PROBLEM_SIZE, with a more extensive selection among individuals in your population, resulting in more widespread mutations and crossovers.
Either way, your work is really good—congratulations!