Procedure 3-1 is the pseudo-code for the primitive version of Local-Optimize . The procedure takes steps in random directions. If a step leads to a better point, the step size is doubled. If the step fails, another one is tried. If too many steps fail in a row, the step size is reduced to half. The best point is returned, when the step size shrinks below a certain threshold.
With a typical genetic algorithm, it is not easy to tell whether the algorithm has located an exact maximum. Procedure 2-1 is based on staying away from the local maxima. If Local-Optimize is not able to give an exact location of a maximum, the search will be pushed away from that region, and it will be a long time before the algorithm finds the better points nearby. Thus Local-Optimize , by ending with a fine grained search with small step sizes, aims at locating the maxima precisely.
It is advisable to shrink and expand rapidly when using large steps, and try out more random directions when about to go below the THRESHOLD. This can be achieved by making MAXITER a function of the step size. The algorithm should try more random vectors at smaller step sizes.
For high dimensional problems, choosing random vectors can be costly and not useful. In that case the Random-Vector procedure can return vectors in unit directions. This is the convention I adopted for the results chapter. More precisely, a vector in a unit direction and its opposite were tried at all step sizes except for the smallest step size, where the algorithm cycled through all the unit directions.