  Any optimization algorithm programming interface can be seen as a black-box
function with additional free parameters. In this spirit, simulated annealing
(SA) can be implemented in pseudo-code within the dimensions of a single slide
with free parameters relating to the annealing schedule. Such an
implementation, however, necessarily neglects much of the structure necessary
to take advantage of advances in computing resources and algorithmic
breakthroughs. Simulated annealing is often introduced in myriad disciplines,
from discrete examples like the Traveling Salesman Problem (TSP) to molecular
cluster potential energy exploration or even explorations of a protein's
configurational space. Theoretical guarantees also demand a stricter structure
in terms of statistical quantities, which cannot simply be left to the user. We
will introduce several standard paradigms and demonstrate how these can be
"lifted" into a unified framework using object-oriented programming in Python.
We demonstrate how clean, interoperable, reproducible programming libraries can
be used to access and rapidly iterate on variants of Simulated Annealing in a
manner which can be extended to serve as a best practices blueprint or design
pattern for a data-driven optimization library.
