In our model, a pool of DNA fragments is created each cycle, and the fragment with the best uptake sequence score gets to replace the homologous segment of the genome whose evolution is being simulated. The uptake sequence score is determined by using a sliding window to compare the fragment's sequence to the designated uptake sequence. For a long fragment this score is expected to reflect the combined effect of multiple uptake sequences. But at present the model is using short fragments, so the score is likely to just be that of a single uptake sequence.
This means that, once the genome contains a 'perfect' uptake sequence at one position, a fragment homologous to that position is expected to always out-score any other fragments in the pool, and thus always be the one that replaces the resident sequence. Thus one good match prevents the gradual evolution of other not-quite-as-good matches at other positions.
There's a different way to do the competition that doesn't have this problem. Rather than having multiple fragments 'compete' for the best score, with the winner taking the only opportunity to recombine with the genome, we can have each fragment in the pool independently challenge the odds of being taken up. Uptake of one fragment would not affect the chance of any other fragment being taken up in the same cycle.
This will require some rewriting of the code. But it shouldn't be a big deal, and luckily our undergraduate programmer will have more time to work for us once exams are over at the end of the month.