Algorithm Selection
Preprocessing
Scaling
When this is True, the Optimizer attempts to rescale decision variables and constraints internally for the simplex algorithm, which usually leads to be reliable results and fewer iterations. A poorly scaled model, in which values of the objective, constraints, or intermediate results differ by several orders of magnitude, can result in numeric instabilities within the Optimizer when scaling is turned off, due to the effects of finite precision computer arithmetic.
Default: False
Allowed range: 0 or 1
Presolve
When this is True, the LP/Quadratic engine performs a presolve step to detect singleton rows and columns, remove fixed variables and redundant constraints, and tighten bounds, prior to applying the simplex method.
Default: True
Allowed range: 0 or 1
Engine: LP/Quadratic
PreProcess
Turns on or off all integer preprocessing (on by default).
Default: 1
Allowed range: 0 or 1
Engine: LP/Quadratic
StrongBranching
This setting applies to integer and mixed-integer problems. When this is on, the Optimizer estimates the impact of branching on each integer variable of the objective function prior to beginning the branch and bound search. It does this by performing a few iterations of the dual simplex method after fixing each variable. This “experiment” provides the search with an estimate of which integer variables are likely to be most effective choices during the branch and bound search. Although the time spent in this estimation process can be moderately expensive, the cost is often regained many times over through a reduction in the number of branch-and-bound iterations that must be explored to find an optimal integer solution.
Default: 1
Allowed range: 0 or 1
Engine: LP/Quadratic
Debugging
SolveWithout
Means "Solve Without Integer Constraints." When this is True, any integer domain constraints are ignored, and the continuous, and the continuous version of the problem is solved instead. The effect is the same as changing the domain to Continuous while leaving the variable bounds in, but can be more convenient in some cases when debugging.
Default: 0
Allowed range: 0 or 1
IISBounds
Determines whether variable bounds should be included in the infeasibility search conducted by OptFindIIS() or OptWriteIIS(). When set to 1, only a subset of the scalar constraints along the .ConstraintVector index is considered. When set to 0, variable bounds can be eliminated in order to find an IIS with a greater number of constraints. This parameter is only used by OptFindIIS() when the second optional parameter, newLp, is True. When newLp is True, OptFindIIS() returns a new «LP» object, from which you can use OptInfo() to access the list of constraints and list of variable bounds present in the IIS. When newLp is False, since only a subset of the .ConstraintVector index is returned, OptFindIIS() relaxes only constraints, leaving variable bounds in tact.
Default: 0
Allowed range: 0 or 1
Numeric estimation
Derivatives
The Derivatives setting controls how derivatives are computed. These values are possible:
1 = forward
: This is the default if Jacobian and gradient parameters are not supplied. The Optimizer estimates derivatives using forward differencing, i.e.,
- [math]\displaystyle{ \frac {\part}{\part(x)}=\frac {f(x+\Delta) - f(x)}{\Delta} }[/math]
2 = central
: The Optimizer estimates derivatives using central differencing, i.e.,
- [math]\displaystyle{ \frac {\part}{\part(x)}=\frac {f(x+\Delta) - f(x-\Delta)}{2\Delta} }[/math]
3 = jacobian
: The Optimizer computes derivatives using the supplied Jacobian and gradient expressions. This is the default if these are supplied.4 = check
: The Optimizer computes derivatives using the supplied Jacobian expression and also estimates the Jacobian using finite differencing. If they don’t agree to within a small tolerance, the optimization aborts with OptStatusNum() = 67 (“error in evaluating problem functions”). This option is useful for testing whether the Jacobian is accurate.
StepSize
The step size used to estimate derivatives numerically. This is the value in the estimates listed in the preceding Derivatives description.
Default: 10-6
Allowed range: 10-9 to 10-4
SearchOption
Controls how the gradient-based search determines the next point to jump to during search:
- 0 = Newton: Uses a quasi-Newton method, maintaining an approximate Hessian matrix for the reduced gradient function.
- 1 = Conjugate-gradient: Use a conjugate gradient method, which does not require the Hessian.
Default: 0
Allowed range: 0 or 1
Estimates
The Estimates setting controls the method used to estimate the initial values for the basic decision variables at the beginning of each one-dimensional line search:
- 0 = linear: Uses linear-extrapolation from the line tangent to the reduced objective function.
- 1 = quadratic: Extrapolates to the extrema of a quadratic fitted to the reduced objective at its current point.
Default: 0
Allowed range: 0 or 1
RecognizeLinear
When set to 1, the Optimizer attempts to detect automatically decision variables that influence the objective and constraints in a linear fashion. It can then save time by pre-computing partial derivatives for these variables for the rest of the search. This aggressive strategy can create problems when a dependence changes dramatically throughout the search space, particularly when a decision variable is near linear around the starting point, but the gradient changes elsewhere in the search space. When the solution is reached, the Optimizer recomputes the derivatives and verifies them against the assumed values. If they do not agree, the status text “The linearity conditions required by this solver engine are not satisfied” is returned.
Engine: GRG Nonlinear
Default: 0 (select default)
Allowed range: 0 or 1
SOCP barrier search
In addition to the many search control settings available of linear programs (covered in the previous chapter), a few additional settings can be used to control the search when solving quadratically constrained problems using the SOCP Barrier engine. These parameters are set using the settingName and settingValue parameters to DefineOptimization(), as described in Specifying Settings.
SearchDirection
Controls the search direction on each iteration of the SOCP Barrier engine. The Power class method is a technique with the long-step barrier algorithm leading to a polynomial complexity. The dual scaling method uses HKM (Helmberg, Kojima, and Monteiro) dual scaling in which a Newton direction is found from the linearization of a symmetrized version of the optimality conditions. Either of these can be further modified by a predictor-corrector term.
Default: 0 (off)
Allowed range: 1 = Power class, 2 = Power class with predictor-corrector, 3 = dual scaling, or 4 = dual scaling with predictor-corrector.
Engine: SOCP Barrier
PowerIndex
This parameter is used to select a particular search direction when SearchDirection is set to 1 or 2.
Default: 1
Allowed range: non-negative integer
Engine: SOCP Barrier
StepSizeFactor
The relative step size (between 0 and 1) that the SOCP Barrier engine can take towards the constraint boundary at each iteration.
Default: 0.99
Allowed range: 0.00 to 0.99
Engine: SOCP Barrier
GapTolerance
The SOCP Barrier Solver uses a primal-dual method that computes new objective values for the primal problem and the dual problem at each iteration. When the gap or difference between these two objective values is less than the gap tolerance, the SOCP Barrier Solver stops and declares the current solution optimal.
Engine: SOCP Barrier
Default: 10-6
Allowed range: 0 to 1
FeasibilityTolerance
The SOCP Barrier engine considers a solution feasible when the constraints are satisfied to within this relative tolerance.
Engine: SOCP Barrier
Default: 10-6
Allowed range: 0 to 1
Evolutionary search controls
PopulationSize
Controls the population size of candidate solutions maintained by the Evolutionary engine, or the number of starting points for MultiStart in the GRG Nonlinear engine. MultiStart has a minimum population size of 10. If you specify 0, or any number smaller than 10, then the number of starting points used is 10 times the number of decision variables, but no more than 200.
Engine: GRG Nonlinear, Evolutionary
Default: 0 (automatic)
Allowed range: 0, or integer >= 10
MutationRate
The probability that the Evolutionary Optimizer engine, on one of its major iterations, will attempt to generate a new point by “mutating” or altering one or more decision variable values of a current point in the population of candidate solutions.
Engine: Evolutionary
Default: 0.075
Allowed range: 0 to 1
ExtinctionRate
This determines how often the Evolutionary engine throws out its entire population, except for the very best candidate solutions, and starts over from scratch.
Engine: Evolutionary
Default: 0.5
Allowed range: 0 to 1
RandomSeed
Both engines use a pseudo-random component in their search for an optima. Thus, the final result can differ each time an optimization of the exact same problem is performed. By setting the random seed, you can ensure that the same sequence of pseudo-random numbers is used, so that the same result obtains every time the same problem is re-evaluated. If you do not specify the random seed, Analytica uses its internal random seed, so that when you first load a model and evaluate results in a fixed order, you get a predictable result. Setting RandomSeed to 0 causes the pseudo-random generated to be seeded using the system clock. Any positive value sets the initial seed to a fixed number.
Engine: GRG Nonlinear, Evolutionary
Default: (use Analytica’s random seed)
Allowed range: non-negative integer
Feasibility
When set to 1, the Evolutionary engine throws out all infeasible points, and keeps only feasible points in its population. When set to 0, it accepts feasible points in the population with a high penalty in the fitness score, which tends to be useful when it has a hard time finding feasible points.
Default: 0
Allowed range: 0 or 1
LocalSearch
Selects the local search strategy employed by the Evolutionary engine. In one step, or generation, of the algorithm, a possible mutation and a crossover occur, followed by a local search in some cases, followed by elimination of unfit members of the population. This parameter controls the method used for this local search. The decision for whether to apply a local search at a given generation is determined by two tests. First, the objective value for the starting point must exceed a certain threshold, and second, the point must be sufficiently far from any already identified local extrema. The threshold is based on the best objective found so far, but is adjusted dynamically as the search proceeds. The distance to local optima threshold is based on distance travelled previous times the local optima was reached.
There is a computational trade-off between the amount of time spent in local searches,versus the time spent in more global searches. The value of local searches depends on the nature of your problem. Roughly speaking, the Randomized method is the least expensive and the gradient method tends to be the most expensive (i.e., with more time devoted to local searches rather than global search).
Engine: Evolutionary
Default: 0
Allowed range: 0 to 3
1 = Randomized Local Search: Generates a small number of new trial points in the vicinity of the just-discovered “best” solution. Improved points are accepted into the population. 2 = Deterministic Pattern Search: Uses a deterministic “pattern search” method to seek improved points in the vicinity of the just-discovered “best” solution. Does not make useof the gradient, and so is effective for non-smooth functions. 3 = Gradient Local Search: Uses a quasi-Newton gradient descent search to locate an improved point to add to the population.
FixNonSmooth
Determines how non-smooth variables are handled during the local search step. If set, then only linear and nonlinear smooth variables are allowed to vary during the local search. Because gradients often exist at most points, even for discontinuous variables, leaving this off can still yield useful information in spite of the occasional invalid gradient.
Engine: Evolutionary
Default: 0
Allowed range: 0 or 1
Enable comment auto-refresher