![]() |
MAiNGO
|
Struct for storing settings for MAiNGO. More...
#include <settings.h>
Public Attributes | |
Tolerances | |
double | epsilonA = 1.0e-2 |
Absolute optimality tolerance, i.e., termination when (UBD-LBD) < BAB_epsilon_a. More... | |
double | epsilonR = 1.0e-2 |
Relative optimality tolerance, i.e., termination when (UBD-LBD) < BAB_epsilon_r * UBD. More... | |
double | deltaIneq = 1.0e-6 |
Absolute feasibility tolerance for inequality constraints, i.e., constraint is considered satisfied if gi_(x)<=UBP_delta_ineq. More... | |
double | deltaEq = 1.0e-6 |
Absolute feasibility tolerance for equality constraints, i.e., constraint is considered satisfied if |hi_(x)|<=UBP_delta_eq. More... | |
double | relNodeTol = 1.0e-9 |
Relative tolerance for minimum node size. Nodes are discarded if in every dimension their width gets below this tolerance times the original width. In this case, global optimality to the desired optimality tolerances may not be reached. More... | |
Other termination settings | |
unsigned | BAB_maxNodes = std::numeric_limits<unsigned>::max() |
Maximum number of nodes (i.e., solver terminates when more than BAB_maxnodes are held in memory; used to avoid excessive branching) More... | |
unsigned | BAB_maxIterations = std::numeric_limits<unsigned>::max() |
Maximum number of iterations (i.e., maximum number of nodes visited in the Branch-and-Bound tree) More... | |
unsigned | maxTime = 86400 |
CPU time limit in seconds. More... | |
bool | confirmTermination = false |
Whether to ask the user before terminating when reaching time, node, or iteration limits. More... | |
bool | terminateOnFeasiblePoint = false |
Whether to terminate as soon as the first feasible point was found (no guarantee of global or local optimality!) More... | |
double | targetLowerBound = std::numeric_limits<double>::max() |
Target value for the lower bound on the optimal objective. MAiNGO terminates once LBD>=targetLowerBound (no guarantee of global or local optimality!) More... | |
double | targetUpperBound = -std::numeric_limits<double>::max() |
Target value for the upper bound on the optimal objective. MAiNGO terminates once UBD<=targetUpperBound (no guarantee of global or local optimality!) More... | |
double | infinity = std::numeric_limits<double>::max() |
User definition of infinity (used to initialize UBD and LBD) [currently cannot be set by the user via set_option]. More... | |
Output | |
VERB | BAB_verbosity = VERB_NORMAL |
How much output to print from Branch & Bound solver. See documentation of maingo::VERB for possible values. More... | |
VERB | LBP_verbosity = VERB_NORMAL |
How much output to print from Lower Bounding Solver. See documentation of maingo::VERB for possible values. More... | |
VERB | UBP_verbosity = VERB_NORMAL |
How much output to print from Upper Bounding Solver. See documentation of maingo::VERB for possible values. More... | |
unsigned | BAB_printFreq = 100 |
After how many iterations to print progress on screen (additionally, a line is printed when a new incumbent is found) More... | |
unsigned | BAB_logFreq = 100 |
Like BAB_printFreq, but for log. More... | |
LOGGING_DESTINATION | loggingDestination = LOGGING_FILE_AND_STREAM |
Where to print or write the output. See documentation of maingo::LOGGING_DESTINATION for possible values. More... | |
unsigned | writeToLogSec = 1800 |
Write to log file after a given ammount of CPU seconds. More... | |
bool | writeResultFile = true |
Whether to write an additional file containing non-standard information about the solved model. More... | |
bool | writeCsv = false |
Whether to write csv-log files (named bab_statistics.csv and bab_iterations.csv). More... | |
bool | writeJson = false |
Whether to write a json-log file (named bab.json). More... | |
bool | PRE_printEveryLocalSearch = false |
Whether to print every run during multistart at the root node. More... | |
WRITING_LANGUAGE | modelWritingLanguage = LANG_NONE |
In what modeling language to write the current model to a file in. See documentation of maingo::WRITING_LANGUAGE for possible values. More... | |
Pre-processing | |
unsigned | PRE_maxLocalSearches = 3 |
Number of local searches in the multistart heuristic during preprocessing at the root node. More... | |
unsigned | PRE_obbtMaxRounds = 10 |
Maximum number of rounds of optimization-based range reduction (OBBT; cf., e.g., Gleixner et al., J. Glob. Optim. 67 (2017) 731; maximizing and minimizing each variable subject to relaxed constraints) at the root node. If >=1 and a feasible point is found during multistart, one round of OBBT using an objective cut (f_cv<=UBD) is conducted as well. More... | |
bool | PRE_pureMultistart = false |
Whether to perform a multistart only. A B&B tree will not be constructed and no lower bounding problems will be solved. More... | |
B&B settings - Tree management | |
babBase::enums::NS | BAB_nodeSelection = babBase::enums::NS_BESTBOUND |
How to select the next node to process. See documentation of babBase::enums::NS for possible values. More... | |
babBase::enums::BV | BAB_branchVariable = babBase::enums::BV_RELDIAM |
Which dimension to branch in for the current node. See documentation of babBase::enums::BV for possible values. More... | |
B&B settings - Range reduction | |
bool | BAB_alwaysSolveObbt = true |
Whether to solve OBBT (feasibility- and, once a feasible point has been found, also optimality-based) at every BaB node. More... | |
bool | BAB_dbbt = true |
Whether to do a single round of duality based bound tightening (DBBT, cf. Ryoo&Sahinidis, Comput. Chem. Eng. 19 (1995) 551). If false, no DBBT is used. If true, multipliers from CPLEX are used to tighten bounds (essentially for free). we tried additional rounds but without reasonable improvement. More... | |
bool | BAB_probing = false |
Whether to do probing (cf. Ryoo&Sahinidis, Comput. Chem. Eng. 19 (1995) 551) at every node (can only be done if BAB_DBBT_maxrounds>=1) More... | |
bool | BAB_constraintPropagation = true |
Whether to do constraint propagation. If false, no constraint propagation is executed. More... | |
LBP Settings | |
lbp::LBP_SOLVER | LBP_solver = lbp::LBP_SOLVER_CLP |
Solver for solution of (mixed-integer) linear lower bounding problems. It also sets the solver when solving purely (mixed-integer) quadratic/linear problems. See documentation of lbp::LBP_SOLVER for possible values. More... | |
lbp::LINP | LBP_linPoints = lbp::LINP_MID |
At which points to linearize for affine relaxation. See documentation of lbp::LINP for possible values. More... | |
bool | LBP_subgradientIntervals = true |
Whether to use the heuristic to improve McCormick relaxations by tightening the range of each factor with the use of subgradients (cf. Najman & Mitsos, JOGO 2019) More... | |
double | LBP_obbtMinImprovement = 0.01 |
How much improvement needs to be achievable (relative to initial diameter) to conduct OBBT for a variable. More... | |
unsigned | LBP_activateMoreScaling = 10000 |
Number of consecutive iterations without LBD improvement needed to activate more aggressive scaling in LP solver (e.g., CPLEX) More... | |
bool | LBP_addAuxiliaryVars = false |
Whether to add auxiliary variables for common factors in the lower bounding DAG/problem. More... | |
unsigned | LBP_minFactorsForAux = 2 |
Minimum number of common factors to add an auxiliary variable. More... | |
unsigned | LBP_maxNumberOfAddedFactors = 1 |
Maximum number of added factor as auxiliaries. More... | |
MC++ settings | |
bool | MC_mvcompUse = true |
Whether to use multivariate composition theorem for computing McCormick relaxations (see MC++ documentation for details) More... | |
double | MC_mvcompTol = 1.0e-9 |
Tolerance used in the multivariate composition theorem for computing McCormick relaxations (see MC++ documentation for details) More... | |
double | MC_envelTol = 1.0e-9 |
Tolerance for computing the envelopes of intrinsic functions (see MC++ documentation for details) More... | |
UBP Settings | |
ubp::UBP_SOLVER | UBP_solverPreprocessing = ubp::UBP_SOLVER_IPOPT |
Solver to be used during pre-processing (i.e., multistart). See documentation of ubp::UBP_SOLVER for possible values. More... | |
unsigned | UBP_maxStepsPreprocessing = 3000 |
Maximum number of steps the local solver is allowed to take in each local run during multistart in pre-processing. More... | |
double | UBP_maxTimePreprocessing = 100.0 |
Maximum CPU time the local solver is allowed to take in each local run during multistart in pre-processing. Usually, this should only be a fall-back option to prevent truly getting stuck in local solution. More... | |
ubp::UBP_SOLVER | UBP_solverBab = ubp::UBP_SOLVER_SLSQP |
Solver to be used during Branch-and-Bound. See documentation of ubp::UBP_SOLVER for possible values. More... | |
unsigned | UBP_maxStepsBab = 3 |
Maximum number of steps the local solver is allowed to take at each BaB node. More... | |
double | UBP_maxTimeBab = 10.0 |
Maximum CPU time the local solver is allowed to take at each BaB node. Usually, this should only be a fall-back option to prevent truly getting stuck in local solution. More... | |
bool | UBP_ignoreNodeBounds = false |
Flag indicating whether the UBP solvers should ignore the box constraints of the current node during the B&B (and consider only the ones of the root node instead). More... | |
Epsilon-constraint settings | |
unsigned | EC_nPoints = 10 |
Number of points on the Pareto front to be computed in epsilon-constraint method (only available via the C++ API) More... | |
Struct for storing settings for MAiNGO.
Contains settings for MAiNGO. The default values an be found in settings.cpp.
bool maingo::Settings::BAB_alwaysSolveObbt = true |
Whether to solve OBBT (feasibility- and, once a feasible point has been found, also optimality-based) at every BaB node.
babBase::enums::BV maingo::Settings::BAB_branchVariable = babBase::enums::BV_RELDIAM |
Which dimension to branch in for the current node. See documentation of babBase::enums::BV for possible values.
bool maingo::Settings::BAB_constraintPropagation = true |
Whether to do constraint propagation. If false, no constraint propagation is executed.
bool maingo::Settings::BAB_dbbt = true |
Whether to do a single round of duality based bound tightening (DBBT, cf. Ryoo&Sahinidis, Comput. Chem. Eng. 19 (1995) 551). If false, no DBBT is used. If true, multipliers from CPLEX are used to tighten bounds (essentially for free). we tried additional rounds but without reasonable improvement.
unsigned maingo::Settings::BAB_logFreq = 100 |
Like BAB_printFreq, but for log.
unsigned maingo::Settings::BAB_maxIterations = std::numeric_limits<unsigned>::max() |
Maximum number of iterations (i.e., maximum number of nodes visited in the Branch-and-Bound tree)
unsigned maingo::Settings::BAB_maxNodes = std::numeric_limits<unsigned>::max() |
Maximum number of nodes (i.e., solver terminates when more than BAB_maxnodes are held in memory; used to avoid excessive branching)
babBase::enums::NS maingo::Settings::BAB_nodeSelection = babBase::enums::NS_BESTBOUND |
How to select the next node to process. See documentation of babBase::enums::NS for possible values.
unsigned maingo::Settings::BAB_printFreq = 100 |
After how many iterations to print progress on screen (additionally, a line is printed when a new incumbent is found)
bool maingo::Settings::BAB_probing = false |
Whether to do probing (cf. Ryoo&Sahinidis, Comput. Chem. Eng. 19 (1995) 551) at every node (can only be done if BAB_DBBT_maxrounds>=1)
VERB maingo::Settings::BAB_verbosity = VERB_NORMAL |
How much output to print from Branch & Bound solver. See documentation of maingo::VERB for possible values.
bool maingo::Settings::confirmTermination = false |
Whether to ask the user before terminating when reaching time, node, or iteration limits.
double maingo::Settings::deltaEq = 1.0e-6 |
Absolute feasibility tolerance for equality constraints, i.e., constraint is considered satisfied if |hi_(x)|<=UBP_delta_eq.
double maingo::Settings::deltaIneq = 1.0e-6 |
Absolute feasibility tolerance for inequality constraints, i.e., constraint is considered satisfied if gi_(x)<=UBP_delta_ineq.
unsigned maingo::Settings::EC_nPoints = 10 |
Number of points on the Pareto front to be computed in epsilon-constraint method (only available via the C++ API)
double maingo::Settings::epsilonA = 1.0e-2 |
Absolute optimality tolerance, i.e., termination when (UBD-LBD) < BAB_epsilon_a.
double maingo::Settings::epsilonR = 1.0e-2 |
Relative optimality tolerance, i.e., termination when (UBD-LBD) < BAB_epsilon_r * UBD.
double maingo::Settings::infinity = std::numeric_limits<double>::max() |
User definition of infinity (used to initialize UBD and LBD) [currently cannot be set by the user via set_option].
unsigned maingo::Settings::LBP_activateMoreScaling = 10000 |
Number of consecutive iterations without LBD improvement needed to activate more aggressive scaling in LP solver (e.g., CPLEX)
bool maingo::Settings::LBP_addAuxiliaryVars = false |
Whether to add auxiliary variables for common factors in the lower bounding DAG/problem.
lbp::LINP maingo::Settings::LBP_linPoints = lbp::LINP_MID |
At which points to linearize for affine relaxation. See documentation of lbp::LINP for possible values.
unsigned maingo::Settings::LBP_maxNumberOfAddedFactors = 1 |
Maximum number of added factor as auxiliaries.
unsigned maingo::Settings::LBP_minFactorsForAux = 2 |
Minimum number of common factors to add an auxiliary variable.
double maingo::Settings::LBP_obbtMinImprovement = 0.01 |
How much improvement needs to be achievable (relative to initial diameter) to conduct OBBT for a variable.
lbp::LBP_SOLVER maingo::Settings::LBP_solver = lbp::LBP_SOLVER_CLP |
Solver for solution of (mixed-integer) linear lower bounding problems. It also sets the solver when solving purely (mixed-integer) quadratic/linear problems. See documentation of lbp::LBP_SOLVER for possible values.
bool maingo::Settings::LBP_subgradientIntervals = true |
Whether to use the heuristic to improve McCormick relaxations by tightening the range of each factor with the use of subgradients (cf. Najman & Mitsos, JOGO 2019)
VERB maingo::Settings::LBP_verbosity = VERB_NORMAL |
How much output to print from Lower Bounding Solver. See documentation of maingo::VERB for possible values.
LOGGING_DESTINATION maingo::Settings::loggingDestination = LOGGING_FILE_AND_STREAM |
Where to print or write the output. See documentation of maingo::LOGGING_DESTINATION for possible values.
unsigned maingo::Settings::maxTime = 86400 |
CPU time limit in seconds.
double maingo::Settings::MC_envelTol = 1.0e-9 |
Tolerance for computing the envelopes of intrinsic functions (see MC++ documentation for details)
double maingo::Settings::MC_mvcompTol = 1.0e-9 |
Tolerance used in the multivariate composition theorem for computing McCormick relaxations (see MC++ documentation for details)
bool maingo::Settings::MC_mvcompUse = true |
Whether to use multivariate composition theorem for computing McCormick relaxations (see MC++ documentation for details)
WRITING_LANGUAGE maingo::Settings::modelWritingLanguage = LANG_NONE |
In what modeling language to write the current model to a file in. See documentation of maingo::WRITING_LANGUAGE for possible values.
unsigned maingo::Settings::PRE_maxLocalSearches = 3 |
Number of local searches in the multistart heuristic during preprocessing at the root node.
unsigned maingo::Settings::PRE_obbtMaxRounds = 10 |
Maximum number of rounds of optimization-based range reduction (OBBT; cf., e.g., Gleixner et al., J. Glob. Optim. 67 (2017) 731; maximizing and minimizing each variable subject to relaxed constraints) at the root node. If >=1 and a feasible point is found during multistart, one round of OBBT using an objective cut (f_cv<=UBD) is conducted as well.
bool maingo::Settings::PRE_printEveryLocalSearch = false |
Whether to print every run during multistart at the root node.
bool maingo::Settings::PRE_pureMultistart = false |
Whether to perform a multistart only. A B&B tree will not be constructed and no lower bounding problems will be solved.
double maingo::Settings::relNodeTol = 1.0e-9 |
Relative tolerance for minimum node size. Nodes are discarded if in every dimension their width gets below this tolerance times the original width. In this case, global optimality to the desired optimality tolerances may not be reached.
double maingo::Settings::targetLowerBound = std::numeric_limits<double>::max() |
Target value for the lower bound on the optimal objective. MAiNGO terminates once LBD>=targetLowerBound (no guarantee of global or local optimality!)
double maingo::Settings::targetUpperBound = -std::numeric_limits<double>::max() |
Target value for the upper bound on the optimal objective. MAiNGO terminates once UBD<=targetUpperBound (no guarantee of global or local optimality!)
bool maingo::Settings::terminateOnFeasiblePoint = false |
Whether to terminate as soon as the first feasible point was found (no guarantee of global or local optimality!)
bool maingo::Settings::UBP_ignoreNodeBounds = false |
Flag indicating whether the UBP solvers should ignore the box constraints of the current node during the B&B (and consider only the ones of the root node instead).
unsigned maingo::Settings::UBP_maxStepsBab = 3 |
Maximum number of steps the local solver is allowed to take at each BaB node.
unsigned maingo::Settings::UBP_maxStepsPreprocessing = 3000 |
Maximum number of steps the local solver is allowed to take in each local run during multistart in pre-processing.
double maingo::Settings::UBP_maxTimeBab = 10.0 |
Maximum CPU time the local solver is allowed to take at each BaB node. Usually, this should only be a fall-back option to prevent truly getting stuck in local solution.
double maingo::Settings::UBP_maxTimePreprocessing = 100.0 |
Maximum CPU time the local solver is allowed to take in each local run during multistart in pre-processing. Usually, this should only be a fall-back option to prevent truly getting stuck in local solution.
ubp::UBP_SOLVER maingo::Settings::UBP_solverBab = ubp::UBP_SOLVER_SLSQP |
Solver to be used during Branch-and-Bound. See documentation of ubp::UBP_SOLVER for possible values.
ubp::UBP_SOLVER maingo::Settings::UBP_solverPreprocessing = ubp::UBP_SOLVER_IPOPT |
Solver to be used during pre-processing (i.e., multistart). See documentation of ubp::UBP_SOLVER for possible values.
VERB maingo::Settings::UBP_verbosity = VERB_NORMAL |
How much output to print from Upper Bounding Solver. See documentation of maingo::VERB for possible values.
bool maingo::Settings::writeCsv = false |
Whether to write csv-log files (named bab_statistics.csv and bab_iterations.csv).
bool maingo::Settings::writeJson = false |
Whether to write a json-log file (named bab.json).
bool maingo::Settings::writeResultFile = true |
Whether to write an additional file containing non-standard information about the solved model.
unsigned maingo::Settings::writeToLogSec = 1800 |
Write to log file after a given ammount of CPU seconds.