> "did this evolutionary change mean they survived / reproduced more"
You're just renaming the terms. More/less is a fitness gradient, and the thing that lives there is called an optimizer.
Evolution is a tunable-scale optimizer. It's not perfectly local, because it shotguns to avoid local optima on a (bumpy/noisy) fitness landscape. If you tune the 'shot pattern' really wide (infinite copies with infinite variation), you'd genuinely get a one-shot global optimizer at the limit. But that's not efficient nor realistic, so typically it's somewhere in between.
Uh, compare maze solvers: you've got your greedy direct route (gets stuck in the first corner) , Dijkstra (finds all the answers but takes ages), and then stuff like A*, which is a happy medium. Evolutionary algos can be used to solve mazes just the same. I think it's a bit heavier on resources than A*, but well suited to embarrassingly parallel optimization.
edit: Heh, I actually had claude build a comparative simulation. Turns out evolution is actually very slow on a single optimization axis, and gets stumped in mazes where the detour length is greater than the "temperature"/"spread"/"noise". The actual performance metrics are fascinating. But once tuned, it is able to solve mazes. Thus an optimizer. QED :-P