  This paper presents Automatic Algorithm Discoverer (AAD), an evolutionary
framework for synthesizing programs of high complexity. To guide evolution,
prior evolutionary algorithms have depended on fitness (objective) functions,
which are challenging to design. To make evolutionary progress, instead, AAD
employs Problem Guided Evolution (PGE), which requires introduction of a group
of problems together. With PGE, solutions discovered for simpler problems are
used to solve more complex problems in the same group. PGE also enables several
new evolutionary strategies, and naturally yields to High-Performance Computing
(HPC) techniques.
  We find that PGE and related evolutionary strategies enable AAD to discover
algorithms of similar or higher complexity relative to the state-of-the-art.
Specifically, AAD produces Python code for 29 array/vector problems ranging
from min, max, reverse, to more challenging problems like sorting and
matrix-vector multiplication. Additionally, we find that AAD shows adaptability
to constrained environments/inputs and demonstrates outside-of-the-box problem
solving abilities.
