SHOT (Supporting Hyperplane Optimization Toolkit) is a deterministic solver for mixed-integer nonlinear programming problems (MINLPs).
Originally, SHOT was intended for convex MINLP problems only, but now also has functionality to solve nonconvex MINLP problems as a heuristic method without providing any guarantees of global optimality. SHOT can solve certain nonconvex problem types to global optimality as well.
SHOT has mainly been developed by Andreas Lundell (Åbo Akademi University, Finland) and Jan Kronqvist (Imperial College London, UK). For more details, see [125, 121, 111, 112, 120].
SHOT supports GAMS equations that use the following intrinsic functions: abs, cos, cvPower, div, exp, log, log10, log2, pi, power, rPower, sin, sqr, sqrt, vcPower.
Algorithm
SHOT is based on iteratively creating a tighter polyhedral approximation of the nonlinear feasible set by generating supporting hyperplanes or cutting planes. These linearized problems are then solved with a mixed-integer linear programming (MIP) solver. GAMS/SHOT uses CPLEX, if a GAMS/CPLEX license is available, and otherwise CBC. Users with a license from Gurobi can also select Gurobi as MIP solver. If CPLEX or Gurobi is used, the subproblems can also include quadratic and bilinear nonlinearities directly.
The solution to the outer approximation problem provides a dual bound (i.e., a lower bound when solving a minimization problem) to the optimal value of the original problem if it is convex. If the problem is nonconvex, convergence to the global optimal solution cannot be guaranteed (but might be achieved for certain classes of problems, cf. [121]).
To get a primal bound (i.e., an upper bound when solving a minimization problem) on the optimal value, SHOT utilizes the following heuristics:
Solving nonlinear programming (NLP) problems where the integer variables have been fixed to valid values. This is done by calling an NLP solver, which is either Ipopt, one of the GAMS NLP solvers, or SHOT itself.
By checking solutions from the MIP solver's solution pool for points that fulfill also the nonlinear constraints in the original MINLP problem.
By performing root searches.
When a termination criterion like a tolerance on the relative or absolute objective gap or a time limit is fulfilled, SHOT terminates and returns the current primal solution to GAMS. If the original problem is convex and SHOT could close the objective gap, then this is a global optimal solution to the problem. If it is nonconvex, then there is normally no guarantee that such a solution can be found. However, SHOT will always, in addition to a primal solution, return a valid dual bound on the solution in model attribute objest, unless Model.Convexity.AssumeConvex has been enabled.
Usage
The following statement can be used inside your GAMS program to specify using SHOT
Option MINLP = SHOT; { or MIQCP }
The above statement should appear before the Solve statement. If SHOT was specified as the default MINLP or MIQCP solver during GAMS installation, the above statement is not necessary.
Options can be specified by a SHOT options file. A SHOT options file consists of one option or comment per line. An asterik (*) at the beginning of a line causes the entire line to be ignored. Otherwise, the line will be interpreted as an option name and value separated by an equal sign (=) and any amount of white space (blanks or tabs).
It causes GAMS/SHOT to use the Extended Cutting Plane (ECP) method instead of the Extended Supporting Hyperplane (EHP) method, changes the MIP solver to CBC, and enables showing the output of the solver that computes dual bounds (typically the MIP solver).
Attention
SHOT requires options to be specified using exactly the names as specified in the documentation. That is, also casing matters.
List of SHOT Options
In the following, we give a detailed list of all SHOT options.
Solver output
These settings control how much and what output is shown to the user from the solver.
Option
Description
Default
Output.Debug.Path
The folder where to save the debug information
Range: string
Output.GAMS.AlternateSolutionsFile
Name of GAMS GDX file to write alternative solutions to
Range: string
Output.Console.Iteration.Detail
When should the fixed strategy be used
0: Full
1: On objective gap update
2: On objective gap update and all primal NLP calls
1
Output.Console.LogLevel
Log level for console output
0: Trace
1: Debug
2: Info
3: Warning
4: Error
5: Critical
6: Off
2
Output.Console.DualSolver.Show
Show output from dual solver on console
Range: boolean
0
Output.Console.PrimalSolver.Show
Show output from primal solver on console
Range: boolean
0
Output.Debug.Enable
Use debug functionality
Range: boolean
0
Subsolver functionality
These settings allow for more direct control of the different subsolvers utilized in SHOT.
Option
Description
Default
Subsolver.Cplex.WorkDirectory
Directory for swap file
Range: string
Subsolver.GAMS.NLP.OptionsFilename
Options file for the NLP solver in GAMS
Range: string
Subsolver.GAMS.NLP.Solver
NLP solver to use in GAMS (auto: SHOT chooses)
Range: string
Whether to scale problem
0: automatic
1: dynamic
2: equilibrium
3: geometric
4: off
5: rowsonly
4
Subsolver.Cbc.Strategy
This turns on newer features
0: easy problems
1: default
2: aggressive
1
Subsolver.Cplex.FeasOptMode
Strategy to use for the feasibility repair
0: Minimize the sum of all required relaxations in first phase only
1: Minimize the sum of all required relaxations in first phase and execute second phase to find optimum among minimal relaxations
2: Minimize the number of constraints and bounds requiring relaxation in first phase only
3: Minimize the sum of squares of required relaxations in first phase only
4: Minimize the sum of squares of required relaxations in first phase and execute second phase to find optimum among minimal relaxations
0
Subsolver.Cplex.MIPEmphasis
Sets the MIP emphasis
0: Balanced
1: Feasibility
2: Optimality
3: Best bound
4: Hidden feasible
1
Subsolver.Cplex.MemoryEmphasis
Try to conserve memory when possible
Range: {0, ..., 1}
0
Subsolver.Cplex.NodeFile
Where to store the node file
0: No file
1: Compressed in memory
2: On disk
3: Compressed on disk
1
Subsolver.Cplex.NumericalEmphasis
Emphasis on numerical stability
Range: {0, ..., 1}
1
Subsolver.Cplex.OptimalityTarget
Specifies how CPLEX treats nonconvex quadratics
0: Automatic
1: Searches for a globally optimal solution to a convex model
2: Searches for a solution that satisfies first-order optimality conditions, but is not necessarily globally optimal
3: Searches for a globally optimal solution to a nonconvex model
0
Subsolver.Cplex.ParallelMode
Controls how much time and memory should be used when filling the solution pool
-1: Opportunistic
0: Automatic
1: Deterministic
0
Subsolver.Cplex.Probe
Sets the MIP probing level
-1: No probing
0: Automatic
1: Moderate
2: Aggressive
3: Very aggressive
0
Subsolver.Cplex.SolutionPoolIntensity
Controls how much time and memory should be used when filling the solution pool
0: Automatic
1: Mild
2: Moderate
3: Aggressive
4: Very aggressive
0
Subsolver.Cplex.SolutionPoolReplace
How to replace solutions in the solution pool when full
0: Replace oldest
1: Replace worst
2: Find diverse
Sets the relative gap filter on objective values in the solution pool
Range: [0, 1e+75]
1e+75
Subsolver.Cplex.WorkMemory
Memory limit for when to start swapping to disk
Range: [0, 1e+75]
0
Subsolver.Gurobi.Heuristics
The relative amount of time spent in MIP heuristics.
Range: [0, 1]
0.05
Subsolver.Ipopt.ConstraintViolationTolerance
Constraint violation tolerance in Ipopt
Range: real
1e-08
Subsolver.Ipopt.RelativeConvergenceTolerance
Relative convergence tolerance
Range: real
1e-08
Subsolver.Rootsearch.ActiveConstraintTolerance
Epsilon constraint tolerance for root search
Range: [0, ∞]
0
Subsolver.Rootsearch.TerminationTolerance
Epsilon lambda tolerance for root search
Range: [0, ∞]
1e-16
Subsolver.SHOT.ReuseHyperplanes.Fraction
The fraction of generated hyperplanes to reuse.
Range: [0, 1]
0.1
Subsolver.Cbc.AutoScale
Whether to scale objective, rhs and bounds of problem if they look odd (experimental)
Range: boolean
0
Subsolver.Cbc.DeterministicParallelMode
Run Cbc with multiple threads in deterministic mode
Range: boolean
0
Subsolver.Cplex.AddRelaxedLazyConstraintsAsLocal
Whether to add lazy constraints generated in relaxed points as local or global
Range: boolean
0
Subsolver.Cplex.UseGenericCallback
Use the new generic callback in the single-tree strategy
Range: boolean
0
Subsolver.SHOT.ReuseHyperplanes.Use
Reuse valid generated hyperplanes in main dual model.
Range: boolean
1
Subsolver.SHOT.UseFBBT
Do FBBT on NLP problem.
Range: boolean
1
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.
Which formulation to use in eigenvalue decomposition
0: Term coefficient is included in reformulation
1: Term coefficient remains
0
Model.Reformulation.Quadratics.ExtractStrategy
How to extract quadratic terms from nonlinear expressions
0: Do not extract
1: Extract to same objective or constraint
2: Extract to quadratic equality constraint if nonconvex
3: Extract to quadratic equality constraint even if convex
1
Model.Reformulation.Quadratics.Strategy
How to treat quadratic functions
0: All nonlinear
1: Use quadratic objective
2: Use convex quadratic objective and constraints
3: Use nonconvex quadratic objective and constraints
Whether to use the eigenvalue decomposition of convex quadratic functions
Range: boolean
0
Model.Reformulation.Signomials.Extract
Extract signomial terms from nonlinear expressions
Range: boolean
1
Modeling system
These settings control functionality used in the interfaces to different modeling environments.
Option
Description
Default
ModelingSystem.GAMS.QExtractAlg
Extraction algorithm for quadratic equations in GAMS interface
0: automatic
1: threepass
2: doubleforward
3: concurrent
0
Primal heuristics
These settings control the primal heuristics used in SHOT.
Option
Description
Default
Primal.FixedInteger.CallStrategy
When should the fixed strategy be used
0: Use each iteration
1: Based on iteration or time
2: Based on iteration or time, and for all feasible MIP solutions
2
Primal.FixedInteger.Frequency.Iteration
Max number of iterations between calls
Range: {0, ..., ∞}
10
Primal.FixedInteger.IterationLimit
Max number of iterations per call
Range: {0, ..., ∞}
10000000
Primal.FixedInteger.Solver
NLP solver to use
0: Ipopt
1: GAMS
2: SHOT
1
Primal.FixedInteger.Source
Source of fixed MIP solution point
0: All
1: First
2: All feasible
3: First and all feasible
4: With smallest constraint deviation
3
Primal.FixedInteger.SourceProblem
Which problem formulation to use for NLP problem
0: Original problem
1: Reformulated problem
2: Both
0
Primal.FixedInteger.DualPointGap.Relative
If the objective gap between the MIP point and dual solution is less than this the fixed strategy is activated
Range: [0, ∞]
0.001
Primal.FixedInteger.Frequency.Time
Max duration (s) between calls
Range: [0, ∞]
5
Primal.FixedInteger.TimeLimit
Time limit (s) per NLP problem
Range: [0, ∞]
10
Primal.Tolerance.Integer
Integer tolerance for accepting primal solutions
Range: real
1e-05
Primal.Tolerance.LinearConstraint
Linear constraint tolerance for accepting primal solutions
Range: real
1e-06
Primal.Tolerance.NonlinearConstraint
Nonlinear constraint tolerance for accepting primal solutions
Range: real
1e-05
Primal.FixedInteger.CreateInfeasibilityCut
Create a cut from an infeasible solution point
Range: boolean
0
Primal.FixedInteger.Frequency.Dynamic
Dynamically update the call frequency based on success
Range: boolean
1
Primal.FixedInteger.OnlyUniqueIntegerCombinations
Whether to resolve with the same integer combination, e.g. for nonconvex problems with different continuous variable starting points
Range: boolean
1
Primal.FixedInteger.Use
Use the fixed integer primal strategy
Range: boolean
1
Primal.FixedInteger.Warmstart
Warm start the NLP solver
Range: boolean
1
Primal.Rootsearch.Use
Use a rootsearch to find primal solutions
Range: boolean
1
Primal.Tolerance.TrustLinearConstraintValues
Trust that subsolvers (NLP, MIP) give primal solutions that respect linear constraints
Range: boolean
1
Termination
These settings control when SHOT will terminate the solution process.
Option
Description
Default
Termination.DualStagnation.IterationLimit
Max number of iterations without significant dual objective value improvement
Range: {0, ..., ∞}
∞
Termination.IterationLimit
Iteration limit for main strategy
Range: {1, ..., ∞}