def cuts_generator_options():
     """Outer Approximation cuts generator options"""
     return CutsGeneratorOptions(
         MixedIntegerOuterApproximationCutsGenerator.name, [
         NumericOption('threshold', default=1e-3),
         NumericOption('convergence_relative_tol', default=1e-3),
     ])
Ejemplo n.º 2
0
 def bab_options():
     return [
         NumericOption('absolute_gap', default=1e-8),
         NumericOption('relative_gap', default=1e-6),
         IntegerOption('node_limit', default=100000000),
         IntegerOption('root_node_feasible_solution_seed', default=None),
         NumericOption('root_node_feasible_solution_search_timelimit',
                       default=30),
         IntegerOption('fbbt_maxiter', default=10),
         IntegerOption('obbt_simplex_maxiter', default=100),
         NumericOption('obbt_timelimit', default=60),
         NumericOption('fbbt_timelimit', default=10),
         IntegerOption('fbbt_max_quadratic_size', default=100),
         IntegerOption('fbbt_max_expr_children', default=100),
         BoolOption('catch_keyboard_interrupt', default=True),
         NumericOption(
             'branching_weight_sum',
             default=1.0,
             description='Weight of the sum of nonlinear infeasibility'),
         NumericOption(
             'branching_weight_max',
             default=0.0,
             description='Weight of the max of nonlinear infeasibility'),
         NumericOption(
             'branching_weight_min',
             default=0.0,
             description='Weight of the min of nonlinear infeasibility'),
         NumericOption(
             'branching_weight_lambda',
             default=0.25,
             description=
             'Weight of the midpoint when computing convex combination with solution for branching'
         ),
     ]
Ejemplo n.º 3
0
 def algorithm_options():
     """Return options for BranchAndCutAlgorithm"""
     return OptionsGroup('cuts', [
         IntegerOption(
             'maxiter',
             default=20,
             description='Number of cut rounds'
         ),
         NumericOption(
             'cut_tolerance',
             default=1e-5,
             description='Terminate if two consecutive cut rounds are within this tolerance'
         ),
         IntegerOption(
             'timelimit',
             default=120,
             description='Total timelimit for cut rounds'
         ),
         BoolOption(
             'use_lp_cut_phase',
             default=True,
             description='Solve LP in cut loop'
         ),
         BoolOption(
             'use_milp_cut_phase',
             default=False,
             description='Add additional cut loop solving MILP'
         ),
         NumericOption(
             'branching_weight_sum',
             default=1.0,
             description='Weight of the sum of nonlinear infeasibility'
         ),
         NumericOption(
             'branching_weight_max',
             default=0.0,
             description='Weight of the max of nonlinear infeasibility'
         ),
         NumericOption(
             'branching_weight_min',
             default=0.0,
             description='Weight of the min of nonlinear infeasibility'
         ),
         NumericOption(
             'branching_weight_lambda',
             default=0.25,
             description='Weight of the midpoint when computing convex combination with solution for branching'
         ),
     ])
Ejemplo n.º 4
0
 def solver_options():
     return SolverOptions(BranchAndBoundSolver.name, [
         NumericOption('tolerance', default=1e-6),
         NumericOption('relative_tolerance', default=1e-6),
         IntegerOption('node_limit', default=100000000),
         IntegerOption('root_node_feasible_solution_seed', default=None),
         NumericOption('root_node_feasible_solution_search_timelimit',
                       default=6000000),
         IntegerOption('fbbt_maxiter', default=10),
         IntegerOption('obbt_simplex_maxiter', default=1000),
         NumericOption('obbt_timelimit', default=6000000),
         NumericOption('fbbt_timelimit', default=6000000),
         IntegerOption('fbbt_max_quadratic_size', default=1000),
         IntegerOption('fbbt_max_expr_children', default=1000),
         BoolOption('catch_keyboard_interrupt', default=True),
         BranchAndCutAlgorithm.algorithm_options(),
     ])
Ejemplo n.º 5
0
 def cuts_generator_options():
     return CutsGeneratorOptions(SdpCutsGenerator.name, [
         NumericOption('domain_eps',
                       default=1e-3,
                       description="Minimum domain length for each variable to consider cut on"),
         NumericOption('selection_size',
                       default=0.1,
                       description="Cut selection size as a % of all cuts or as absolute number of cuts"),
         NumericOption('thres_sdp_viol',
                       default=-1e-15,
                       description="Violation (negative eigenvalue) threshold for separation of SDP cuts"),
         NumericOption('min_sdp_cuts_per_round',
                       default=1e1,
                       description="Min number of SDP cuts to be added to relaxation at each cut round"),
         NumericOption('max_sdp_cuts_per_round',
                       default=5e3,
                       description="Max number of SDP cuts to be added to relaxation at each cut round"),
         NumericOption('dim',
                       default=3,
                       description="Dimension of SDP decomposition/cuts - min=2, max=5"),
         EnumOption('cut_sel_strategy',
                    default="COMB_ONE_CON",
                    values=["OPT", "FEAS", "RANDOM", "COMB_ONE_CON", "COMB_ALL_CON"]),
         NumericOption('big_m',
                       default=10e3,
                       description="Big M constant value for combined optimality/feasibility cut selection strategy"),
         NumericOption('thres_min_opt_sel',
                       default=0,
                       description="Threshold of minimum optimality measure to select cut in "
                                   "combined optimality/feasibility cut selection strategy"),
         NumericOption('thres_min_coeff_comb',
                       default=1e-5,
                       description="Threshold for the min absolute value of a valid coefficient when combining "
                                   "constraints based on Lagrange multipliers for optimality cut selection"),
         NumericOption('convergence_relative_tolerance',
                       default=1e-3,
                       description='Termination criteria on lower bound improvement between '
                                   'two consecutive cut rounds <= relative_tolerance % of '
                                   'lower bound improvement from cut round'),
     ])
Ejemplo n.º 6
0
 def cuts_generator_options():
     return CutsGeneratorOptions(TriangleCutsGenerator.name, [
         NumericOption(
             'domain_eps',
             default=1e-3,
             description=
             'Minimum domain length for each variable to consider cut on'),
         NumericOption(
             'selection_size',
             default=0.1,
             description=
             'Cut selection size as a % of all cuts or as absolute number of cuts'
         ),
         NumericOption(
             'thres_triangle_viol',
             default=1e-7,
             description=
             'Violation threshold for separation of triangle inequalities'),
         NumericOption(
             'min_tri_cuts_per_round',
             default=5e3,
             description=
             'Min number of triangle cuts to be added to relaxation at each cut round'
         ),
         NumericOption(
             'max_tri_cuts_per_round',
             default=10e3,
             description=
             'Max number of triangle cuts to be added to relaxation at each cut round'
         ),
         NumericOption(
             'convergence_relative_tolerance',
             default=1e-3,
             description=
             'Termination criteria on lower bound improvement between '
             'two consecutive cut rounds <= relative_tolerance % of '
             'lower bound improvement from cut round'),
     ])
Ejemplo n.º 7
0
 def solver_options():
     return SolverOptions(AlphaBBSolver.name, [
         NumericOption('tolerance', default=1e-8),
         NumericOption('relative_tolerance', default=1e-8),
         IntegerOption('node_limit', default=100000000),
     ])
Ejemplo n.º 8
0
 def cuts_generator_options():
     """Quadratic Outer Approximation cuts generator options"""
     return CutsGeneratorOptions(OuterApproximationCutsGenerator.name, [
         NumericOption('deviation_threshold', default=1e-5),
         NumericOption('convergence_relative_tol', default=1e-3),
     ])