Configuring the Solvers
GenX.configure_solver
— Methodconfigure_solver(solver_settings_path::String, optimizer::Any)
This method returns a solver-specific MathOptInterface.OptimizerWithAttributes
optimizer instance to be used in the GenX.generate\_model()
method.
Arguments
solver_settings_path::String
: specifies the path to the directory that contains the settings YAML file for the specified solver.optimizer::Any
: the optimizer instance to be configured.
Currently supported solvers include: "Gurobi", "CPLEX", "Clp", "Cbc", or "SCIP"
Returns
optimizer::MathOptInterface.OptimizerWithAttributes
: the configured optimizer instance.
GenX.infer_solver
— Methodinfer_solver(optimizer::Any)
Return the name (String
) of the solver to be used in the GenX.configure_solver method according to the solver imported by the user.
GenX.rename_keys
— Methodrename_keys(attributes:Dict, new_key_names::Dict)
Renames the keys of the attributes
dictionary based on old->new pairs in the newkeynames dictionary.
Configuring HiGHS
GenX.configure_highs
— Methodconfigure_highs(solver_settings_path::String)
Reads user-specified solver settings from highs_settings.yml in the directory specified by the string solver_settings_path.
Returns a MathOptInterface.OptimizerWithAttributes
HiGHS optimizer instance to be used in the GenX.generate_model()
method.
The HiGHS optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided: All the references are in https://github.com/jump-dev/HiGHS.jl, https://github.com/ERGO-Code/HiGHS, and https://highs.dev/
# HiGHS Solver Parameters
# Common solver settings
Feasib_Tol: 1.0e-06 # Primal feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07]
Optimal_Tol: 1.0e-03 # Dual feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07]
TimeLimit: Inf # Time limit # [type: double, advanced: false, range: [0, inf], default: inf]
Pre_Solve: choose # Presolve option: "off", "choose" or "on" # [type: string, advanced: false, default: "choose"]
Method: ipm #choose #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] In order to run a case when the UCommit is set to 1, i.e. MILP instance, set the Method to choose
# IPM optimality tolerance
# [type: double, advanced: false, range: [1e-12, inf], default: 1e-08]
ipm_optimality_tolerance: 1e-08
# Run the crossover routine for IPX
# [type: string, advanced: "on", range: {"off", "on"}, default: "off"]
run_crossover: "off"
# tolerance on relative gap, |ub-lb|/|ub|, to determine whether optimality has been reached for a MIP instance
# [type: double, advanced: false, range: [0, inf], default: 0.0001]
mip_rel_gap: 0.0001
# tolerance on absolute gap of MIP, |ub-lb|, to determine whether optimality has been reached for a MIP instance
# [type: double, advanced: false, range: [0, inf], default: 1e-06]
mip_abs_gap: 1e-06
Configuring Gurobi
GenX.configure_gurobi
— Methodconfigure_gurobi(solver_settings_path::String)
Reads user-specified solver settings from gurobi_settings.yml in the directory specified by the string solver_settings_path.
Returns a MathOptInterface.OptimizerWithAttributes
Gurobi optimizer instance to be used in the GenX.generate_model()
method.
The Gurobi optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
- FeasibilityTol = 1e-6 (Constraint (primal) feasibility tolerances. See https://www.gurobi.com/documentation/8.1/refman/feasibilitytol.html)
- OptimalityTol = 1e-4 (Dual feasibility tolerances. See https://www.gurobi.com/documentation/8.1/refman/optimalitytol.html#parameter:OptimalityTol)
- Presolve = -1 (Controls presolve level. See https://www.gurobi.com/documentation/8.1/refman/presolve.html)
- AggFill = -1 (Allowed fill during presolve aggregation. See https://www.gurobi.com/documentation/8.1/refman/aggfill.html#parameter:AggFill)
- PreDual = -1 (Presolve dualization. See https://www.gurobi.com/documentation/8.1/refman/predual.html#parameter:PreDual)
- TimeLimit = Inf (Limits total time solver. See https://www.gurobi.com/documentation/8.1/refman/timelimit.html)
- MIPGap = 1e-4 (Relative (p.u. of optimal) mixed integer optimality tolerance for MIP problems (ignored otherwise). See https://www.gurobi.com/documentation/8.1/refman/mipgap2.html)
- Crossover = -1 (Barrier crossver strategy. See https://www.gurobi.com/documentation/8.1/refman/crossover.html#parameter:Crossover)
- Method = -1 (Algorithm used to solve continuous models (including MIP root relaxation). See https://www.gurobi.com/documentation/8.1/refman/method.html)
- BarConvTol = 1e-8 (Barrier convergence tolerance (determines when barrier terminates). See https://www.gurobi.com/documentation/8.1/refman/barconvtol.html)
- NumericFocus = 0 (Numerical precision emphasis. See https://www.gurobi.com/documentation/8.1/refman/numericfocus.html)
Configuring CPLEX
GenX.configure_cplex
— Methodconfigure_cplex(solver_settings_path::String)
Reads user-specified solver settings from cplex_settings.yml
in the directory specified by the string solver_settings_path
.
Returns a MathOptInterface.OptimizerWithAttributes
CPLEX optimizer instance.
The optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
Feasib_Tol
,sets CPX_PARAM_EPRHS. Control the primal feasibility tolerance. Default is
1e-6
.Optimal_Tol
,sets
CPX_PARAM_EPOPT
. Control the optimality tolerance. Default is1e-4
.AggFill
,sets
CPX_PARAM_AGGFILL
. Control the allowed fill during presolve aggregation. Default is10
.PreDual
,sets
CPX_PARAM_PREDUAL
. Decides whether presolve should pass the primal or dual linear programming problem to the LP optimization algorithm. Default is0
.TimeLimit
,sets
CPX_PARAM_TILIM
. Limits total solver time. Default is1e+75
.MIPGap
,sets
CPX_PARAM_EPGAP
Relative (p.u. of optimal) mixed integer optimality tolerance for MIP problems (ignored otherwise). Default is1e-3
.Method
,sets
CPX_PARAM_LPMETHOD
. Algorithm used to solve continuous models (including MIP root relaxation) Default is0
.BarConvTol
,sets
CPX_PARAM_BAREPCOMP
. Barrier convergence tolerance (determines when barrier terminates). Default is1e-8
.NumericFocus
,sets
CPX_PARAM_NUMERICALEMPHASIS
. Numerical precision emphasis. Default is0
.BarObjRng
,sets
CPX_PARAM_BAROBJRNG
. The maximum absolute value of the objective function. Default is1e+75
.SolutionType
,sets
CPX_PARAM_SOLUTIONTYPE
. Solution type for LP or QP. Default is2
.
The optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
Any other attributes in the settings file (which typically start with CPX_PARAM_
) will also be passed to the solver.
Configuring Clp
GenX.configure_clp
— Methodconfigure_clp(solver_settings_path::String)
Reads user-specified solver settings from clp_settings.yml in the directory specified by the string solver_settings_path.
Returns a MathOptInterface.OptimizerWithAttributes
Clp optimizer instance to be used in the GenX.generate_model()
method.
The Clp optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
- PrimalTolerance = 1e-7 (Primal feasibility tolerance)
- DualTolerance = 1e-7 (Dual feasibility tolerance)
- DualObjectiveLimit = 1e308 (When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit)
- MaximumIterations = 2147483647 (Terminate after performing this number of simplex iterations)
- MaximumSeconds = -1.0 (Terminate after this many seconds have passed. A negative value means no time limit)
- LogLevel = 1 (Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output)
- PresolveType = 0 (Set to 1 to disable presolve)
- SolveType = 5 (Solution method: dual simplex (0), primal simplex (1), sprint (2), barrier with crossover (3), barrier without crossover (4), automatic (5))
- InfeasibleReturn = 0 (Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well))
- Scaling = 3 (0 0ff, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic (later))
- Perturbation = 100 (switch on perturbation (50), automatic (100), don't try perturbing (102))
Configuring Cbc
GenX.configure_cbc
— Methodconfigure_cbc(solver_settings_path::String)
Reads user-specified solver settings from cbc_settings.yml in the directory specified by the string solver_settings_path.
Returns a MathOptInterface.OptimizerWithAttributes
Cbc optimizer instance to be used in the GenX.generate_model()
method.
The Cbc optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
- seconds = 1e-6
- logLevel = 1e-6
- maxSolutions = -1
- maxNodes = -1
- allowableGap = -1
- ratioGap = Inf
- threads = 1
Configuring SCIP
GenX.configure_scip
— Methodconfigure_scip(solver_settings_path::String)
Reads user-specified solver settings from scip_settings.yml in the directory specified by the string solver_settings_path.
Returns a MathOptInterface.OptimizerWithAttributes
SCIP optimizer instance to be used in the GenX.generate_model()
method.
The SCIP optimizer instance is configured with the following default parameters if a user-specified parameter for each respective field is not provided:
- Dispverblevel = 0
- limitsgap = 0.05