public override bool Maximize()
{
if (Gradient == null)
throw new InvalidOperationException("gradient");
NonlinearObjectiveFunction.CheckGradient(Gradient, Solution);
var g = Gradient;
Gradient = (x) => g(x).Multiply(-1);
bool success = base.Maximize();
Gradient = g;
return success;
}