Larger values may speed up computation if the objective function is very fast. On problems with slow objective functions, this should be equal to 1. HowOftenUpdateRotation: How often the rotation should be updated.Ma圎valuations: The maximum number of total function evaluations.b: The b vector from the inequality A*x A: The A matrix from the inequality A*x Either empty, a scalar, or a vector of upper bounds by coordinate, with the same number of elements as xMean. UB: A lower bound on the search for xMean.Either empty, a scalar, or a vector of lower bounds by coordinate, with the same number of elements as xMean. LB: A lower bound on the search for xMean.Either a scalar, or a vector of minimum search radiuses by coordinate, with the same number of elements as xMean. The search will stop when all coordinates of sigma are below this value. Either a scalar, or a vector of search radiuses by coordinate, with the same number of elements as xMean. To assist with converting arbitrary functions to this form, three wrappers (SerialWrapper, ParForParallelWrapper, TimedParallelWrapper) are provided.
The objective must be vectorized, supporting a matrix of inputs (with one column per observation), and returning a vector of outputs. FitnessFunction: The objective function, a function handle.= ACD( FitnessFunction, xMean, sigma, LB, UB, A, b, Ma圎valuations, StopFitness, HowOftenUpdateRotation, Order, SearchDimension, Resume ) With NonProductSearchDimension * ProductSearchDimension = d, the search is over d-tuples of coordinates.At Order n, this uses (2^(NonProductSearchDimension+n)-1)^ProductSearchDimension-1 points per iteration.At Order 1, this uses 8 points per iteration if ProductSearchDimension = 2, or 6 points per iteration if NonProductSearchDimension = 2, so may be perfect for 8 core desktops in either case.With `NonProductSearchDimension * ProductSearchDimension = 2', the search is over pairs of coordinates, rather than coordinate by coordinate.In all cases, the parallelization is providing improved univariate search in each iteration, reducing the required number of iterations.At Order n this uses 2^(1+n)-2 points per iteration.
At Order 2 this uses 6 points per iteration, and may be faster than serial code when the serial objective function is slow to evaluate, and you have more than 6 cores.At Order 1 this uses just 2 points per iteration, and will often be slower than serial code if the objective is parallel.With NonProductSearchDimension * ProductSearchDimension = 1, the search is coordinate by coordinate.ACD is a (potentially) parallelized version of ACD0, with vectorization/parallelization controlled by the Order, NonProductSearchDimension and ProductSearchDimension inputs.Extra features include support for linear constraints (with clipping to the bound) and slightly different input arguments (an initial point, and sigma, the initial search standard deviation(s)).