7.48 parallel_optimization_setup
- type: setup command (for Pelegant only).
- function: define overall parallel optimization parameters and methods.
- N.B.: In addition to the optimization parameters used in the optimization_setup
command, several new parameters are added for parallel optimization. User should replace
optimization_setup with parallel_optimization_setup and append necessary parameters.
- Command syntax, including use of equations and subcommands, is discussed in 7.2.
¶llel_optimization_setup
STRING method = "simplex";
double hybrid_simplex_tolerance = -0.01;
double hybrid_simplex_tolerance_count = 2;
long hybrid_simplex_comparison_interval = 0;
double random_factor = 1
long n_iterations = 10000;
long max_no_change = 10000;
long population_size = 100;
STRING population_log = NULL;
long print_all_individuals = 0;
long output_sparsing_factor = 1;
STRING crossover = "twopoint";
STRING simplex_log = NULL;
long simplex_log_interval = 1;
&end
- method — May be one of “genetic”, “hybridsimplex” or “swarm”. If the default “simplex”
method is chosen, all the processors will do the same optimization as the serial version if
there is only one particle for optimization tracking, or do optimization tracking in parallel if
the number of particles is larger than the number of CPUs. All algorithms can be used for
global optimization. “swarm” is recommended when there is sufficient computation resource
available, so it can reach the optimization target fast. “hybridsimplex” is recommended when
the initial point is close to the optimal result. “genetic” can be chosen for a global optimizer
with a random start point (0 should be avoided for any initial coordinate).
- random_factor — The factor to scale the step size for both parallel swarm and genetic
methods.
- n_restarts — For the parallel “hybridsimplex” method, this number should be set larger
than 1, so the the best result across all processors can be used for the next restart. The
parameter is not used for the swarm method.
- hybrid_simplex_tolerance , hybrid_simplex_tolerance_count — For the parallel
“hybridsimplex” method, these set, respectively, the tolerance value for changes between full
iterations (restarts). If the result does not improve by more than hybrid_simplex_tolerance
after hybrid_simplex_tolerance_count iterations, the optimization terminates.
- hybrid_simplex_comparison_interval — For the parallel “hybridsimplex” method, sets
the interval between comparisons of progress among the several optimizations, in units
of function evaluations. Once any of the optimizations is below the target value, all
optimizations are sent an abort command. Ignored if zero or negative, in which case all
optimizations run to completion. Depending on the time required to perform a single function
evaluation, setting this to a small value may increase the required run time due to the overhead
of frequent interprocessor communication.
- simplex_log — For the parallel “hybridsimplex” method, rootname for files to which data
from each simplex optimization will be written. Intended only for debugging as it will adversely
impact performance.
- simplex_log_interval — Interval at which simplex_log files will be updated.
- n_iterations — The maximal number of generations/iterations for the parallel genetic and
particle swarm optimization.
- population_size — The number of individuals to be generated for each generation/iteration
for the swarm and genetic method. For the hybridsimplex method, the number of individuals
is equal to the number of processors used.
- max_no_change — The maximal number of generations in which no change in the best
evaluation is allowed before the genetic method stops (genetic method only).
- n_evaluations — This is not used as a stop condition in the genetic optimization. The
n_iterations or max_no_change can be used instead. For the hybridsimplex method, this is
the number of allowed evaluations per restart.
- population_log — An SDDS file to which the best individual in a population can be written
after each iteration as optimization proceeds. Recommended value: “%s.pop”. For the parallel
genetic method, user can choose to print out all the individuals (See print_all_individuals).
- print_all_individuals — If nonzero, all the strings in a population will be recorded in the
population_log file. This is supported for the genetic method only.
- output_sparsing_factor — For genetic optimization, this is used to set the frequency of
printing strings in the log file with the number of generations as the interval.
- crossover — For genetic optimization, it allows the user to choose a crossover type from
“onepoint”, “twopoint” and “uniform”. “twopoint” is the default crossover type. If the
dimension is 2, it will be set to onepoint crossover.
Note:
- Genetic optimization in Pelegant terminates when at least one of the stopping rules specified
has been met. The two stopping rules are:
- generation limit (n_iterations) exceeded
- no change in the best solution found in a given number of generations. The default is
to stop when the generation limit (10000 is the default value) is reached. While the
max_no_change is more favorite to use, as it will stop until the result can not be improved
after a certain number of iterations (10000 is the default value). The n_iterations can be
set to a very large number to use this rule as the stop condition alone.
- step size control – The mutation step size in the genetic optimization is selected from a
Gaussian distribution with mean 0 and standard deviation step_size, where step_size is
provided by user. All the dimensions will use the same standard deviation for an iteration.
The step_size of the first dimension provided by user will be used as the original step
size for all the dimensions. The step size will be reduced by the golden ratio (1.618)
if the best value is unchanged after every 3000 iterations. After every 3000 iterations
since the last time the step size is reduced, the step size will be increased by the golden
ratio.
- As the genetic optimization implementation in Pelegant internally updates individuals with a
relative change of the current value for a variable, 0 should be avoided to use as an initial
value.