# Solver options

## Dual strategy

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 |
| ------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.CutStrategy</strong><br>Dual cut strategy<br>0: ESH 1: ECP</p> |     {0,1}    |       0       |

### Extended supporting hyperplane method

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

| Name and description                                                                                                                                               | Valid values |  Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :------------: |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.ConstraintSelectionFactor</strong><br>The fraction of violated constraints to generate cutting planes for</p>       |    \[0,1]    |      0.25      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.IterationLimit</strong><br>Iteration limit for minimax cutting plane solver</p>                                     |   {1,...,∞}  |       100      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.IterationLimitSubsolver</strong><br>Iteration limit for minimization subsolver</p>                                  |   {0,...,∞}  |       100      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.Reuse</strong><br>Reuse valid cutting planes in main dual model</p>                                                 |  true/false  |      false     |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceAbs</strong><br>Absolute termination tolerance between LP and linesearch objective</p>          |    \[0,∞]    |        1       |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceRel</strong><br>Relative termination tolerance between LP and linesearch objective</p>          |    \[0,∞]    |        1       |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TimeLimit</strong><br>Time limit for minimax solver</p>                                                             |    \[0,∞]    |       10       |
| <p><strong>Dual.ESH.InteriorPoint.MinimaxObjectiveLowerBound</strong><br>Lower bound for minimax objective variable</p>                                            |    \[-∞,0]   | -1000000000000 |
| <p><strong>Dual.ESH.InteriorPoint.MinimaxObjectiveUpperBound</strong><br>Upper bound for minimax objective variable</p>                                            |    \[-∞,∞]   |       0.1      |
| <p><strong>Dual.ESH.InteriorPoint.UsePrimalSolution</strong><br>Utilize primal solution as interior point<br>0: No 1: Add as new 2: Replace old 3: Use avarage</p> |   {0,...,3}  |        1       |
| <p><strong>Dual.ESH.Rootsearch.ConstraintTolerance</strong><br>Constraint tolerance for when not to add individual hyperplanes</p>                                 |    \[0,∞]    |      1e-08     |
| <p><strong>Dual.ESH.Rootsearch.UniqueConstraints</strong><br>Allow only one hyperplane per constraint per iteration</p>                                            |  true/false  |      false     |
| <p><strong>Dual.ESH.Rootsearch.UseMaxFunction</strong><br>Perform rootsearch on max function, otherwise on individual constraints</p>                              |  true/false  |      false     |

### Generated hyperplane cuts

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

| Name and description                                                                                                                                                  | Valid values | Default value |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Dual.HyperplaneCuts.ConstraintSelectionFactor</strong><br>The fraction of violated constraints to generate supporting hyperplanes / cutting planes for</p> |    \[0,1]    |      0.5      |
| <p><strong>Dual.HyperplaneCuts.Delay</strong><br>Add hyperplane cuts to model only after optimal MIP solution</p>                                                     |  true/false  |      true     |
| <p><strong>Dual.HyperplaneCuts.MaxConstraintFactor</strong><br>Rootsearch performed on constraints with values larger than this factor times the maximum value</p>    |  \[1e-06,1]  |      0.1      |
| <p><strong>Dual.HyperplaneCuts.MaxPerIteration</strong><br>Maximal number of hyperplanes to add per iteration</p>                                                     |   {0,...,∞}  |      200      |
| <p><strong>Dual.HyperplaneCuts.ObjectiveRootSearch</strong><br>When to use the objective root search<br>0: Always 1: IfConvex 2: Never</p>                            |   {0,...,2}  |       1       |
| <p><strong>Dual.HyperplaneCuts.SaveHyperplanePoints</strong><br>Whether to save the points in the generated hyperplanes list</p>                                      |  true/false  |     false     |
| <p><strong>Dual.HyperplaneCuts.UseIntegerCuts</strong><br>Add integer cuts for infeasible integer-combinations for binary problems</p>                                |  true/false  |     false     |

### MIP solver

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      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-----------: | :---------------------: |
| <p><strong>Dual.MIP.CutOff.InitialValue</strong><br>Initial cutoff value to use</p>                                                                          |    \[-∞,∞]    | 1.7976931348623157e+308 |
| <p><strong>Dual.MIP.CutOff.Tolerance</strong><br>An extra tolerance for the objective cutoff value (to prevent infeasible subproblems)</p>                   |    \[-∞,∞]    |          1e-05          |
| <p><strong>Dual.MIP.CutOff.UseInitialValue</strong><br>Use the initial cutoff value</p>                                                                      |   true/false  |          false          |
| <p><strong>Dual.MIP.InfeasibilityRepair.IntegerCuts</strong><br>Allow feasibility repair of integer cuts</p>                                                 |   true/false  |           true          |
| <p><strong>Dual.MIP.InfeasibilityRepair.IterationLimit</strong><br>Max number of infeasible problems repaired without primal objective value improvement</p> |   {0,...,∞}   |           100           |
| <p><strong>Dual.MIP.InfeasibilityRepair.TimeLimit</strong><br>Time limit when reparing infeasible problem</p>                                                |     \[0,∞]    |            10           |
| <p><strong>Dual.MIP.InfeasibilityRepair.Use</strong><br>Enable the infeasibility repair strategy for nonconvex problems</p>                                  |   true/false  |           true          |
| <p><strong>Dual.MIP.NodeLimit</strong><br>Node limit to use for MIP solver in single-tree strategy</p>                                                       |     \[0,∞]    | 1.7976931348623157e+308 |
| <p><strong>Dual.MIP.NumberOfThreads</strong><br>Number of threads to use in MIP solver: 0: Automatic</p>                                                     |  {0,...,999}  |            0            |
| <p><strong>Dual.MIP.OptimalityTolerance</strong><br>The reduced-cost tolerance for optimality in the MIP solver</p>                                          | \[1e-09,0.01] |          1e-06          |
| <p><strong>Dual.MIP.Presolve.Frequency</strong><br>When to call the MIP presolve<br>0: Never 1: Once 2: Always</p>                                           |   {0,...,2}   |            1            |
| <p><strong>Dual.MIP.Presolve.RemoveRedundantConstraints</strong><br>Remove redundant constraints (as determined by presolve)</p>                             |   true/false  |          false          |
| <p><strong>Dual.MIP.Presolve.UpdateObtainedBounds</strong><br>Update bounds (from presolve) to the MIP model</p>                                             |   true/false  |           true          |
| <p><strong>Dual.MIP.SolutionLimit.ForceOptimal.Iteration</strong><br>Iterations without dual bound updates for forcing optimal MIP solution</p>              |   {0,...,∞}   |          10000          |
| <p><strong>Dual.MIP.SolutionLimit.ForceOptimal.Time</strong><br>Time (s) without dual bound updates for forcing optimal MIP solution</p>                     |     \[0,∞]    |           1000          |
| <p><strong>Dual.MIP.SolutionLimit.IncreaseIterations</strong><br>Max number of iterations between MIP solution limit increases</p>                           |   {0,...,∞}   |            50           |
| <p><strong>Dual.MIP.SolutionLimit.Initial</strong><br>Initial MIP solution limit</p>                                                                         |   {1,...,∞}   |            1            |
| <p><strong>Dual.MIP.SolutionLimit.UpdateTolerance</strong><br>The constraint tolerance for when to update MIP solution limit</p>                             |     \[0,∞]    |          0.001          |
| <p><strong>Dual.MIP.SolutionPool.Capacity</strong><br>The maximum number of solutions in the solution pool</p>                                               |   {0,...,∞}   |           100           |
| <p><strong>Dual.MIP.Solver</strong><br>Which MIP solver to use<br>0: Cplex 1: Gurobi 2: Cbc</p>                                                              |   {0,...,2}   |            1            |
| <p><strong>Dual.MIP.UpdateObjectiveBounds</strong><br>Update nonlinear objective variable bounds to primal/dual bounds</p>                                   |   true/false  |          false          |

### Dual reduction cut

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 |
| ------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.ReductionCut.MaxIterations</strong><br>Max number of primal cut reduction without primal improvement</p> |   {0,...,∞}  |       5       |
| <p><strong>Dual.ReductionCut.ReductionFactor</strong><br>The factor used to reduce the cutoff value</p>                  |    \[0,1]    |     0.001     |
| <p><strong>Dual.ReductionCut.Use</strong><br>Enable the dual reduction cut strategy for nonconvex problems</p>           |  true/false  |      true     |

### Relaxation strategies

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

| Name and description                                                                                                                             | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.Relaxation.Frequency</strong><br>The frequency to solve an LP problem: 0: Disable</p>                                            |   {0,...,∞}  |       0       |
| <p><strong>Dual.Relaxation.IterationLimit</strong><br>The max number of relaxed LP problems to solve initially</p>                               |   {0,...,∞}  |      200      |
| <p><strong>Dual.Relaxation.MaxLazyConstraints</strong><br>Max number of lazy constraints to add in relaxed solutions in single-tree strategy</p> |   {0,...,∞}  |       0       |
| <p><strong>Dual.Relaxation.TerminationTolerance</strong><br>Time limit (s) when solving LP problems initially</p>                                |    \[-∞,∞]   |      0.5      |
| <p><strong>Dual.Relaxation.TimeLimit</strong><br>Time limit (s) when solving LP problems initially</p>                                           |    \[0,∞]    |       30      |
| <p><strong>Dual.Relaxation.Use</strong><br>Initially solve continuous dual relaxations</p>                                                       |  true/false  |      true     |

### Tree strategy

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 |
| ----------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Dual.TreeStrategy</strong><br>The main strategy to use<br>0: Multi-tree 1: Single-tree</p> |     {0,1}    |       1       |

## Optimization model

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

### Bound tightening

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 |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.BoundTightening.FeasibilityBased.MaxIterations</strong><br>Maximal number of bound tightening iterations</p>                     |   {0,...,∞}  |       5       |
| <p><strong>Model.BoundTightening.FeasibilityBased.TimeLimit</strong><br>Time limit for bound tightening</p>                                       |    \[0,∞]    |       2       |
| <p><strong>Model.BoundTightening.FeasibilityBased.Use</strong><br>Peform feasibility-based bound tightening</p>                                   |  true/false  |      true     |
| <p><strong>Model.BoundTightening.FeasibilityBased.UseNonlinear</strong><br>Peform feasibility-based bound tightening on nonlinear expressions</p> |  true/false  |      true     |
| <p><strong>Model.BoundTightening.InitialPOA.ConstraintTolerance</strong><br>Constraint termination tolerance</p>                                  |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.CutStrategy</strong><br>Dual cut strategy<br>0: ESH 1: ECP</p>                                        |     {0,1}    |       1       |
| <p><strong>Model.BoundTightening.InitialPOA.IterationLimit</strong><br>Iteration limit for POA</p>                                                |   {0,...,∞}  |       50      |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveConstraintTolerance</strong><br>Objective constraint termination tolerance</p>               |    \[-∞,∞]   |     0.001     |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveGapAbsolute</strong><br>Absolute objective gap termination level</p>                         |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveGapRelative</strong><br>Relative objective gap termination level</p>                         |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.StagnationConstraintTolerance</strong><br>Tolerance factor for when no progress is made</p>           |    \[-∞,∞]   |      0.01     |
| <p><strong>Model.BoundTightening.InitialPOA.StagnationIterationLimit</strong><br>Limit for iterations without significant progress</p>            |   {0,...,∞}  |       5       |
| <p><strong>Model.BoundTightening.InitialPOA.TimeLimit</strong><br>Time limit for initial POA</p>                                                  |    \[-∞,∞]   |       5       |
| <p><strong>Model.BoundTightening.InitialPOA.Use</strong><br>Create an initial polyhedral outer approximation</p>                                  |  true/false  |     false     |

### Convexity

These settings control the convexity detection functionality

| Name and description                                                                                                                                        | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Convexity.AssumeConvex</strong><br>Assume that the problem is convex</p>                                                                   |  true/false  |     false     |
| <p><strong>Model.Convexity.Quadratics.EigenValueTolerance</strong><br>Convexity tolerance for the eigenvalues of the Hessian matrix for quadratic terms</p> |    \[0,∞]    |     1e-05     |

### Automatic reformulations

These settings control the automatic reformulations performed in SHOT.

| Name and description                                                                                                                                                                                                                                                                                                    | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Reformulation.Bilinear.AddConvexEnvelope</strong><br>Add convex envelopes (subject to original bounds) to bilinear terms</p>                                                                                                                                                                           |  true/false  |     false     |
| <p><strong>Model.Reformulation.Bilinear.IntegerFormulation</strong><br>Reformulate integer bilinear terms<br>0: No 1: No if nonconvex quadratic terms allowed by MIP solver 2: Yes</p>                                                                                                                                  |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Bilinear.IntegerFormulation.MaxDomain</strong><br>Do not reformulate integer variables in bilinear terms which can assume more than this number of discrete values</p>                                                                                                                   |   {2,...,∞}  |      100      |
| <p><strong>Model.Reformulation.Constraint.PartitionNonlinearTerms</strong><br>When to partition nonlinear sums in constraints<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                                          |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Constraint.PartitionQuadraticTerms</strong><br>When to partition quadratic sums in constraints<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                                          |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Monomials.Extract</strong><br>Extract monomial terms from nonlinear expressions</p>                                                                                                                                                                                                      |  true/false  |      true     |
| <p><strong>Model.Reformulation.Monomials.Formulation</strong><br>How to reformulate binary monomials<br>0: None 1: Simple 2: Costa and Liberti</p>                                                                                                                                                                      |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.ObjectiveFunction.Epigraph.Use</strong><br>Reformulates a nonlinear objective as an auxiliary constraint</p>                                                                                                                                                                             |  true/false  |     false     |
| <p><strong>Model.Reformulation.ObjectiveFunction.PartitionNonlinearTerms</strong><br>When to partition nonlinear sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                            |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.ObjectiveFunction.PartitionQuadraticTerms</strong><br>When to partition quadratic sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                            |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Formulation</strong><br>Which formulation to use in eigenvalue decomposition<br>0: Term coefficient is included in reformulation 1: Term coefficient remains</p>                                                                                      |     {0,1}    |       0       |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Method</strong><br>Whether to use the eigen value decomposition of convex quadratic functions</p>                                                                                                                                                     |  true/false  |     false     |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Use</strong><br>Whether to use the eigenvalue decomposition of convex quadratic functions</p>                                                                                                                                                         |  true/false  |     false     |
| <p><strong>Model.Reformulation.Quadratics.ExtractStrategy</strong><br>How to extract quadratic terms from nonlinear expressions<br>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</p> |   {0,...,3}  |       1       |
| <p><strong>Model.Reformulation.Quadratics.Strategy</strong><br>How to treat quadratic functions<br>0: All nonlinear 1: Use quadratic objective 2: Use convex quadratic objective and constraints 3: Use nonconvex quadratic objective and constraints</p>                                                               |   {0,...,3}  |       2       |
| <p><strong>Model.Reformulation.Signomials.Extract</strong><br>Extract signomial terms from nonlinear expressions</p>                                                                                                                                                                                                    |  true/false  |      true     |

### Variables

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 |
| --------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Variables.Continuous.MaximumUpperBound</strong><br>Maximum upper bound for continuous variables</p>                          |    \[-∞,∞]   |     1e+50     |
| <p><strong>Model.Variables.Continuous.MinimumLowerBound</strong><br>Minimum lower bound for continuous variables</p>                          |    \[-∞,∞]   |     -1e+50    |
| <p><strong>Model.Variables.Integer.MaximumUpperBound</strong><br>Maximum upper bound for integer variables</p>                                |    \[-∞,∞]   |   2000000000  |
| <p><strong>Model.Variables.Integer.MinimumLowerBound</strong><br>Minimum lower bound for integer variables</p>                                |    \[-∞,∞]   |  -2000000000  |
| <p><strong>Model.Variables.NonlinearObjectiveVariable.Bound</strong><br>Max absolute bound for the auxiliary nonlinear objective variable</p> |    \[-∞,∞]   | 1000000000000 |

## Modeling system

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

### GAMS interface

These settings control functionality used in the GAMS interface.

| Name and description                                                                                                                                                    | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>ModelingSystem.GAMS.QExtractAlg</strong><br>Extraction algorithm for quadratic equations in GAMS interface<br>0: automatic 1: threepass 2: doubleforward</p> |   {0,...,2}  |       0       |

## Solver output

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

| Name and description                                                                                                                                                                        | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Output.Console.DualSolver.Show</strong><br>Show output from dual solver on console</p>                                                                                           |  true/false  |     false     |
| <p><strong>Output.Console.Iteration.Detail</strong><br>When should the fixed strategy be used<br>0: Full 1: On objective gap update 2: On objective gap update and all primal NLP calls</p> |   {0,...,2}  |       1       |
| <p><strong>Output.Console.LogLevel</strong><br>Log level for console output<br>0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off</p>                                         |   {0,...,6}  |       2       |
| <p><strong>Output.Console.PrimalSolver.Show</strong><br>Show output from primal solver on console</p>                                                                                       |  true/false  |     false     |
| <p><strong>Output.Debug.Enable</strong><br>Use debug functionality</p>                                                                                                                      |  true/false  |     false     |
| <p><strong>Output.Debug.Path</strong><br>The folder where to save the debug information</p>                                                                                                 |    string    |               |
| <p><strong>Output.File.LogLevel</strong><br>Log level for file output<br>0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off</p>                                               |   {0,...,6}  |       2       |
| <p><strong>Output.GAMS.AlternateSolutionsFile</strong><br>Name of GAMS GDX file to write alternative solutions to</p>                                                                       |    string    |               |
| <p><strong>Output.OutputDirectory</strong><br>Where to save the output files<br>0: Problem directory 1: Program directory</p>                                                               |     {0,1}    |       1       |
| <p><strong>Output.SaveNumberOfSolutions</strong><br>Save max this number of primal solutions to OSrL or GDX file</p>                                                                        |   {0,...,∞}  |       1       |

## Primal heuristics

These settings control the primal heuristics used in SHOT.

### Fixed-integer (NLP) strategy

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 |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Primal.FixedInteger.CallStrategy</strong><br>When should the fixed strategy be used<br>0: Use each iteration 1: Based on iteration or time 2: Based on iteration or time, and for all feasible MIP solutions</p> |   {0,...,2}  |       2       |
| <p><strong>Primal.FixedInteger.CreateInfeasibilityCut</strong><br>Create a cut from an infeasible solution point</p>                                                                                                        |  true/false  |     false     |
| <p><strong>Primal.FixedInteger.DualPointGap.Relative</strong><br>If the objective gap between the MIP point and dual solution is less than this the fixed strategy is activated</p>                                         |    \[0,∞]    |     0.001     |
| <p><strong>Primal.FixedInteger.Frequency.Dynamic</strong><br>Dynamically update the call frequency based on success</p>                                                                                                     |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Frequency.Iteration</strong><br>Max number of iterations between calls</p>                                                                                                                   |   {0,...,∞}  |       10      |
| <p><strong>Primal.FixedInteger.Frequency.Time</strong><br>Max duration (s) between calls</p>                                                                                                                                |    \[0,∞]    |       5       |
| <p><strong>Primal.FixedInteger.IterationLimit</strong><br>Max number of iterations per call</p>                                                                                                                             |   {0,...,∞}  |    10000000   |
| <p><strong>Primal.FixedInteger.OnlyUniqueIntegerCombinations</strong><br>Whether to resolve with the same integer combination, e.g. for nonconvex problems with different continuous variable starting points</p>           |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Solver</strong><br>NLP solver to use<br>0: Ipopt 1: GAMS 2: SHOT</p>                                                                                                                         |   {0,...,2}  |       0       |
| <p><strong>Primal.FixedInteger.Source</strong><br>Source of fixed MIP solution point<br>0: All 1: First 2: All feasible 3: First and all feasible 4: With smallest constraint deviation</p>                                 |   {0,...,4}  |       3       |
| <p><strong>Primal.FixedInteger.SourceProblem</strong><br>Which problem formulation to use for NLP problem<br>0: Original problem 1: Reformulated problem 2: Both</p>                                                        |   {0,...,2}  |       0       |
| <p><strong>Primal.FixedInteger.TimeLimit</strong><br>Time limit (s) per NLP problem</p>                                                                                                                                     |    \[0,∞]    |       10      |
| <p><strong>Primal.FixedInteger.Use</strong><br>Use the fixed integer primal strategy</p>                                                                                                                                    |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Warmstart</strong><br>Warm start the NLP solver</p>                                                                                                                                          |  true/false  |      true     |

### Primal root search

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 |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Primal.Rootsearch.Use</strong><br>Use a rootsearch to find primal solutions</p>                                                                     |  true/false  |      true     |
| <p><strong>Primal.Tolerance.Integer</strong><br>Integer tolerance for accepting primal solutions</p>                                                           |    \[-∞,∞]   |     1e-05     |
| <p><strong>Primal.Tolerance.LinearConstraint</strong><br>Linear constraint tolerance for accepting primal solutions</p>                                        |    \[-∞,∞]   |     1e-06     |
| <p><strong>Primal.Tolerance.NonlinearConstraint</strong><br>Nonlinear constraint tolerance for accepting primal solutions</p>                                  |    \[-∞,∞]   |     1e-05     |
| <p><strong>Primal.Tolerance.TrustLinearConstraintValues</strong><br>Trust that subsolvers (NLP, MIP) give primal solutions that respect linear constraints</p> |  true/false  |      true     |

## Strategy

Overall strategy parameters used in SHOT.

| Name and description                                                                                                                | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Strategy.UseRecommendedSettings</strong><br>Modifies some settings to their recommended values based on the strategy</p> |  true/false  |      true     |

## Subsolver functionality

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

### Cbc

| Name and description                                                                                                                                  | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Cbc.AutoScale</strong><br>Whether to scale objective, rhs and bounds of problem if they look odd (experimental)</p>              |  true/false  |     false     |
| <p><strong>Subsolver.Cbc.DeterministicParallelMode</strong><br>Run Cbc with multiple threads in deterministic mode</p>                                |  true/false  |     false     |
| <p><strong>Subsolver.Cbc.NodeStrategy</strong><br>Node strategy<br>0: depth 1: downdepth 2: downfewest 3: fewest 4: hybrid 5: updepth 6: upfewest</p> |   {0,...,6}  |       4       |
| <p><strong>Subsolver.Cbc.Scaling</strong><br>Whether to scale problem<br>0: automatic 1: dynamic 2: equilibrium 3: geometric 4: off 5: rowsonly</p>   |   {0,...,5}  |       4       |
| <p><strong>Subsolver.Cbc.Strategy</strong><br>This turns on newer features<br>0: easy problems 1: default 2: aggressive</p>                           |   {0,...,2}  |       1       |

### Cplex

| Name and description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Subsolver.Cplex.AddRelaxedLazyConstraintsAsLocal</strong><br>Whether to add lazy constraints generated in relaxed points as local or global</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                               |  true/false  |     false     |
| <p><strong>Subsolver.Cplex.FeasOptMode</strong><br>Strategy to use for the feasibility repair<br>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</p> |   {0,...,4}  |       0       |
| <p><strong>Subsolver.Cplex.MIPEmphasis</strong><br>Sets the MIP emphasis<br>0: Balanced 1: Feasibility 2: Optimality 3: Best bound 4: Hidden feasible</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                |   {0,...,4}  |       1       |
| <p><strong>Subsolver.Cplex.MemoryEmphasis</strong><br>Try to conserve memory when possible</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |     {0,1}    |       0       |
| <p><strong>Subsolver.Cplex.NodeFile</strong><br>Where to store the node file<br>0: No file 1: Compressed in memory 2: On disk 3: Compressed on disk</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |   {0,...,3}  |       1       |
| <p><strong>Subsolver.Cplex.NumericalEmphasis</strong><br>Emphasis on numerical stability</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |     {0,1}    |       1       |
| <p><strong>Subsolver.Cplex.OptimalityTarget</strong><br>Specifies how CPLEX treats nonconvex quadratics<br>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</p>                                                                                                                                                                                                                                          |   {0,...,3}  |       0       |
| <p><strong>Subsolver.Cplex.ParallelMode</strong><br>Controls how much time and memory should be used when filling the solution pool<br>-1: Opportunistic 0: Automatic 1: Deterministic</p>                                                                                                                                                                                                                                                                                                                                                                                                                               |  {-1,...,1}  |       0       |
| <p><strong>Subsolver.Cplex.Probe</strong><br>Sets the MIP probing level<br>-1: No probing 0: Automatic 1: Moderate 2: Aggressive 3: Very aggressive</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |  {-1,...,3}  |       0       |
| <p><strong>Subsolver.Cplex.SolutionPoolGap</strong><br>Sets the relative gap filter on objective values in the solution pool</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |    \[0,∞]    |     1e+75     |
| <p><strong>Subsolver.Cplex.SolutionPoolIntensity</strong><br>Controls how much time and memory should be used when filling the solution pool<br>0: Automatic 1: Mild 2: Moderate 3: Aggressive 4: Very aggressive</p>                                                                                                                                                                                                                                                                                                                                                                                                    |   {0,...,4}  |       0       |
| <p><strong>Subsolver.Cplex.SolutionPoolReplace</strong><br>How to replace solutions in the solution pool when full<br>0: Replace oldest 1: Replace worst 2: Find diverse</p>                                                                                                                                                                                                                                                                                                                                                                                                                                             |   {0,...,2}  |       0       |
| <p><strong>Subsolver.Cplex.UseGenericCallback</strong><br>Use the new generic callback in the single-tree strategy</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |  true/false  |     false     |
| <p><strong>Subsolver.Cplex.WorkDirectory</strong><br>Directory for swap file</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |    string    |               |
| <p><strong>Subsolver.Cplex.WorkMemory</strong><br>Memory limit for when to start swapping to disk</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |    \[0,∞]    |       0       |

### GAMS

Settings for the GAMS NLP solvers.

| Name and description                                                                                  | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.GAMS.NLP.OptionsFilename</strong><br>Options file for the NLP solver in GAMS</p> |    string    |               |
| <p><strong>Subsolver.GAMS.NLP.Solver</strong><br>NLP solver to use in GAMS (auto: SHOT chooses)</p>   |    string    |      auto     |

### Gurobi

| Name and description                                                                                                                                     |    Valid values    | Default value |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------: | :-----------: |
| <p><strong>Subsolver.Gurobi.Heuristics</strong><br>The relative amount of time spent in MIP heuristics.</p>                                              |       \[0,1]       |      0.05     |
| <p><strong>Subsolver.Gurobi.MIPFocus</strong><br>MIP focus<br>0: Automatic 1: Feasibility 2: Optimality 3: Best bound</p>                                |      {0,...,3}     |       0       |
| <p><strong>Subsolver.Gurobi.NumericFocus</strong><br>MIP focus<br>0: Automatic 1: Mild 2: Moderate 3: Aggressive</p>                                     |      {0,...,3}     |       1       |
| <p><strong>Subsolver.Gurobi.PoolSearchMode</strong><br>Finds extra solutions<br>0: No extra effort 1: Try to find solutions 2: Find n best solutions</p> |      {0,...,2}     |       0       |
| <p><strong>Subsolver.Gurobi.PoolSolutions</strong><br>Determines how many MIP solutions are stored</p>                                                   | {1,...,2000000000} |       10      |
| <p><strong>Subsolver.Gurobi.ScaleFlag</strong><br>Controls model scaling<br>-1: Automatic 0: Off 1: Mild 2: Moderate 3: Aggressive</p>                   |     {-1,...,3}     |       -1      |

### Ipopt

| Name and description                                                                                                                  | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Ipopt.ConstraintViolationTolerance</strong><br>Constraint violation tolerance in Ipopt</p>                       |    \[-∞,∞]   |     1e-08     |
| <p><strong>Subsolver.Ipopt.LinearSolver</strong><br>Ipopt linear subsolver<br>0: Default 1: MA27 2: MA57 3: MA86 4: MA97 5: MUMPS</p> |   {0,...,5}  |       0       |
| <p><strong>Subsolver.Ipopt.MaxIterations</strong><br>Maximum number of iterations</p>                                                 |   {0,...,∞}  |      1000     |
| <p><strong>Subsolver.Ipopt.RelativeConvergenceTolerance</strong><br>Relative convergence tolerance</p>                                |    \[-∞,∞]   |     1e-08     |

### Root search solver

Settings for the Boost rootsearch functionality.

| Name and description                                                                                                   | Valid values | Default value |
| ---------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Rootsearch.ActiveConstraintTolerance</strong><br>Epsilon constraint tolerance for root search</p> |    \[0,∞]    |       0       |
| <p><strong>Subsolver.Rootsearch.MaxIterations</strong><br>Maximal root search iterations</p>                           |   {0,...,∞}  |      100      |
| <p><strong>Subsolver.Rootsearch.Method</strong><br>Root search method to use<br>0: TOMS748 1: Bisection</p>            |     {0,1}    |       0       |
| <p><strong>Subsolver.Rootsearch.TerminationTolerance</strong><br>Epsilon lambda tolerance for root search</p>          |    \[0,∞]    |     1e-16     |

### SHOT primal NLP solver

| Name and description                                                                                                 | Valid values | Default value |
| -------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.SHOT.ReuseHyperplanes.Fraction</strong><br>The fraction of generated hyperplanes to reuse.</p>  |    \[0,1]    |      0.1      |
| <p><strong>Subsolver.SHOT.ReuseHyperplanes.Use</strong><br>Reuse valid generated hyperplanes in main dual model.</p> |  true/false  |      true     |
| <p><strong>Subsolver.SHOT.UseFBBT</strong><br>Do FBBT on NLP problem.</p>                                            |  true/false  |      true     |

## Termination

These settings control when SHOT will terminate the solution process.

| Name and description                                                                                                                                                               | Valid values |      Default value      |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :---------------------: |
| <p><strong>Termination.ConstraintTolerance</strong><br>Termination tolerance for nonlinear constraints</p>                                                                         |    \[0,∞]    |          1e-08          |
| <p><strong>Termination.DualStagnation.ConstraintTolerance</strong><br>Min absolute difference between max nonlinear constraint errors in subsequent iterations for termination</p> |    \[0,∞]    |          1e-06          |
| <p><strong>Termination.DualStagnation.IterationLimit</strong><br>Max number of iterations without significant dual objective value improvement</p>                                 |   {0,...,∞}  |        2147483647       |
| <p><strong>Termination.IterationLimit</strong><br>Iteration limit for main strategy</p>                                                                                            |   {1,...,∞}  |          200000         |
| <p><strong>Termination.ObjectiveConstraintTolerance</strong><br>Termination tolerance for the nonlinear objective constraint</p>                                                   |    \[0,∞]    |          1e-08          |
| <p><strong>Termination.ObjectiveGap.Absolute</strong><br>Absolute gap termination tolerance for objective function</p>                                                             |    \[0,∞]    |          0.001          |
| <p><strong>Termination.ObjectiveGap.Relative</strong><br>Relative gap termination tolerance for objective function</p>                                                             |    \[0,∞]    |          0.001          |
| <p><strong>Termination.PrimalStagnation.IterationLimit</strong><br>Max number of iterations without significant primal objective value improvement</p>                             |   {0,...,∞}  |            50           |
| <p><strong>Termination.TimeLimit</strong><br>Time limit (s) for solver</p>                                                                                                         |    \[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 |
| ------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.CutStrategy</strong><br>Dual cut strategy<br>0: ESH 1: ECP</p> |     {0,1}    |       0       |

### Extended supporting hyperplane method

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

| Name and description                                                                                                                                               | Valid values |  Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :------------: |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.ConstraintSelectionFactor</strong><br>The fraction of violated constraints to generate cutting planes for</p>       |    \[0,1]    |      0.25      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.IterationLimit</strong><br>Iteration limit for minimax cutting plane solver</p>                                     |   {1,...,∞}  |       100      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.IterationLimitSubsolver</strong><br>Iteration limit for minimization subsolver</p>                                  |   {0,...,∞}  |       100      |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.Reuse</strong><br>Reuse valid cutting planes in main dual model</p>                                                 |  true/false  |      false     |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceAbs</strong><br>Absolute termination tolerance between LP and linesearch objective</p>          |    \[0,∞]    |        1       |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TerminationToleranceRel</strong><br>Relative termination tolerance between LP and linesearch objective</p>          |    \[0,∞]    |        1       |
| <p><strong>Dual.ESH.InteriorPoint.CuttingPlane.TimeLimit</strong><br>Time limit for minimax solver</p>                                                             |    \[0,∞]    |       10       |
| <p><strong>Dual.ESH.InteriorPoint.MinimaxObjectiveLowerBound</strong><br>Lower bound for minimax objective variable</p>                                            |    \[-∞,0]   | -1000000000000 |
| <p><strong>Dual.ESH.InteriorPoint.MinimaxObjectiveUpperBound</strong><br>Upper bound for minimax objective variable</p>                                            |    \[-∞,∞]   |       0.1      |
| <p><strong>Dual.ESH.InteriorPoint.UsePrimalSolution</strong><br>Utilize primal solution as interior point<br>0: No 1: Add as new 2: Replace old 3: Use avarage</p> |   {0,...,3}  |        1       |
| <p><strong>Dual.ESH.Rootsearch.ConstraintTolerance</strong><br>Constraint tolerance for when not to add individual hyperplanes</p>                                 |    \[0,∞]    |      1e-08     |
| <p><strong>Dual.ESH.Rootsearch.UniqueConstraints</strong><br>Allow only one hyperplane per constraint per iteration</p>                                            |  true/false  |      false     |
| <p><strong>Dual.ESH.Rootsearch.UseMaxFunction</strong><br>Perform rootsearch on max function, otherwise on individual constraints</p>                              |  true/false  |      false     |

### Generated hyperplane cuts

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

| Name and description                                                                                                                                                  | Valid values | Default value |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Dual.HyperplaneCuts.ConstraintSelectionFactor</strong><br>The fraction of violated constraints to generate supporting hyperplanes / cutting planes for</p> |    \[0,1]    |      0.5      |
| <p><strong>Dual.HyperplaneCuts.Delay</strong><br>Add hyperplane cuts to model only after optimal MIP solution</p>                                                     |  true/false  |      true     |
| <p><strong>Dual.HyperplaneCuts.MaxConstraintFactor</strong><br>Rootsearch performed on constraints with values larger than this factor times the maximum value</p>    |  \[1e-06,1]  |      0.1      |
| <p><strong>Dual.HyperplaneCuts.MaxPerIteration</strong><br>Maximal number of hyperplanes to add per iteration</p>                                                     |   {0,...,∞}  |      200      |
| <p><strong>Dual.HyperplaneCuts.ObjectiveRootSearch</strong><br>When to use the objective root search<br>0: Always 1: IfConvex 2: Never</p>                            |   {0,...,2}  |       1       |
| <p><strong>Dual.HyperplaneCuts.SaveHyperplanePoints</strong><br>Whether to save the points in the generated hyperplanes list</p>                                      |  true/false  |     false     |
| <p><strong>Dual.HyperplaneCuts.UseIntegerCuts</strong><br>Add integer cuts for infeasible integer-combinations for binary problems</p>                                |  true/false  |     false     |

### MIP solver

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 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-----------: | :-----------: |
| <p><strong>Dual.MIP.CutOff.InitialValue</strong><br>Initial cutoff value to use</p>                                                                          |    \[-∞,∞]    |   1.799e+308  |
| <p><strong>Dual.MIP.CutOff.Tolerance</strong><br>An extra tolerance for the objective cutoff value (to prevent infeasible subproblems)</p>                   |    \[-∞,∞]    |     1e-05     |
| <p><strong>Dual.MIP.CutOff.UseInitialValue</strong><br>Use the initial cutoff value</p>                                                                      |   true/false  |     false     |
| <p><strong>Dual.MIP.InfeasibilityRepair.IntegerCuts</strong><br>Allow feasibility repair of integer cuts</p>                                                 |   true/false  |      true     |
| <p><strong>Dual.MIP.InfeasibilityRepair.IterationLimit</strong><br>Max number of infeasible problems repaired without primal objective value improvement</p> |   {0,...,∞}   |      100      |
| <p><strong>Dual.MIP.InfeasibilityRepair.TimeLimit</strong><br>Time limit when reparing infeasible problem</p>                                                |     \[0,∞]    |       10      |
| <p><strong>Dual.MIP.InfeasibilityRepair.Use</strong><br>Enable the infeasibility repair strategy for nonconvex problems</p>                                  |   true/false  |      true     |
| <p><strong>Dual.MIP.NodeLimit</strong><br>Node limit to use for MIP solver in single-tree strategy</p>                                                       |     \[0,∞]    |   1.799e+308  |
| <p><strong>Dual.MIP.NumberOfThreads</strong><br>Number of threads to use in MIP solver: 0: Automatic</p>                                                     |  {0,...,999}  |       0       |
| <p><strong>Dual.MIP.OptimalityTolerance</strong><br>The reduced-cost tolerance for optimality in the MIP solver</p>                                          | \[1e-09,0.01] |     1e-06     |
| <p><strong>Dual.MIP.Presolve.Frequency</strong><br>When to call the MIP presolve<br>0: Never 1: Once 2: Always</p>                                           |   {0,...,2}   |       1       |
| <p><strong>Dual.MIP.Presolve.RemoveRedundantConstraints</strong><br>Remove redundant constraints (as determined by presolve)</p>                             |   true/false  |     false     |
| <p><strong>Dual.MIP.Presolve.UpdateObtainedBounds</strong><br>Update bounds (from presolve) to the MIP model</p>                                             |   true/false  |      true     |
| <p><strong>Dual.MIP.SolutionLimit.ForceOptimal.Iteration</strong><br>Iterations without dual bound updates for forcing optimal MIP solution</p>              |   {0,...,∞}   |     10000     |
| <p><strong>Dual.MIP.SolutionLimit.ForceOptimal.Time</strong><br>Time (s) without dual bound updates for forcing optimal MIP solution</p>                     |     \[0,∞]    |      1000     |
| <p><strong>Dual.MIP.SolutionLimit.IncreaseIterations</strong><br>Max number of iterations between MIP solution limit increases</p>                           |   {0,...,∞}   |       50      |
| <p><strong>Dual.MIP.SolutionLimit.Initial</strong><br>Initial MIP solution limit</p>                                                                         |   {1,...,∞}   |       1       |
| <p><strong>Dual.MIP.SolutionLimit.UpdateTolerance</strong><br>The constraint tolerance for when to update MIP solution limit</p>                             |     \[0,∞]    |     0.001     |
| <p><strong>Dual.MIP.SolutionPool.Capacity</strong><br>The maximum number of solutions in the solution pool</p>                                               |   {0,...,∞}   |      100      |
| <p><strong>Dual.MIP.Solver</strong><br>Which MIP solver to use<br>0: Cplex 1: Gurobi 2: Cbc</p>                                                              |   {0,...,2}   |       1       |
| <p><strong>Dual.MIP.UpdateObjectiveBounds</strong><br>Update nonlinear objective variable bounds to primal/dual bounds</p>                                   |   true/false  |     false     |

### Dual reduction cut

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 |
| ------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.ReductionCut.MaxIterations</strong><br>Max number of primal cut reduction without primal improvement</p> |   {0,...,∞}  |       5       |
| <p><strong>Dual.ReductionCut.ReductionFactor</strong><br>The factor used to reduce the cutoff value</p>                  |    \[0,1]    |     0.001     |
| <p><strong>Dual.ReductionCut.Use</strong><br>Enable the dual reduction cut strategy for nonconvex problems</p>           |  true/false  |      true     |

### Relaxation strategies

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

| Name and description                                                                                                                             | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Dual.Relaxation.Frequency</strong><br>The frequency to solve an LP problem: 0: Disable</p>                                            |   {0,...,∞}  |       0       |
| <p><strong>Dual.Relaxation.IterationLimit</strong><br>The max number of relaxed LP problems to solve initially</p>                               |   {0,...,∞}  |      200      |
| <p><strong>Dual.Relaxation.MaxLazyConstraints</strong><br>Max number of lazy constraints to add in relaxed solutions in single-tree strategy</p> |   {0,...,∞}  |       0       |
| <p><strong>Dual.Relaxation.TerminationTolerance</strong><br>Time limit (s) when solving LP problems initially</p>                                |    \[-∞,∞]   |      0.5      |
| <p><strong>Dual.Relaxation.TimeLimit</strong><br>Time limit (s) when solving LP problems initially</p>                                           |    \[0,∞]    |       30      |
| <p><strong>Dual.Relaxation.Use</strong><br>Initially solve continuous dual relaxations</p>                                                       |  true/false  |      true     |

### Tree strategy

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 |
| ----------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Dual.TreeStrategy</strong><br>The main strategy to use<br>0: Multi-tree 1: Single-tree</p> |     {0,1}    |       1       |

## Optimization model

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

### Bound tightening

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 |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.BoundTightening.FeasibilityBased.MaxIterations</strong><br>Maximal number of bound tightening iterations</p>                     |   {0,...,∞}  |       5       |
| <p><strong>Model.BoundTightening.FeasibilityBased.TimeLimit</strong><br>Time limit for bound tightening</p>                                       |    \[0,∞]    |       2       |
| <p><strong>Model.BoundTightening.FeasibilityBased.Use</strong><br>Peform feasibility-based bound tightening</p>                                   |  true/false  |      true     |
| <p><strong>Model.BoundTightening.FeasibilityBased.UseNonlinear</strong><br>Peform feasibility-based bound tightening on nonlinear expressions</p> |  true/false  |      true     |
| <p><strong>Model.BoundTightening.InitialPOA.ConstraintTolerance</strong><br>Constraint termination tolerance</p>                                  |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.CutStrategy</strong><br>Dual cut strategy<br>0: ESH 1: ECP</p>                                        |     {0,1}    |       1       |
| <p><strong>Model.BoundTightening.InitialPOA.IterationLimit</strong><br>Iteration limit for POA</p>                                                |   {0,...,∞}  |       50      |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveConstraintTolerance</strong><br>Objective constraint termination tolerance</p>               |    \[-∞,∞]   |     0.001     |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveGapAbsolute</strong><br>Absolute objective gap termination level</p>                         |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.ObjectiveGapRelative</strong><br>Relative objective gap termination level</p>                         |    \[-∞,∞]   |      0.1      |
| <p><strong>Model.BoundTightening.InitialPOA.StagnationConstraintTolerance</strong><br>Tolerance factor for when no progress is made</p>           |    \[-∞,∞]   |      0.01     |
| <p><strong>Model.BoundTightening.InitialPOA.StagnationIterationLimit</strong><br>Limit for iterations without significant progress</p>            |   {0,...,∞}  |       5       |
| <p><strong>Model.BoundTightening.InitialPOA.TimeLimit</strong><br>Time limit for initial POA</p>                                                  |    \[-∞,∞]   |       5       |
| <p><strong>Model.BoundTightening.InitialPOA.Use</strong><br>Create an initial polyhedral outer approximation</p>                                  |  true/false  |     false     |

### Convexity

These settings control the convexity detection functionality

| Name and description                                                                                                                                        | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Convexity.AssumeConvex</strong><br>Assume that the problem is convex</p>                                                                   |  true/false  |     false     |
| <p><strong>Model.Convexity.Quadratics.EigenValueTolerance</strong><br>Convexity tolerance for the eigenvalues of the Hessian matrix for quadratic terms</p> |    \[0,∞]    |     1e-05     |

### Automatic reformulations

These settings control the automatic reformulations performed in SHOT.

| Name and description                                                                                                                                                                                                                                                                                                    | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Reformulation.Bilinear.AddConvexEnvelope</strong><br>Add convex envelopes (subject to original bounds) to bilinear terms</p>                                                                                                                                                                           |  true/false  |     false     |
| <p><strong>Model.Reformulation.Bilinear.IntegerFormulation</strong><br>Reformulate integer bilinear terms<br>0: No 1: No if nonconvex quadratic terms allowed by MIP solver 2: Yes</p>                                                                                                                                  |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Bilinear.IntegerFormulation.MaxDomain</strong><br>Do not reformulate integer variables in bilinear terms which can assume more than this number of discrete values</p>                                                                                                                   |   {2,...,∞}  |      100      |
| <p><strong>Model.Reformulation.Constraint.PartitionNonlinearTerms</strong><br>When to partition nonlinear sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                                   |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Constraint.PartitionQuadraticTerms</strong><br>When to partition quadratic sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                                   |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Monomials.Extract</strong><br>Extract monomial terms from nonlinear expressions</p>                                                                                                                                                                                                      |  true/false  |      true     |
| <p><strong>Model.Reformulation.Monomials.Formulation</strong><br>How to reformulate binary monomials<br>0: None 1: Simple 2: Costa and Liberti</p>                                                                                                                                                                      |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.ObjectiveFunction.Epigraph.Use</strong><br>Reformulates a nonlinear objective as an auxiliary constraint</p>                                                                                                                                                                             |  true/false  |     false     |
| <p><strong>Model.Reformulation.ObjectiveFunction.PartitionNonlinearTerms</strong><br>When to partition nonlinear sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                            |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.ObjectiveFunction.PartitionQuadraticTerms</strong><br>When to partition quadratic sums in objective function<br>0: Always 1: If result is convex 2: Never</p>                                                                                                                            |   {0,...,2}  |       1       |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Formulation</strong><br>Which formulation to use in eigenvalue decomposition<br>0: Term coefficient is included in reformulation 1: Term coefficient remains</p>                                                                                      |     {0,1}    |       0       |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Method</strong><br>Whether to use the eigen value decomposition of convex quadratic functions</p>                                                                                                                                                     |  true/false  |     false     |
| <p><strong>Model.Reformulation.Quadratics.EigenValueDecomposition.Use</strong><br>Whether to use the eigenvalue decomposition of convex quadratic functions</p>                                                                                                                                                         |  true/false  |     false     |
| <p><strong>Model.Reformulation.Quadratics.ExtractStrategy</strong><br>How to extract quadratic terms from nonlinear expressions<br>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</p> |   {0,...,3}  |       1       |
| <p><strong>Model.Reformulation.Quadratics.Strategy</strong><br>How to treat quadratic functions<br>0: All nonlinear 1: Use quadratic objective 2: Use convex quadratic objective and constraints 3: Use nonconvex quadratic objective and constraints</p>                                                               |   {0,...,3}  |       2       |
| <p><strong>Model.Reformulation.Signomials.Extract</strong><br>Extract signomial terms from nonlinear expressions</p>                                                                                                                                                                                                    |  true/false  |      true     |

### Variables

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 |
| --------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Model.Variables.Continuous.MaximumUpperBound</strong><br>Maximum upper bound for continuous variables</p>                          |    \[-∞,∞]   |     1e+50     |
| <p><strong>Model.Variables.Continuous.MinimumLowerBound</strong><br>Minimum lower bound for continuous variables</p>                          |    \[-∞,∞]   |     -1e+50    |
| <p><strong>Model.Variables.Integer.MaximumUpperBound</strong><br>Maximum upper bound for integer variables</p>                                |    \[-∞,∞]   |   2000000000  |
| <p><strong>Model.Variables.Integer.MinimumLowerBound</strong><br>Minimum lower bound for integer variables</p>                                |    \[-∞,∞]   |  -2000000000  |
| <p><strong>Model.Variables.NonlinearObjectiveVariable.Bound</strong><br>Max absolute bound for the auxiliary nonlinear objective variable</p> |    \[-∞,∞]   | 1000000000000 |

## Modeling system

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

### GAMS interface

These settings control functionality used in the GAMS interface.

| Name and description                                                                                                                                                    | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>ModelingSystem.GAMS.QExtractAlg</strong><br>Extraction algorithm for quadratic equations in GAMS interface<br>0: automatic 1: threepass 2: doubleforward</p> |   {0,...,2}  |       0       |

## Solver output

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

| Name and description                                                                                                                                                                        | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Output.Console.DualSolver.Show</strong><br>Show output from dual solver on console</p>                                                                                           |  true/false  |     false     |
| <p><strong>Output.Console.Iteration.Detail</strong><br>When should the fixed strategy be used<br>0: Full 1: On objective gap update 2: On objective gap update and all primal NLP calls</p> |   {0,...,2}  |       1       |
| <p><strong>Output.Console.LogLevel</strong><br>Log level for console output<br>0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off</p>                                         |   {0,...,6}  |       2       |
| <p><strong>Output.Console.PrimalSolver.Show</strong><br>Show output from primal solver on console</p>                                                                                       |  true/false  |     false     |
| <p><strong>Output.Debug.Enable</strong><br>Use debug functionality</p>                                                                                                                      |  true/false  |     false     |
| <p><strong>Output.Debug.Path</strong><br>The folder where to save the debug information</p>                                                                                                 |    string    |               |
| <p><strong>Output.File.LogLevel</strong><br>Log level for file output<br>0: Trace 1: Debug 2: Info 3: Warning 4: Error 5: Critical 6: Off</p>                                               |   {0,...,6}  |       2       |
| <p><strong>Output.GAMS.AlternateSolutionsFile</strong><br>Name of GAMS GDX file to write alternative solutions to</p>                                                                       |    string    |               |
| <p><strong>Output.OutputDirectory</strong><br>Where to save the output files<br>0: Problem directory 1: Program directory</p>                                                               |     {0,1}    |       1       |
| <p><strong>Output.SaveNumberOfSolutions</strong><br>Save max this number of primal solutions to OSrL or GDX file</p>                                                                        |   {0,...,∞}  |       1       |

## Primal heuristics

These settings control the primal heuristics used in SHOT.

### Fixed-integer (NLP) strategy

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 |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Primal.FixedInteger.CallStrategy</strong><br>When should the fixed strategy be used<br>0: Use each iteration 1: Based on iteration or time 2: Based on iteration or time, and for all feasible MIP solutions</p> |   {0,...,2}  |       2       |
| <p><strong>Primal.FixedInteger.CreateInfeasibilityCut</strong><br>Create a cut from an infeasible solution point</p>                                                                                                        |  true/false  |     false     |
| <p><strong>Primal.FixedInteger.DualPointGap.Relative</strong><br>If the objective gap between the MIP point and dual solution is less than this the fixed strategy is activated</p>                                         |    \[0,∞]    |     0.001     |
| <p><strong>Primal.FixedInteger.Frequency.Dynamic</strong><br>Dynamically update the call frequency based on success</p>                                                                                                     |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Frequency.Iteration</strong><br>Max number of iterations between calls</p>                                                                                                                   |   {0,...,∞}  |       10      |
| <p><strong>Primal.FixedInteger.Frequency.Time</strong><br>Max duration (s) between calls</p>                                                                                                                                |    \[0,∞]    |       5       |
| <p><strong>Primal.FixedInteger.IterationLimit</strong><br>Max number of iterations per call</p>                                                                                                                             |   {0,...,∞}  |    10000000   |
| <p><strong>Primal.FixedInteger.OnlyUniqueIntegerCombinations</strong><br>Whether to resolve with the same integer combination, e.g. for nonconvex problems with different continuous variable starting points</p>           |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Solver</strong><br>NLP solver to use<br>0: Ipopt 1: GAMS 2: SHOT</p>                                                                                                                         |   {0,...,2}  |       0       |
| <p><strong>Primal.FixedInteger.Source</strong><br>Source of fixed MIP solution point<br>0: All 1: First 2: All feasible 3: First and all feasible 4: With smallest constraint deviation</p>                                 |   {0,...,4}  |       3       |
| <p><strong>Primal.FixedInteger.SourceProblem</strong><br>Which problem formulation to use for NLP problem<br>0: Original problem 1: Reformulated problem 2: Both</p>                                                        |   {0,...,2}  |       0       |
| <p><strong>Primal.FixedInteger.TimeLimit</strong><br>Time limit (s) per NLP problem</p>                                                                                                                                     |    \[0,∞]    |       10      |
| <p><strong>Primal.FixedInteger.Use</strong><br>Use the fixed integer primal strategy</p>                                                                                                                                    |  true/false  |      true     |
| <p><strong>Primal.FixedInteger.Warmstart</strong><br>Warm start the NLP solver</p>                                                                                                                                          |  true/false  |      true     |

### Primal root search

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 |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Primal.Rootsearch.Use</strong><br>Use a rootsearch to find primal solutions</p>                                                                     |  true/false  |      true     |
| <p><strong>Primal.Tolerance.Integer</strong><br>Integer tolerance for accepting primal solutions</p>                                                           |    \[-∞,∞]   |     1e-05     |
| <p><strong>Primal.Tolerance.LinearConstraint</strong><br>Linear constraint tolerance for accepting primal solutions</p>                                        |    \[-∞,∞]   |     1e-06     |
| <p><strong>Primal.Tolerance.NonlinearConstraint</strong><br>Nonlinear constraint tolerance for accepting primal solutions</p>                                  |    \[-∞,∞]   |     1e-05     |
| <p><strong>Primal.Tolerance.TrustLinearConstraintValues</strong><br>Trust that subsolvers (NLP, MIP) give primal solutions that respect linear constraints</p> |  true/false  |      true     |

## Strategy

Overall strategy parameters used in SHOT.

| Name and description                                                                                                                | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Strategy.UseRecommendedSettings</strong><br>Modifies some settings to their recommended values based on the strategy</p> |  true/false  |      true     |

## Subsolver functionality

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

### Cbc

| Name and description                                                                                                                                  | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Cbc.AutoScale</strong><br>Whether to scale objective, rhs and bounds of problem if they look odd (experimental)</p>              |  true/false  |     false     |
| <p><strong>Subsolver.Cbc.DeterministicParallelMode</strong><br>Run Cbc with multiple threads in deterministic mode</p>                                |  true/false  |     false     |
| <p><strong>Subsolver.Cbc.NodeStrategy</strong><br>Node strategy<br>0: depth 1: downdepth 2: downfewest 3: fewest 4: hybrid 5: updepth 6: upfewest</p> |   {0,...,6}  |       4       |
| <p><strong>Subsolver.Cbc.Scaling</strong><br>Whether to scale problem<br>0: automatic 1: dynamic 2: equilibrium 3: geometric 4: off 5: rowsonly</p>   |   {0,...,5}  |       4       |
| <p><strong>Subsolver.Cbc.Strategy</strong><br>This turns on newer features<br>0: easy problems 1: default 2: aggressive</p>                           |   {0,...,2}  |       1       |

### Cplex

| Name and description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------: | :-----------: |
| <p><strong>Subsolver.Cplex.AddRelaxedLazyConstraintsAsLocal</strong><br>Whether to add lazy constraints generated in relaxed points as local or global</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                               |  true/false  |     false     |
| <p><strong>Subsolver.Cplex.FeasOptMode</strong><br>Strategy to use for the feasibility repair<br>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</p> |   {0,...,4}  |       0       |
| <p><strong>Subsolver.Cplex.MIPEmphasis</strong><br>Sets the MIP emphasis<br>0: Balanced 1: Feasibility 2: Optimality 3: Best bound 4: Hidden feasible</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                |   {0,...,4}  |       1       |
| <p><strong>Subsolver.Cplex.MemoryEmphasis</strong><br>Try to conserve memory when possible</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |     {0,1}    |       0       |
| <p><strong>Subsolver.Cplex.NodeFile</strong><br>Where to store the node file<br>0: No file 1: Compressed in memory 2: On disk 3: Compressed on disk</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |   {0,...,3}  |       1       |
| <p><strong>Subsolver.Cplex.NumericalEmphasis</strong><br>Emphasis on numerical stability</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |     {0,1}    |       1       |
| <p><strong>Subsolver.Cplex.OptimalityTarget</strong><br>Specifies how CPLEX treats nonconvex quadratics<br>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</p>                                                                                                                                                                                                                                          |   {0,...,3}  |       0       |
| <p><strong>Subsolver.Cplex.ParallelMode</strong><br>Controls how much time and memory should be used when filling the solution pool<br>-1: Opportunistic 0: Automatic 1: Deterministic</p>                                                                                                                                                                                                                                                                                                                                                                                                                               |  {-1,...,1}  |       0       |
| <p><strong>Subsolver.Cplex.Probe</strong><br>Sets the MIP probing level<br>-1: No probing 0: Automatic 1: Moderate 2: Aggressive 3: Very aggressive</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |  {-1,...,3}  |       0       |
| <p><strong>Subsolver.Cplex.SolutionPoolGap</strong><br>Sets the relative gap filter on objective values in the solution pool</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |    \[0,∞]    |     1e+75     |
| <p><strong>Subsolver.Cplex.SolutionPoolIntensity</strong><br>Controls how much time and memory should be used when filling the solution pool<br>0: Automatic 1: Mild 2: Moderate 3: Aggressive 4: Very aggressive</p>                                                                                                                                                                                                                                                                                                                                                                                                    |   {0,...,4}  |       0       |
| <p><strong>Subsolver.Cplex.SolutionPoolReplace</strong><br>How to replace solutions in the solution pool when full<br>0: Replace oldest 1: Replace worst 2: Find diverse</p>                                                                                                                                                                                                                                                                                                                                                                                                                                             |   {0,...,2}  |       0       |
| <p><strong>Subsolver.Cplex.UseGenericCallback</strong><br>Use the new generic callback in the single-tree strategy</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |  true/false  |     false     |
| <p><strong>Subsolver.Cplex.WorkDirectory</strong><br>Directory for swap file</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |    string    |               |
| <p><strong>Subsolver.Cplex.WorkMemory</strong><br>Memory limit for when to start swapping to disk</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |    \[0,∞]    |       0       |

### GAMS

Settings for the GAMS NLP solvers.

| Name and description                                                                                  | Valid values | Default value |
| ----------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.GAMS.NLP.OptionsFilename</strong><br>Options file for the NLP solver in GAMS</p> |    string    |               |
| <p><strong>Subsolver.GAMS.NLP.Solver</strong><br>NLP solver to use in GAMS (auto: SHOT chooses)</p>   |    string    |      auto     |

### Gurobi

| Name and description                                                                                                                                     |    Valid values    | Default value |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------: | :-----------: |
| <p><strong>Subsolver.Gurobi.Heuristics</strong><br>The relative amount of time spent in MIP heuristics.</p>                                              |       \[0,1]       |      0.05     |
| <p><strong>Subsolver.Gurobi.MIPFocus</strong><br>MIP focus<br>0: Automatic 1: Feasibility 2: Optimality 3: Best bound</p>                                |      {0,...,3}     |       0       |
| <p><strong>Subsolver.Gurobi.NumericFocus</strong><br>MIP focus<br>0: Automatic 1: Mild 2: Moderate 3: Aggressive</p>                                     |      {0,...,3}     |       1       |
| <p><strong>Subsolver.Gurobi.PoolSearchMode</strong><br>Finds extra solutions<br>0: No extra effort 1: Try to find solutions 2: Find n best solutions</p> |      {0,...,2}     |       0       |
| <p><strong>Subsolver.Gurobi.PoolSolutions</strong><br>Determines how many MIP solutions are stored</p>                                                   | {1,...,2000000000} |       10      |
| <p><strong>Subsolver.Gurobi.ScaleFlag</strong><br>Controls model scaling<br>-1: Automatic 0: Off 1: Mild 2: Moderate 3: Aggressive</p>                   |     {-1,...,3}     |       -1      |

### Ipopt

| Name and description                                                                                                                  | Valid values | Default value |
| ------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Ipopt.ConstraintViolationTolerance</strong><br>Constraint violation tolerance in Ipopt</p>                       |    \[-∞,∞]   |     1e-08     |
| <p><strong>Subsolver.Ipopt.LinearSolver</strong><br>Ipopt linear subsolver<br>0: Default 1: MA27 2: MA57 3: MA86 4: MA97 5: MUMPS</p> |   {0,...,5}  |       0       |
| <p><strong>Subsolver.Ipopt.MaxIterations</strong><br>Maximum number of iterations</p>                                                 |   {0,...,∞}  |      1000     |
| <p><strong>Subsolver.Ipopt.RelativeConvergenceTolerance</strong><br>Relative convergence tolerance</p>                                |    \[-∞,∞]   |     1e-08     |

### Root search solver

Settings for the Boost rootsearch functionality.

| Name and description                                                                                                   | Valid values | Default value |
| ---------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.Rootsearch.ActiveConstraintTolerance</strong><br>Epsilon constraint tolerance for root search</p> |    \[0,∞]    |       0       |
| <p><strong>Subsolver.Rootsearch.MaxIterations</strong><br>Maximal root search iterations</p>                           |   {0,...,∞}  |      100      |
| <p><strong>Subsolver.Rootsearch.Method</strong><br>Root search method to use<br>0: TOMS748 1: Bisection</p>            |     {0,1}    |       0       |
| <p><strong>Subsolver.Rootsearch.TerminationTolerance</strong><br>Epsilon lambda tolerance for root search</p>          |    \[0,∞]    |     1e-16     |

### SHOT primal NLP solver

| Name and description                                                                                                 | Valid values | Default value |
| -------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Subsolver.SHOT.ReuseHyperplanes.Fraction</strong><br>The fraction of generated hyperplanes to reuse.</p>  |    \[0,1]    |      0.1      |
| <p><strong>Subsolver.SHOT.ReuseHyperplanes.Use</strong><br>Reuse valid generated hyperplanes in main dual model.</p> |  true/false  |      true     |
| <p><strong>Subsolver.SHOT.UseFBBT</strong><br>Do FBBT on NLP problem.</p>                                            |  true/false  |      true     |

## Termination

These settings control when SHOT will terminate the solution process.

| Name and description                                                                                                                                                               | Valid values | Default value |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
| <p><strong>Termination.ConstraintTolerance</strong><br>Termination tolerance for nonlinear constraints</p>                                                                         |    \[0,∞]    |     1e-08     |
| <p><strong>Termination.DualStagnation.ConstraintTolerance</strong><br>Min absolute difference between max nonlinear constraint errors in subsequent iterations for termination</p> |    \[0,∞]    |     1e-06     |
| <p><strong>Termination.DualStagnation.IterationLimit</strong><br>Max number of iterations without significant dual objective value improvement</p>                                 |   {0,...,∞}  |   2147483647  |
| <p><strong>Termination.IterationLimit</strong><br>Iteration limit for main strategy</p>                                                                                            |   {1,...,∞}  |     200000    |
| <p><strong>Termination.ObjectiveConstraintTolerance</strong><br>Termination tolerance for the nonlinear objective constraint</p>                                                   |    \[0,∞]    |     1e-08     |
| <p><strong>Termination.ObjectiveGap.Absolute</strong><br>Absolute gap termination tolerance for objective function</p>                                                             |    \[0,∞]    |     0.001     |
| <p><strong>Termination.ObjectiveGap.Relative</strong><br>Relative gap termination tolerance for objective function</p>                                                             |    \[0,∞]    |     0.001     |
| <p><strong>Termination.PrimalStagnation.IterationLimit</strong><br>Max number of iterations without significant primal objective value improvement</p>                             |   {0,...,∞}  |       50      |
| <p><strong>Termination.TimeLimit</strong><br>Time limit (s) for solver</p>                                                                                                         |    \[0,∞]    |   1.799e+308  |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.shotsolver.dev/shot/using-shot/solver-options.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
