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-06Configuring 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_EPGAPRelative (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