def test_cut_is_correct_facet_rescaled_inf_norm(self): m = models.to_break_constraint_tolerances() # This would give two cuts, the second improving by about 0.05, without # the tighter threshold. TransformationFactory('gdp.cuttingplane').apply_to( m, norm=float('inf'), cut_filtering_threshold=0.1) self.check_cut_is_correct_facet_rescaled(m)
def test_cut_is_correct_facet_rescaled_fme(self): m = models.to_break_constraint_tolerances() TransformationFactory('gdp.cuttingplane').apply_to( m, create_cuts=create_cuts_fme, post_process_cut=None) cuts = m._pyomo_gdp_cuttingplane_transformation.cuts self.assertEqual(len(cuts), 1) # we don't get a whole facet. We get 0 <= 129y_1 + 123y_2 - x - y, which # is the sum of two facets: # 0 <= 2y_1 + 120y_2 - x and # 0 <= 127y_1 + 3y_2 - y # But this is valid and the only cut needed, so we won't complain. cut_extreme_points = [ (1,0,2,127), (0,1,120,3) ] for pt in cut_extreme_points: m.x.fix(pt[2]) m.y.fix(pt[3]) m.disjunct1.indicator_var.fix(pt[0]) m.disjunct2.indicator_var.fix(pt[1]) # tiny bit of numerical error self.assertAlmostEqual(value(cuts[0].lower), value(cuts[0].body)) self.assertLessEqual(value(cuts[0].lower), value(cuts[0].body))
def test_cuts_valid_at_extreme_pts_rescaled_inf_norm(self): m = models.to_break_constraint_tolerances() # this cuts off by a little more than 1e-8 without the adjusted back-off # problem tolerance TransformationFactory('gdp.cuttingplane').apply_to( m, norm=float('inf'), back_off_problem_tolerance=1e-7, verbose=True) self.check_cuts_valid_at_extreme_pts_rescaled(m)
def test_cut_is_correct_facet_rescaled_projection(self): m = models.to_break_constraint_tolerances() TransformationFactory('gdp.cuttingplane').apply_to(m) self.check_cut_is_correct_facet_rescaled(m)
def test_cuts_valid_at_extreme_pts_rescaled_projection(self): m = models.to_break_constraint_tolerances() TransformationFactory('gdp.cuttingplane').apply_to(m) self.check_cuts_valid_at_extreme_pts_rescaled(m)
def test_cuts_valid_at_extreme_pts_rescaled_fme(self): m = models.to_break_constraint_tolerances() TransformationFactory('gdp.cuttingplane').apply_to( m, create_cuts=create_cuts_fme, post_process_cut=None) self.check_cuts_valid_at_extreme_pts_rescaled(m)