:MULTIPLE_START=OFF {OFF | RANDOM | RRANDOM | XPARALLEL | RPARALLEL | GRID | VECTOR | SVECTOR| }
This option restarts optimization multiple times from different starting points or, if :OPTIMIZER=OFF, simulates the model for different values of the search parameters.
If MULTIPLE_START is OFF, then a single optimization is performed. Setting both OPTIMIZER and MULTIPLE_START to OFF does not make sense.
If MULTIPLE_START is set to RANDOM or RRANDOM the optimizer will never stop unless you click on the Cancel button to interrupt it, or set an iteration limit in the .voc editor. GRID will stop, but probably not after a reasonable time since the potential number of simulations with GRID is 1024 to the power of the total number of search parameters. When the optimizer receives the Cancel command, it shuts down cleanly, writing out the best values found to the file runname.out. The files xxx_startpoint.tab, xxx_startpoint.dat, xxx_endpoint.tab, xxx_endpoint.dat, and xxx_vector.dat (if VECTOR is specified) might also be created. These files and the conditions under which they are created are discussed in the section "Optimization Output."
If MULTIPLE_START is RANDOM, starting points for new optimizations are picked randomly and uniformly over the range of each parameter. A different random series for selecting these starting points can be generated by changing the value of :SEED. The first point used for optimization is always the initial setting of the search parameters.
RRANDOM is the same as RANDOM except both the values of the search parameters and the order in which they are included in the search vector are randomized. For well behaved payoff surfaces the search order does not matter. However, for payoff surfaces with multiple maxima or other degeneracies changing the search order can make a difference.
MULTIPLE_START = XPARALLEL is like OFF, but with search directions delegated to multiple threads. See parallel simulation topic for details.
MULTIPLE_START = RPARALLEL is like RRANDOM, but with restarts delegated to multiple threads. See parallel simulation topic for details.
If MULTIPLE_START is GRID, starting points are computed over successively finer grids over the range of each parameter. This first grid computes the endpoints of the ranges, the next grid also computes the midpoints, and each successive grid divides the previous grid by 2. This continues for up to 1024 divisions (which could take years!) unless it is interrupted.
If MULTIPLE_START is VECTOR, starting points are computed over uniformly partitioned values of each parameter. Unlike GRID, VECTOR changes only one parameter at a time. VECTOR searches the first parameter from its minimum to maximum values, then the second, and so on. The partition is the maximum - minimum value over the setting of VECTOR_POINTS.
SVECTOR (for Slice VECTOR) is similar to VECTOR except that instead of doing each parameter successively, all parameters are changed at once. Thus, instead of a slice of the payoff surface along a single parameter, you can get a slice along an arbitrary vector in the parameter space. All elements of that vector run from their min to their max, unless a negative absolute or fractional tolerance is given. In this case the value will run from max to min.
The ranges for parameters are specified as constraints on the parameters being optimized. If constraints are missing, the maximum and minimum available floating point numbers (roughly 1E34) are used as for GRID and VECTOR. These are not typically good choices unless you are just testing extreme conditions. A grid search on an unconstrained pattern would start at -1E34, then do 1E34, then do about 0.0, then do -1E16 and so on. The number of points it hits that are sensible is likely to be small in this circumstance.
For RANDOM and RRANDOM, the following rules are used to compute search starting points:*
• | Upper and lower constraints present: |
min <= parameter <= max
A number, X, will be chosen in the range (0,1). The starting value for the parameter will be:
parameter = min + X*(max - min)
• | Only the lower constraint present: |
min <= parameter
A number, X, will be chosen in the range (0,1). The starting value for the parameter will be:
parameter = min + 1/X^3 - 1
• | Only the upper constraint present: |
parameter <= max
A number, X, will be chosen in the range (0,1). The starting value for the parameter will be:
parameter = max - 1/X^3 + 1
• | Neither constraint present: |
parameter
A number, X, will be chosen in the range (0,1). The starting value for the parameter will be:
parameter = 1/X^3 - 1/(1 - X)^3
In the unconstrained cases, this yields a heavy-tailed distribution of parameters that explores values near the boundary (within 1 unit) and far away (on the order of trillions in samples of a few thousand).
Output
Two files, runname_startpoint.dat and runname_startpoint.tab, will be created containing the starting values for the parameters and the payoffs at these starting values. If the OPTIMIZER=POWELL option is set, two additional files runname_endpoint.dat and runname_endpoint.tab will be created, showing the parameter values and payoffs that result from these starting conditions. These files contain the same information in different formats. The .dat files can be loaded into the environment using Dat2vdf for further review.
If MULTIPLE_START=VECTOR is used and OPTIMIZER=OFF, an additional file named vector.dat will be created listing the payoff as a function of each parameter value. Again, this can be loaded into the environment using Dat2vdf, although the graphs look odd if more than one search parameter is specified because of the incommensurate time axes. This vector.dat information is very useful for viewing separate cuts of the likelihood surface. This file is not created when MULTIPLE_START=SVECTOR as there is no longer a sensible X axis choice. For SVECTOR the startpoint files are more appropriate.
*Note:
Prior to Version 6.3, the following rules determined initial distributions:
• | Upper and lower constraints present: |
min <= parameter <= max
A number, X, will be chosen in the range 0 to 1. The starting value for the parameter will be:
parameter = min + X*(max - min)
• | Only the lower constraint present: |
min <= parameter
A number, X, will be chosen in the range [0,1) (including 0 but not including 1.0). The starting value for the parameter will be:
parameter = min + 1/(1 - X)
• | Only the upper constraint present: |
parameter <= max
A number, X, will be chosen in the range [0,1) (including 0 but not including 1.0). The starting value for the parameter will be:
parameter = max - 1/(1 - X)
• | Neither constraint present: |
parameter
A number, X, will be chosen in the range (-1,1) exclusive. The starting value for the parameter will be:
parameter = 1/(1 - X) - 1/(1 + X)
This approach distributed the bulk of the probability density near 1 in unbounded cases. The new approach is more consistent with truly unbounded values.