Harder puzzles may require larger population sizes in order to reliably find solutions. This
is because fewer givens (fixed cells) means a significantly larger search space of potential
solutions.
The evolutionary algorithm uses two operators. Ordered mutation is applied within rows (i.e.
cells are swapped horizontally but never vertically). The mutation operator respects fixed cells
and does not attempt to move them. An additional heuristic avoids mutations that are certain to
result in invalid solutions (e.g. moving a value into a column where it will duplicate a fixed
cell elsewhere in that column).
Cross-over is applied vertically to whole grids (i.e. entire rows are moved intact, columns
are disrupted). This combination of operators ensures that rows never contain duplicates, so it
is only necessary to check columns and sub-grids.
Occasionally the solver may get stuck on an "almost" solution and struggle to make the final
adjustments to complete the puzzle (this is because the modifications made by the program are
entirely random). The likelihood of this happening decreases as the population size
increases. If the solver does appear to be stuck, the attempt can be aborted and you can
try again.