Derivative-Free Optimization: Theory and Practice