create_cuts_fme

(function from pyomo.gdp.plugins.cuttingplane)

pyomo.gdp.plugins.cuttingplane.create_cuts_fme(transBlock_rHull, var_info, hull_to_bigm_map, rBigM_linear_constraints, rHull_vars, disaggregated_vars, norm, cut_threshold, zero_tolerance, integer_arithmetic, constraint_tolerance)[source]

Returns a cut which removes x* from the relaxed bigm feasible region.

Finds all the constraints which are tight at xhat (assumed to be the solution currently in instance_rHull), and calculates a composite normal vector by summing the vectors normal to each of these constraints. Then Fourier-Motzkin elimination is used to project the disaggregated variables out of the polyhedron formed by the composite normal and the collection of tight constraints. This results in multiple cuts, of which we select one that cuts of x* by the greatest margin, as long as that margin is more than cut_threshold. If no cut satisfies the margin specified by cut_threshold, we return None.

Parameters:
  • transBlock_rHull (transformation block on relaxed hull instance)

  • var_info (List of tuples (rBigM_var, rHull_var, xstar_param))

  • hull_to_bigm_map (For expression substitution, maps id(hull_var) to) – corresponding bigm var

  • rBigM_linear_constraints (list of linear constraints in relaxed bigM)

  • rHull_vars (list of all variables in relaxed hull)

  • disaggregated_vars (ComponentSet of disaggregated variables in hull) – reformulation

  • norm (norm used in the separation problem)

  • cut_threshold (Amount x* needs to be infeasible in generated cut in order) – to consider the cut for addition to the bigM model.

  • zero_tolerance (Tolerance at which a float will be treated as 0 during) – Fourier-Motzkin elimination

  • integer_arithmetic (boolean, whether or not to require Fourier-Motzkin) – Elimination does integer arithmetic. Only possible when all data is integer.

  • constraint_tolerance (Tolerance at which we will consider a constraint) – tight.