# Solver options

Here are all the options that can be used in SHOT compiled. Note that the default value is normally a good starting point, so do not change options unless you have a good reason.

These settings control the various functionality of the dual strategy in SHOT, i.e., the polyhedral outer approximation utilizing the ESH or ECP algorithms.

Name and description | Valid values | Default value |
---|---|---|

Dual.CutStrategy
Dual cut strategy
0: ESH 1: ECP | {0,1} | 0 |

These settings control various aspects of the ESH implementation, including the strategy to obtain the interior point.

Name and description | Valid values | Default value |
---|---|---|

Dual.ESH.InteriorPoint.CuttingPlane.ConstraintSelectionFactor
The fraction of violated constraints to generate cutting planes for | [0,1] | 0.25 |

Dual.ESH.InteriorPoint.CuttingPlane.IterationLimit
Iteration limit for minimax cutting plane solver | {1,...,∞} | 100 |

Dual.ESH.InteriorPoint.CuttingPlane.IterationLimitSubsolver
Iteration limit for minimization subsolver | {0,...,∞} | 100 |

Dual.ESH.InteriorPoint.CuttingPlane.Reuse
Reuse valid cutting planes in main dual model | true/false | false |

Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceAbs
Absolute termination tolerance between LP and linesearch objective | [0,∞] | 1 |

Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceRel
Relative termination tolerance between LP and linesearch objective | [0,∞] | 1 |

Dual.ESH.InteriorPoint.CuttingPlane.TimeLimit
Time limit for minimax solver | [0,∞] | 10 |

Dual.ESH.InteriorPoint.MinimaxObjectiveLowerBound
Lower bound for minimax objective variable | [-∞,0] | -1000000000000 |

Dual.ESH.InteriorPoint.MinimaxObjectiveUpperBound
Upper bound for minimax objective variable | [-∞,∞] | 0.1 |

Dual.ESH.InteriorPoint.UsePrimalSolution
Utilize primal solution as interior point
0: No 1: Add as new 2: Replace old 3: Use avarage | {0,...,3} | 1 |

Dual.ESH.Rootsearch.ConstraintTolerance
Constraint tolerance for when not to add individual hyperplanes | [0,∞] | 1e-08 |

Dual.ESH.Rootsearch.UniqueConstraints
Allow only one hyperplane per constraint per iteration | true/false | false |

Dual.ESH.Rootsearch.UseMaxFunction
Perform rootsearch on max function, otherwise on individual constraints | true/false | false |

These settings control how the cutting planes or supporting hyperplanes are generated.

Name and description | Valid values | Default value |
---|---|---|

Dual.HyperplaneCuts.ConstraintSelectionFactor
The fraction of violated constraints to generate supporting hyperplanes / cutting planes for | [0,1] | 0.5 |

Dual.HyperplaneCuts.Delay
Add hyperplane cuts to model only after optimal MIP solution | true/false | true |

Dual.HyperplaneCuts.MaxConstraintFactor
Rootsearch performed on constraints with values larger than this factor times the maximum value | [1e-06,1] | 0.1 |

Dual.HyperplaneCuts.MaxPerIteration
Maximal number of hyperplanes to add per iteration | {0,...,∞} | 200 |

Dual.HyperplaneCuts.ObjectiveRootSearch
When to use the objective root search
0: Always 1: IfConvex 2: Never | {0,...,2} | 1 |

Dual.HyperplaneCuts.SaveHyperplanePoints
Whether to save the points in the generated hyperplanes list | true/false | false |

Dual.HyperplaneCuts.UseIntegerCuts
Add integer cuts for infeasible integer-combinations for binary problems | true/false | false |

These settings control the general functionality of the MIP solver in the dual strategy. Note that solver-specific settings for Cplex, Gurobi and Cbc are available under the "Subsolver" category.

Name and description | Valid values | Default value |
---|---|---|

Dual.MIP.CutOff.InitialValue
Initial cutoff value to use | [-∞,∞] | 1.7976931348623157e+308 |

Dual.MIP.CutOff.Tolerance
An extra tolerance for the objective cutoff value (to prevent infeasible subproblems) | [-∞,∞] | 1e-05 |

Dual.MIP.CutOff.UseInitialValue
Use the initial cutoff value | true/false | false |

Dual.MIP.InfeasibilityRepair.IntegerCuts
Allow feasibility repair of integer cuts | true/false | true |

Dual.MIP.InfeasibilityRepair.IterationLimit
Max number of infeasible problems repaired without primal objective value improvement | {0,...,∞} | 100 |

Dual.MIP.InfeasibilityRepair.TimeLimit
Time limit when reparing infeasible problem | [0,∞] | 10 |

Dual.MIP.InfeasibilityRepair.Use
Enable the infeasibility repair strategy for nonconvex problems | true/false | true |

Dual.MIP.NodeLimit
Node limit to use for MIP solver in single-tree strategy | [0,∞] | 1.7976931348623157e+308 |

Dual.MIP.NumberOfThreads
Number of threads to use in MIP solver: 0: Automatic | {0,...,999} | 0 |

Dual.MIP.OptimalityTolerance
The reduced-cost tolerance for optimality in the MIP solver | [1e-09,0.01] | 1e-06 |

Dual.MIP.Presolve.Frequency
When to call the MIP presolve
0: Never 1: Once 2: Always | {0,...,2} | 1 |

Dual.MIP.Presolve.RemoveRedundantConstraints
Remove redundant constraints (as determined by presolve) | true/false | false |

Dual.MIP.Presolve.UpdateObtainedBounds
Update bounds (from presolve) to the MIP model | true/false | true |

Dual.MIP.SolutionLimit.ForceOptimal.Iteration
Iterations without dual bound updates for forcing optimal MIP solution | {0,...,∞} | 10000 |

Dual.MIP.SolutionLimit.ForceOptimal.Time
Time (s) without dual bound updates for forcing optimal MIP solution | [0,∞] | 1000 |

Dual.MIP.SolutionLimit.IncreaseIterations
Max number of iterations between MIP solution limit increases | {0,...,∞} | 50 |

Dual.MIP.SolutionLimit.Initial
Initial MIP solution limit | {1,...,∞} | 1 |

Dual.MIP.SolutionLimit.UpdateTolerance
The constraint tolerance for when to update MIP solution limit | [0,∞] | 0.001 |

Dual.MIP.SolutionPool.Capacity
The maximum number of solutions in the solution pool | {0,...,∞} | 100 |

Dual.MIP.Solver
Which MIP solver to use
0: Cplex 1: Gurobi 2: Cbc | {0,...,2} | 1 |

Dual.MIP.UpdateObjectiveBounds
Update nonlinear objective variable bounds to primal/dual bounds | true/false | false |

These settings control the added dual reduction cuts from the primal solution that will try to force a better primal solution. This functionality is only used if SHOT cannot deduce that the problem is nonconvex .

Name and description | Valid values | Default value |
---|---|---|

Dual.ReductionCut.MaxIterations
Max number of primal cut reduction without primal improvement | {0,...,∞} | 5 |

Dual.ReductionCut.ReductionFactor
The factor used to reduce the cutoff value | [0,1] | 0.001 |

Dual.ReductionCut.Use
Enable the dual reduction cut strategy for nonconvex problems | true/false | true |

These settings contorl various aspects regarding integer-relaxation of the dual problem.

Name and description | Valid values | Default value |
---|---|---|

Dual.Relaxation.Frequency
The frequency to solve an LP problem: 0: Disable | {0,...,∞} | 0 |

Dual.Relaxation.IterationLimit
The max number of relaxed LP problems to solve initially | {0,...,∞} | 200 |

Dual.Relaxation.MaxLazyConstraints
Max number of lazy constraints to add in relaxed solutions in single-tree strategy | {0,...,∞} | 0 |

Dual.Relaxation.TerminationTolerance
Time limit (s) when solving LP problems initially | [-∞,∞] | 0.5 |

Dual.Relaxation.TimeLimit
Time limit (s) when solving LP problems initially | [0,∞] | 30 |

Dual.Relaxation.Use
Initially solve continuous dual relaxations | true/false | true |

The single-tree strategy is normally more efficient than the multi-tree one. However, not all MIP solvers support the required lazy constraint callbacks. These settings selects this strategy and controls its behaviour.

Name and description | Valid values | Default value |
---|---|---|

Dual.TreeStrategy
The main strategy to use
0: Multi-tree 1: Single-tree | {0,1} | 1 |

These settings control various aspects of SHOT's representation for and handling of the provided optimization model.

SHOT performs bound tightening to strengthen the internal representation of the problem. These settings control how and when bound tightening is performed.

Name and description | Valid values | Default value |
---|---|---|

Model.BoundTightening.FeasibilityBased.MaxIterations
Maximal number of bound tightening iterations | {0,...,∞} | 5 |

Model.BoundTightening.FeasibilityBased.TimeLimit
Time limit for bound tightening | [0,∞] | 2 |

Model.BoundTightening.FeasibilityBased.Use
Peform feasibility-based bound tightening | true/false | true |

Model.BoundTightening.FeasibilityBased.UseNonlinear
Peform feasibility-based bound tightening on nonlinear expressions | true/false | true |

Model.BoundTightening.InitialPOA.ConstraintTolerance
Constraint termination tolerance | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.CutStrategy
Dual cut strategy
0: ESH 1: ECP | {0,1} | 1 |

Model.BoundTightening.InitialPOA.IterationLimit
Iteration limit for POA | {0,...,∞} | 50 |

Model.BoundTightening.InitialPOA.ObjectiveConstraintTolerance
Objective constraint termination tolerance | [-∞,∞] | 0.001 |

Model.BoundTightening.InitialPOA.ObjectiveGapAbsolute
Absolute objective gap termination level | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.ObjectiveGapRelative
Relative objective gap termination level | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.StagnationConstraintTolerance
Tolerance factor for when no progress is made | [-∞,∞] | 0.01 |

Model.BoundTightening.InitialPOA.StagnationIterationLimit
Limit for iterations without significant progress | {0,...,∞} | 5 |

Model.BoundTightening.InitialPOA.TimeLimit
Time limit for initial POA | [-∞,∞] | 5 |

Model.BoundTightening.InitialPOA.Use
Create an initial polyhedral outer approximation | true/false | false |

These settings control the convexity detection functionality

Name and description | Valid values | Default value |
---|---|---|

Model.Convexity.AssumeConvex
Assume that the problem is convex | true/false | false |

Model.Convexity.Quadratics.EigenValueTolerance
Convexity tolerance for the eigenvalues of the Hessian matrix for quadratic terms | [0,∞] | 1e-05 |

These settings control the automatic reformulations performed in SHOT.

Name and description | Valid values | Default value |
---|---|---|

Model.Reformulation.Bilinear.AddConvexEnvelope
Add convex envelopes (subject to original bounds) to bilinear terms | true/false | false |

Model.Reformulation.Bilinear.IntegerFormulation
Reformulate integer bilinear terms
0: No 1: No if nonconvex quadratic terms allowed by MIP solver 2: Yes | {0,...,2} | 1 |

Model.Reformulation.Bilinear.IntegerFormulation.MaxDomain
Do not reformulate integer variables in bilinear terms which can assume more than this number of discrete values | {2,...,∞} | 100 |

Model.Reformulation.Constraint.PartitionNonlinearTerms
When to partition nonlinear sums in constraints
0: Always 1: If result is convex 2: Never | {0,...,2} | 1 |

Model.Reformulation.Constraint.PartitionQuadraticTerms
When to partition quadratic sums in constraints
0: Always 1: If result is convex 2: Never | {0,...,2} | 1 |

Model.Reformulation.Monomials.Extract
Extract monomial terms from nonlinear expressions | true/false | true |

Model.Reformulation.Monomials.Formulation
How to reformulate binary monomials
0: None 1: Simple 2: Costa and Liberti | {0,...,2} | 1 |

Model.Reformulation.ObjectiveFunction.Epigraph.Use
Reformulates a nonlinear objective as an auxiliary constraint | true/false | false |

Model.Reformulation.ObjectiveFunction.PartitionNonlinearTerms
When to partition nonlinear sums in objective function
0: Always 1: If result is convex 2: Never | {0,...,2} | 1 |

Model.Reformulation.ObjectiveFunction.PartitionQuadraticTerms
When to partition quadratic sums in objective function
0: Always 1: If result is convex 2: Never | {0,...,2} | 1 |

Model.Reformulation.Quadratics.EigenValueDecomposition.Formulation
Which formulation to use in eigenvalue decomposition
0: Term coefficient is included in reformulation 1: Term coefficient remains | {0,1} | 0 |

Model.Reformulation.Quadratics.EigenValueDecomposition.Method
Whether to use the eigen value decomposition of convex quadratic functions | true/false | false |

Model.Reformulation.Quadratics.EigenValueDecomposition.Use
Whether to use the eigenvalue decomposition of convex quadratic functions | true/false | false |

Model.Reformulation.Quadratics.ExtractStrategy
How to extract quadratic terms from nonlinear expressions
0: Do not extract 1: Extract to same objective or constraint 2: Extract to quadratic equality constraint if nonconvex 3: Extract to quadratic equality constraint even if convex | {0,...,3} | 1 |

Model.Reformulation.Quadratics.Strategy
How to treat quadratic functions
0: All nonlinear 1: Use quadratic objective 2: Use convex quadratic objective and constraints 3: Use nonconvex quadratic objective and constraints | {0,...,3} | 2 |

Model.Reformulation.Signomials.Extract
Extract signomial terms from nonlinear expressions | true/false | true |

These settings control the maximum variable bounds allowed in SHOT. Projection will be performed onto these intervals. Note that the MIP solvers may have stricter requirements, in which case those may be used.

Name and description | Valid values | Default value |
---|---|---|

Model.Variables.Continuous.MaximumUpperBound
Maximum upper bound for continuous variables | [-∞,∞] | 1e+50 |

Model.Variables.Continuous.MinimumLowerBound
Minimum lower bound for continuous variables | [-∞,∞] | -1e+50 |

Model.Variables.Integer.MaximumUpperBound
Maximum upper bound for integer variables | [-∞,∞] | 2000000000 |

Model.Variables.Integer.MinimumLowerBound
Minimum lower bound for integer variables | [-∞,∞] | -2000000000 |

Model.Variables.NonlinearObjectiveVariable.Bound
Max absolute bound for the auxiliary nonlinear objective variable | [-∞,∞] | 1000000000000 |

These settings control functionality used in the interfaces to different modeling environments.

These settings control functionality used in the GAMS interface.

Name and description | Valid values | Default value |
---|---|---|

ModelingSystem.GAMS.QExtractAlg
Extraction algorithm for quadratic equations in GAMS interface
0: automatic 1: threepass 2: doubleforward | {0,...,2} | 0 |

These settings control how much and what output is shown to the user from the solver.

Name and description | Valid values | Default value |
---|---|---|

Output.Console.DualSolver.Show
Show output from dual solver on console | true/false | false |

Output.Console.Iteration.Detail
When should the fixed strategy be used
0: Full 1: On objective gap update 2: On objective gap update and all primal NLP calls | {0,...,2} | 1 |

Output.Console.LogLevel
Log level for console output
0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off | {0,...,6} | 2 |

Output.Console.PrimalSolver.Show
Show output from primal solver on console | true/false | false |

Output.Debug.Enable
Use debug functionality | true/false | false |

Output.Debug.Path
The folder where to save the debug information | string | |

Output.File.LogLevel
Log level for file output
0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off | {0,...,6} | 2 |

Output.GAMS.AlternateSolutionsFile
Name of GAMS GDX file to write alternative solutions to | string | |

Output.OutputDirectory
Where to save the output files
0: Problem directory 1: Program directory | {0,1} | 1 |

Output.SaveNumberOfSolutions
Save max this number of primal solutions to OSrL or GDX file | {0,...,∞} | 1 |

These settings control the primal heuristics used in SHOT.

The main primal strategy in SHOT is to solve integer-fixed NLP problems. These settings control, e.g., how often NLP problems are solved.

Name and description | Valid values | Default value |
---|---|---|

Primal.FixedInteger.CallStrategy
When should the fixed strategy be used
0: Use each iteration 1: Based on iteration or time 2: Based on iteration or time, and for all feasible MIP solutions | {0,...,2} | 2 |

Primal.FixedInteger.CreateInfeasibilityCut
Create a cut from an infeasible solution point | true/false | false |

Primal.FixedInteger.DualPointGap.Relative
If the objective gap between the MIP point and dual solution is less than this the fixed strategy is activated | [0,∞] | 0.001 |

Primal.FixedInteger.Frequency.Dynamic
Dynamically update the call frequency based on success | true/false | true |

Primal.FixedInteger.Frequency.Iteration
Max number of iterations between calls | {0,...,∞} | 10 |

Primal.FixedInteger.Frequency.Time
Max duration (s) between calls | [0,∞] | 5 |

Primal.FixedInteger.IterationLimit
Max number of iterations per call | {0,...,∞} | 10000000 |

Primal.FixedInteger.OnlyUniqueIntegerCombinations
Whether to resolve with the same integer combination, e.g. for nonconvex problems with different continuous variable starting points | true/false | true |

Primal.FixedInteger.Solver
NLP solver to use
0: Ipopt 1: GAMS 2: SHOT | {0,...,2} | 0 |

Primal.FixedInteger.Source
Source of fixed MIP solution point
0: All 1: First 2: All feasible 3: First and all feasible 4: With smallest constraint deviation | {0,...,4} | 3 |

Primal.FixedInteger.SourceProblem
Which problem formulation to use for NLP problem
0: Original problem 1: Reformulated problem 2: Both | {0,...,2} | 0 |

Primal.FixedInteger.TimeLimit
Time limit (s) per NLP problem | [0,∞] | 10 |

Primal.FixedInteger.Use
Use the fixed integer primal strategy | true/false | true |

Primal.FixedInteger.Warmstart
Warm start the NLP solver | true/false | true |

SHOT can utilize root searches between the dual solution point and an integer-fixed interior point. This setting controls whether this strategy is used.

Name and description | Valid values | Default value |
---|---|---|

Primal.Rootsearch.Use
Use a rootsearch to find primal solutions | true/false | true |

Primal.Tolerance.Integer
Integer tolerance for accepting primal solutions | [-∞,∞] | 1e-05 |

Primal.Tolerance.LinearConstraint
Linear constraint tolerance for accepting primal solutions | [-∞,∞] | 1e-06 |

Primal.Tolerance.NonlinearConstraint
Nonlinear constraint tolerance for accepting primal solutions | [-∞,∞] | 1e-05 |

Primal.Tolerance.TrustLinearConstraintValues
Trust that subsolvers (NLP, MIP) give primal solutions that respect linear constraints | true/false | true |

Overall strategy parameters used in SHOT.

Name and description | Valid values | Default value |
---|---|---|

Strategy.UseRecommendedSettings
Modifies some settings to their recommended values based on the strategy | true/false | true |

These settings allow for more direct control of the different subsolvers utilized in SHOT.

Name and description | Valid values | Default value |
---|---|---|

Subsolver.Cbc.AutoScale
Whether to scale objective, rhs and bounds of problem if they look odd (experimental) | true/false | false |

Subsolver.Cbc.DeterministicParallelMode
Run Cbc with multiple threads in deterministic mode | true/false | false |

Subsolver.Cbc.NodeStrategy
Node strategy
0: depth 1: downdepth 2: downfewest 3: fewest 4: hybrid 5: updepth 6: upfewest | {0,...,6} | 4 |

Subsolver.Cbc.Scaling
Whether to scale problem
0: automatic 1: dynamic 2: equilibrium 3: geometric 4: off 5: rowsonly | {0,...,5} | 4 |

Subsolver.Cbc.Strategy
This turns on newer features
0: easy problems 1: default 2: aggressive | {0,...,2} | 1 |

Name and description | Valid values | Default value |
---|---|---|

Subsolver.Cplex.AddRelaxedLazyConstraintsAsLocal
Whether to add lazy constraints generated in relaxed points as local or global | true/false | false |

Subsolver.Cplex.FeasOptMode
Strategy to use for the feasibility repair
0: Minimize the sum of all required relaxations in first phase only 1: Minimize the sum of all required relaxations in first phase and execute second phase to find optimum among minimal relaxations 2: Minimize the number of constraints and bounds requiring relaxation in first phase only 3: Minimize the sum of squares of required relaxations in first phase only 4: Minimize the sum of squares of required relaxations in first phase and execute second phase to find optimum among minimal relaxations | {0,...,4} | 0 |

Subsolver.Cplex.MIPEmphasis
Sets the MIP emphasis
0: Balanced 1: Feasibility 2: Optimality 3: Best bound 4: Hidden feasible | {0,...,4} | 1 |

Subsolver.Cplex.MemoryEmphasis
Try to conserve memory when possible | {0,1} | 0 |

Subsolver.Cplex.NodeFile
Where to store the node file
0: No file 1: Compressed in memory 2: On disk 3: Compressed on disk | {0,...,3} | 1 |

Subsolver.Cplex.NumericalEmphasis
Emphasis on numerical stability | {0,1} | 1 |

Subsolver.Cplex.OptimalityTarget
Specifies how CPLEX treats nonconvex quadratics
0: Automatic 1: Searches for a globally optimal solution to a convex model 2: Searches for a solution that satisfies first-order optimality conditions, but is not necessarily globally optimal 3: Searches for a globally optimal solution to a nonconvex model | {0,...,3} | 0 |

Subsolver.Cplex.ParallelMode
Controls how much time and memory should be used when filling the solution pool
-1: Opportunistic 0: Automatic 1: Deterministic | {-1,...,1} | 0 |

Subsolver.Cplex.Probe
Sets the MIP probing level
-1: No probing 0: Automatic 1: Moderate 2: Aggressive 3: Very aggressive | {-1,...,3} | 0 |

Subsolver.Cplex.SolutionPoolGap
Sets the relative gap filter on objective values in the solution pool | [0,∞] | 1e+75 |

Subsolver.Cplex.SolutionPoolIntensity
Controls how much time and memory should be used when filling the solution pool
0: Automatic 1: Mild 2: Moderate 3: Aggressive 4: Very aggressive | {0,...,4} | 0 |

Subsolver.Cplex.SolutionPoolReplace
How to replace solutions in the solution pool when full
0: Replace oldest 1: Replace worst 2: Find diverse | {0,...,2} | 0 |

Subsolver.Cplex.UseGenericCallback
Use the new generic callback in the single-tree strategy | true/false | false |

Subsolver.Cplex.WorkDirectory
Directory for swap file | string | |

Subsolver.Cplex.WorkMemory
Memory limit for when to start swapping to disk | [0,∞] | 0 |

Settings for the GAMS NLP solvers.

Name and description | Valid values | Default value |
---|---|---|

Subsolver.GAMS.NLP.OptionsFilename
Options file for the NLP solver in GAMS | string | |

Subsolver.GAMS.NLP.Solver
NLP solver to use in GAMS (auto: SHOT chooses) | string | auto |

Name and description | Valid values | Default value |
---|---|---|

Subsolver.Gurobi.Heuristics
The relative amount of time spent in MIP heuristics. | [0,1] | 0.05 |

Subsolver.Gurobi.MIPFocus
MIP focus
0: Automatic 1: Feasibility 2: Optimality 3: Best bound | {0,...,3} | 0 |

Subsolver.Gurobi.NumericFocus
MIP focus
0: Automatic 1: Mild 2: Moderate 3: Aggressive | {0,...,3} | 1 |

Subsolver.Gurobi.PoolSearchMode
Finds extra solutions
0: No extra effort 1: Try to find solutions 2: Find n best solutions | {0,...,2} | 0 |

Subsolver.Gurobi.PoolSolutions
Determines how many MIP solutions are stored | {1,...,2000000000} | 10 |

Subsolver.Gurobi.ScaleFlag
Controls model scaling
-1: Automatic 0: Off 1: Mild 2: Moderate 3: Aggressive | {-1,...,3} | -1 |

Name and description | Valid values | Default value |
---|---|---|

Subsolver.Ipopt.ConstraintViolationTolerance
Constraint violation tolerance in Ipopt | [-∞,∞] | 1e-08 |

Subsolver.Ipopt.LinearSolver
Ipopt linear subsolver
0: Default 1: MA27 2: MA57 3: MA86 4: MA97 5: MUMPS | {0,...,5} | 0 |

Subsolver.Ipopt.MaxIterations
Maximum number of iterations | {0,...,∞} | 1000 |

Subsolver.Ipopt.RelativeConvergenceTolerance
Relative convergence tolerance | [-∞,∞] | 1e-08 |

Settings for the Boost rootsearch functionality.

Name and description | Valid values | Default value |
---|---|---|

Subsolver.Rootsearch.ActiveConstraintTolerance
Epsilon constraint tolerance for root search | [0,∞] | 0 |

Subsolver.Rootsearch.MaxIterations
Maximal root search iterations | {0,...,∞} | 100 |

Subsolver.Rootsearch.Method
Root search method to use
0: TOMS748 1: Bisection | {0,1} | 0 |

Subsolver.Rootsearch.TerminationTolerance
Epsilon lambda tolerance for root search | [0,∞] | 1e-16 |

Name and description | Valid values | Default value |
---|---|---|

Subsolver.SHOT.ReuseHyperplanes.Fraction
The fraction of generated hyperplanes to reuse. | [0,1] | 0.1 |

Subsolver.SHOT.ReuseHyperplanes.Use
Reuse valid generated hyperplanes in main dual model. | true/false | true |

Subsolver.SHOT.UseFBBT
Do FBBT on NLP problem. | true/false | true |

These settings control when SHOT will terminate the solution process.

Name and description | Valid values | Default value |
---|---|---|

Termination.ConstraintTolerance
Termination tolerance for nonlinear constraints | [0,∞] | 1e-08 |

Termination.DualStagnation.ConstraintTolerance
Min absolute difference between max nonlinear constraint errors in subsequent iterations for termination | [0,∞] | 1e-06 |

Termination.DualStagnation.IterationLimit
Max number of iterations without significant dual objective value improvement | {0,...,∞} | 2147483647 |

Termination.IterationLimit
Iteration limit for main strategy | {1,...,∞} | 200000 |

Termination.ObjectiveConstraintTolerance
Termination tolerance for the nonlinear objective constraint | [0,∞] | 1e-08 |

Termination.ObjectiveGap.Absolute
Absolute gap termination tolerance for objective function | [0,∞] | 0.001 |

Termination.ObjectiveGap.Relative
Relative gap termination tolerance for objective function | [0,∞] | 0.001 |

Termination.PrimalStagnation.IterationLimit
Max number of iterations without significant primal objective value improvement | {0,...,∞} | 50 |

Termination.TimeLimit
Time limit (s) for solver | [0,∞] | 1.7976931348623157e+308 |

These settings control the various functionality of the dual strategy in SHOT, i.e., the polyhedral outer approximation utilizing the ESH or ECP algorithms.

Name and description | Valid values | Default value |
---|---|---|

Dual.CutStrategy
Dual cut strategy
0: ESH 1: ECP | {0,1} | 0 |

These settings control various aspects of the ESH implementation, including the strategy to obtain the interior point.

Name and description | Valid values | Default value |
---|---|---|

Dual.ESH.InteriorPoint.CuttingPlane.ConstraintSelectionFactor
The fraction of violated constraints to generate cutting planes for | [0,1] | 0.25 |

Dual.ESH.InteriorPoint.CuttingPlane.IterationLimit
Iteration limit for minimax cutting plane solver | {1,...,∞} | 100 |

Dual.ESH.InteriorPoint.CuttingPlane.IterationLimitSubsolver
Iteration limit for minimization subsolver | {0,...,∞} | 100 |

Dual.ESH.InteriorPoint.CuttingPlane.Reuse
Reuse valid cutting planes in main dual model | true/false | false |

Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceAbs
Absolute termination tolerance between LP and linesearch objective | [0,∞] | 1 |

Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceRel
Relative termination tolerance between LP and linesearch objective | [0,∞] | 1 |

Dual.ESH.InteriorPoint.CuttingPlane.TimeLimit
Time limit for minimax solver | [0,∞] | 10 |

Dual.ESH.InteriorPoint.MinimaxObjectiveLowerBound
Lower bound for minimax objective variable | [-∞,0] | -1000000000000 |

Dual.ESH.InteriorPoint.MinimaxObjectiveUpperBound
Upper bound for minimax objective variable | [-∞,∞] | 0.1 |

Dual.ESH.InteriorPoint.UsePrimalSolution
Utilize primal solution as interior point
0: No 1: Add as new 2: Replace old 3: Use avarage | {0,...,3} | 1 |

Dual.ESH.Rootsearch.ConstraintTolerance
Constraint tolerance for when not to add individual hyperplanes | [0,∞] | 1e-08 |

Dual.ESH.Rootsearch.UniqueConstraints
Allow only one hyperplane per constraint per iteration | true/false | false |

Dual.ESH.Rootsearch.UseMaxFunction
Perform rootsearch on max function, otherwise on individual constraints | true/false | false |

These settings control how the cutting planes or supporting hyperplanes are generated.

Name and description | Valid values | Default value |
---|---|---|

Dual.HyperplaneCuts.ConstraintSelectionFactor
The fraction of violated constraints to generate supporting hyperplanes / cutting planes for | [0,1] | 0.5 |

Dual.HyperplaneCuts.Delay
Add hyperplane cuts to model only after optimal MIP solution | true/false | true |

Dual.HyperplaneCuts.MaxConstraintFactor
Rootsearch performed on constraints with values larger than this factor times the maximum value | [1e-06,1] | 0.1 |

Dual.HyperplaneCuts.MaxPerIteration
Maximal number of hyperplanes to add per iteration | {0,...,∞} | 200 |

Dual.HyperplaneCuts.ObjectiveRootSearch
When to use the objective root search
0: Always 1: IfConvex 2: Never | {0,...,2} | 1 |

Dual.HyperplaneCuts.SaveHyperplanePoints
Whether to save the points in the generated hyperplanes list | true/false | false |

Dual.HyperplaneCuts.UseIntegerCuts
Add integer cuts for infeasible integer-combinations for binary problems | true/false | false |

These settings control the general functionality of the MIP solver in the dual strategy. Note that solver-specific settings for Cplex, Gurobi and Cbc are available under the "Subsolver" category.

Name and description | Valid values | Default value |
---|---|---|

Dual.MIP.CutOff.InitialValue
Initial cutoff value to use | [-∞,∞] | 1.799e+308 |

Dual.MIP.CutOff.Tolerance
An extra tolerance for the objective cutoff value (to prevent infeasible subproblems) | [-∞,∞] | 1e-05 |

Dual.MIP.CutOff.UseInitialValue
Use the initial cutoff value | true/false | false |

Dual.MIP.InfeasibilityRepair.IntegerCuts
Allow feasibility repair of integer cuts | true/false | true |

Dual.MIP.InfeasibilityRepair.IterationLimit
Max number of infeasible problems repaired without primal objective value improvement | {0,...,∞} | 100 |

Dual.MIP.InfeasibilityRepair.TimeLimit
Time limit when reparing infeasible problem | [0,∞] | 10 |

Dual.MIP.InfeasibilityRepair.Use
Enable the infeasibility repair strategy for nonconvex problems | true/false | true |

Dual.MIP.NodeLimit
Node limit to use for MIP solver in single-tree strategy | [0,∞] | 1.799e+308 |

Dual.MIP.NumberOfThreads
Number of threads to use in MIP solver: 0: Automatic | {0,...,999} | 0 |

Dual.MIP.OptimalityTolerance
The reduced-cost tolerance for optimality in the MIP solver | [1e-09,0.01] | 1e-06 |

Dual.MIP.Presolve.Frequency
When to call the MIP presolve
0: Never 1: Once 2: Always | {0,...,2} | 1 |

Dual.MIP.Presolve.RemoveRedundantConstraints
Remove redundant constraints (as determined by presolve) | true/false | false |

Dual.MIP.Presolve.UpdateObtainedBounds
Update bounds (from presolve) to the MIP model | true/false | true |

Dual.MIP.SolutionLimit.ForceOptimal.Iteration
Iterations without dual bound updates for forcing optimal MIP solution | {0,...,∞} | 10000 |

Dual.MIP.SolutionLimit.ForceOptimal.Time
Time (s) without dual bound updates for forcing optimal MIP solution | [0,∞] | 1000 |

Dual.MIP.SolutionLimit.IncreaseIterations
Max number of iterations between MIP solution limit increases | {0,...,∞} | 50 |

Dual.MIP.SolutionLimit.Initial
Initial MIP solution limit | {1,...,∞} | 1 |

Dual.MIP.SolutionLimit.UpdateTolerance
The constraint tolerance for when to update MIP solution limit | [0,∞] | 0.001 |

Dual.MIP.SolutionPool.Capacity
The maximum number of solutions in the solution pool | {0,...,∞} | 100 |

Dual.MIP.Solver
Which MIP solver to use
0: Cplex 1: Gurobi 2: Cbc | {0,...,2} | 1 |

Dual.MIP.UpdateObjectiveBounds
Update nonlinear objective variable bounds to primal/dual bounds | true/false | false |

These settings control the added dual reduction cuts from the primal solution that will try to force a better primal solution. This functionality is only used if SHOT cannot deduce that the problem is nonconvex .

Name and description | Valid values | Default value |
---|---|---|

Dual.ReductionCut.MaxIterations
Max number of primal cut reduction without primal improvement | {0,...,∞} | 5 |

Dual.ReductionCut.ReductionFactor
The factor used to reduce the cutoff value | [0,1] | 0.001 |

Dual.ReductionCut.Use
Enable the dual reduction cut strategy for nonconvex problems | true/false | true |

These settings contorl various aspects regarding integer-relaxation of the dual problem.

Name and description | Valid values | Default value |
---|---|---|

Dual.Relaxation.Frequency
The frequency to solve an LP problem: 0: Disable | {0,...,∞} | 0 |

Dual.Relaxation.IterationLimit
The max number of relaxed LP problems to solve initially | {0,...,∞} | 200 |

Dual.Relaxation.MaxLazyConstraints
Max number of lazy constraints to add in relaxed solutions in single-tree strategy | {0,...,∞} | 0 |

Dual.Relaxation.TerminationTolerance
Time limit (s) when solving LP problems initially | [-∞,∞] | 0.5 |

Dual.Relaxation.TimeLimit
Time limit (s) when solving LP problems initially | [0,∞] | 30 |

Dual.Relaxation.Use
Initially solve continuous dual relaxations | true/false | true |

The single-tree strategy is normally more efficient than the multi-tree one. However, not all MIP solvers support the required lazy constraint callbacks. These settings selects this strategy and controls its behaviour.

Name and description | Valid values | Default value |
---|---|---|

Dual.TreeStrategy
The main strategy to use
0: Multi-tree 1: Single-tree | {0,1} | 1 |

These settings control various aspects of SHOT's representation for and handling of the provided optimization model.

SHOT performs bound tightening to strengthen the internal representation of the problem. These settings control how and when bound tightening is performed.

Name and description | Valid values | Default value |
---|---|---|

Model.BoundTightening.FeasibilityBased.MaxIterations
Maximal number of bound tightening iterations | {0,...,∞} | 5 |

Model.BoundTightening.FeasibilityBased.TimeLimit
Time limit for bound tightening | [0,∞] | 2 |

Model.BoundTightening.FeasibilityBased.Use
Peform feasibility-based bound tightening | true/false | true |

Model.BoundTightening.FeasibilityBased.UseNonlinear
Peform feasibility-based bound tightening on nonlinear expressions | true/false | true |

Model.BoundTightening.InitialPOA.ConstraintTolerance
Constraint termination tolerance | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.CutStrategy
Dual cut strategy
0: ESH 1: ECP | {0,1} | 1 |

Model.BoundTightening.InitialPOA.IterationLimit
Iteration limit for POA | {0,...,∞} | 50 |

Model.BoundTightening.InitialPOA.ObjectiveConstraintTolerance
Objective constraint termination tolerance | [-∞,∞] | 0.001 |

Model.BoundTightening.InitialPOA.ObjectiveGapAbsolute
Absolute objective gap termination level | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.ObjectiveGapRelative
Relative objective gap termination level | [-∞,∞] | 0.1 |

Model.BoundTightening.InitialPOA.StagnationConstraintTolerance
Tolerance factor for when no progress is made | [-∞,∞] | 0.01 |

Model.BoundTightening.InitialPOA.StagnationIterationLimit
Limit for iterations without significant progress | {0,...,∞} | 5 |