SCOlib User Manual Version Version 1.0

## Solis-Wets Local Search

### Overview

The class SWOpt provides a framework for implementing the stochastic direct search algorithms described by Solis and Wets [SolWet81]. Figure SW-1 provides pseudo-code for the main loop of SWOpt. These algorithms generate a new iterate using coordinate-wise steps. If the new iterate is better than the current iterate then it is accepted and the algorithm repeats. Otherwise the algorithm considers a step in the opposite direction. If this new point is also worse that then current iterate then a new iterate is again generated in the neighborhood of the current iterate. SWOpt also defines mechanisms for expanding and contracting the step size of the offsets used to generate the new iterate.

    best = INFTY
    bias = 0
    n_succ = 0
    n_fail = 0

    while (rho > rho_lower_bound)
      generate dx
      curr = f(x + dx + bias)
      if (curr < best)
         bias = 0.2 * bias + 0.4 * (dx + bias)
         x += dx + bias
         n_succ++
         n_fail=0
      else
         curr = f(x - dx - bias)
         if (curr < best)
            bias = bias - 0.4 * (dx + bias)
            x -= dx + bias
            n_succ++
            n_fail=0
         else
            bias = bias/2
            n_fail++
            n_succ=0
         endif
      endif

      if (n_succ >= max_succ)
         n_succ=0
         rho = ex_factor * rho
      endif
      if (n_fail >= max_fail)
         n_fail=0
         rho = ct_factor * rho
      endif
    endwhile

SW-1: Pseudo-code for the Solis-Wets algorithms.

Classes SWOpt1 and SWOpt2 differ in their definition of the private method `gen_new_point`, which is used to generate a new iterate. SWOpt1 generates a iterate using normally distributed deviates with standard deviation `rho`. SWOpt2 generates a new iterate using uniformly distributed deviates from the range `rho` , `rho` .

### Current Status

These classes are stable.