Well, I can't imagine how a programmer can make this work in the first place.
The way I think would be optimal is if you could make it so the program throws a dice for each bot, like if you have point mutations set to 5000, then it should be like throwing a 5000-sided dice every cycle for each bot. If 5000 comes up then a point mutation occurs. The same for the copy mutation, but instead it throws it everytime a bot multiply.
Maybe that would be too much calculations for the program, especially if you're running with thousands of bots.