optimizer function

Carries out optimization (finding a minimum)