title: Powell's method
text: # Powell's method
  
  Powell's method, strictly Powell's conjugate direction method, is an algorithm proposed by Michael J. D. Powell for finding a local minimum of a function. The function need not be differentiable, and no derivatives are taken.
  
  The function must be a real-valued function of a fixed number of real-valued inputs. The caller passes in the initial point. The caller also passes in a set of initial search vectors. Typically N search vectors (say ${s_1,$ …, $s_N}{\textstyle$ \{s_{1}, \dots , s_{N}\}}) are passed in which are simply the normals aligned to each axis.
  
  The method minimises the function by a bi-directional search along each search vector, in turn. The bi-directional line search along each search vector can be done by Golden-section search or Brent's method. Let the minima found during each bi-directional line search be ${x_0+α_1s_1,$ $x_0+∑_{i=1}^2α_is_i,$ …, $x_0+∑_{i=1}^Nα_is_i}{\textstyle$ \{x_{0}+\alpha _{1}s_{1}, {x}_{0}+\sum _{i=1}^{2}\alpha _{i}{s}_{i}, \dots , {x}_{0}+\sum _{i=1}^{N}\alpha _{i}{s}_{i}\}}, where $x_0{\textstyle$ {x}_{0}} is the initial starting point and $α_i{\textstyle$ \alpha _{i}} is the scalar determined during bi-directional search along $s_i{\textstyle$ {s}_{i}}. The new position $(x_1{\textstyle$ x_{1}}) can then be expressed as a linear combination of the search vectors i.e. $x_1=x_0+∑_{i=1}^Nα_is_i{\textstyle$ x_{1}=x_{0}+\sum _{i=1}^{N}\alpha _{i}s_{i}}. The new displacement vector $(∑_{i=1}^Nα_is_i{\textstyle$ \sum _{i=1}^{N}\alpha _{i}s_{i}}) becomes a new search vector, and is added to the end of the search vector list. Meanwhile, the search vector which contributed most to the new direction, i.e. the one which was most successful $(i_d=arg⁡max_{i=1}^N|α_i|‖s_i‖{\textstyle$ i_{d}=\arg \max _{i=1}^{N}|\alpha _{i}|\|s_{i}\|}), is deleted from the search vector list. The new set of N search vectors is ${s_1,$ …, $s_{id−1},$ $s_{id+1},$ …, $s_N,$ $∑_{i=1}^Nα_is_i}{\textstyle$ \{s_{1}, \dots , s_{i_{d}-1}, s_{i_{d}+1}, \dots , s_{N}, \sum _{i=1}^{N}\alpha _{i}s_{i}\}}. The algorithm iterates an arbitrary number of times until no significant improvement is made.
  
  The method is useful for calculating the local minimum of a continuous but complex function, especially one without an underlying mathematical definition, because it is not necessary to take derivatives. The basic algorithm is simple; the complexity is in the linear searches along the search vectors, which can be achieved via Brent's method.
  
  