Example #1
0
 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)
Example #2
0
    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))
Example #3
0
 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)
Example #4
0
 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)        
Example #5
0
 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)
Example #6
0
 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)