Пример #1
0
    def test_persistent_basic(self):
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 10
        ph = mpisppy.opt.ph.PH(
            PHoptions,
            self.all3_scenario_names,
            scenario_creator,
            scenario_denouement,
            scenario_creator_kwargs={"scenario_count": 3},
        )
        conv, basic_obj, tbound = ph.ph_main()

        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 10
        PHoptions["solvername"] = persistentsolvername
        ph = mpisppy.opt.ph.PH(
            PHoptions,
            self.all3_scenario_names,
            scenario_creator,
            scenario_denouement,
            scenario_creator_kwargs={"scenario_count": 3},
        )
        conv, pobj, tbound = ph.ph_main()

        sig2basic = round_pos_sig(basic_obj, 2)
        sig2pobj = round_pos_sig(pobj, 2)
        self.assertEqual(sig2basic, sig2pobj)
Пример #2
0
    def test_persistent_bundles(self):
        """ This excercises complicated code.
        """
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 2
        PHoptions["bundles_per_rank"] = 2
        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all10_scenario_names,
                               scenario_creator,
                               scenario_denouement,
                               cb_data=10)
        conv, basic_obj, tbound = ph.ph_main()

        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 2
        PHoptions["bundles_per_rank"] = 2
        PHoptions["solvername"] = persistentsolvername
        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all10_scenario_names,
                               scenario_creator,
                               scenario_denouement,
                               cb_data=10)
        conv, pbobj, tbound = ph.ph_main()

        sig2basic = round_pos_sig(basic_obj, 2)
        sig2pbobj = round_pos_sig(pbobj, 2)
        self.assertEqual(sig2basic, sig2pbobj)
Пример #3
0
 def test_ph_basic(self):
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(PHoptions,
                            self.all3_scenario_names,
                            scenario_creator,
                            scenario_denouement,
                            cb_data=3)
     conv, obj, tbound = ph.ph_main()
Пример #4
0
 def test_bundles(self):
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 2
     PHoptions["bundles_per_rank"] = 2
     ph = mpisppy.opt.ph.PH(PHoptions,
                            self.all10_scenario_names,
                            scenario_creator,
                            scenario_denouement,
                            cb_data=10)
     conv, obj, tbound = ph.ph_main()
Пример #5
0
 def test_ph_rhosetter(self):
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(PHoptions,
                            self.all3_scenario_names,
                            scenario_creator,
                            scenario_denouement,
                            cb_data=3,
                            rho_setter=_rho_setter)
     conv, obj, tbound = ph.ph_main()
     sig2obj = round_pos_sig(obj, 2)
Пример #6
0
 def test_ph_basic(self):
     options = self._copy_of_base_options()
     options["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(
         options,
         self.all3_scenario_names,
         scenario_creator,
         scenario_denouement,
         scenario_creator_kwargs={"scenario_count": 3},
     )
     conv, obj, tbound = ph.ph_main()
Пример #7
0
 def test_bundles(self):
     options = self._copy_of_base_options()
     options["PHIterLimit"] = 2
     options["bundles_per_rank"] = 2
     ph = mpisppy.opt.ph.PH(
         options,
         self.all10_scenario_names,
         scenario_creator,
         scenario_denouement,
         scenario_creator_kwargs={"scenario_count": 10},
     )
     conv, obj, tbound = ph.ph_main()
Пример #8
0
 def test_fix_ph_basic(self):
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(PHoptions,
                            self.all3_scenario_names,
                            self._fix_creator,
                            scenario_denouement,
                            cb_data=3)
     conv, obj, tbound = ph.ph_main()
     for k, s in ph.local_scenarios.items():
         self.assertTrue(s.NumProducedFirstStage[5].is_fixed())
         self.assertEqual(pyo.value(s.NumProducedFirstStage[5]), 1134)
Пример #9
0
 def test_ph_rhosetter(self):
     options = self._copy_of_base_options()
     options["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(
         options,
         self.all3_scenario_names,
         scenario_creator,
         scenario_denouement,
         scenario_creator_kwargs={"scenario_count": 3},
         rho_setter=_rho_setter,
     )
     conv, obj, tbound = ph.ph_main()
     sig2obj = round_pos_sig(obj, 2)
Пример #10
0
    def test_ph_iter0(self):
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 0

        ph = mpisppy.opt.ph.PH(
            PHoptions,
            self.all3_scenario_names,
            scenario_creator,
            scenario_denouement,
            scenario_creator_kwargs={"scenario_count": 3},
        )

        conv, obj, tbound = ph.ph_main()

        sig2obj = round_pos_sig(obj, 2)
Пример #11
0
    def test_ph_solve(self):
        PHoptions = self._copy_of_base_options()

        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all_scenario_names,
                               hydro.scenario_creator,
                               hydro.scenario_denouement,
                               all_nodenames=self.all_nodenames,
                               cb_data=self.BFs)
        conv, obj, tbound = ph.ph_main()

        sig2tbnd = round_pos_sig(tbound, 2)
        self.assertEqual(180, sig2tbnd)

        ph._disable_W_and_prox()
        sig2eobj = round_pos_sig(ph.Eobjective(), 2)
        self.assertEqual(190, sig2eobj)
Пример #12
0
    def test_fix_ph_iter0(self):
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 0

        ph = mpisppy.opt.ph.PH(
            PHoptions,
            self.all3_scenario_names,
            self._fix_creator,
            scenario_denouement,
            scenario_creator_kwargs={"scenario_count": 3},
        )

        conv, obj, tbound = ph.ph_main()

        # Actually, if it is still fixed for one scenario, probably fixed forall.
        for k, s in ph.local_scenarios.items():
            self.assertEqual(pyo.value(s.NumProducedFirstStage[5]), 1134)
            self.assertTrue(s.NumProducedFirstStage[5].is_fixed())
Пример #13
0
 def test_lagrangian_bound(self):
     """ Make sure the lagrangian bound is at least a bound
     """
     from mpisppy.extensions.xhatlooper import XhatLooper
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 1
     PHoptions["xhat_looper_options"] =  {"xhat_solver_options":\
                                          PHoptions["iterk_solver_options"],
                                          "scen_limit": 3}
     ph = mpisppy.opt.ph.PH(PHoptions,
                            self.all3_scenario_names,
                            scenario_creator,
                            scenario_denouement,
                            cb_data=3,
                            PH_extensions=XhatLooper)
     conv, basic_obj, tbound = ph.ph_main()
     xhatobj = ph.extobject._xhat_looper_obj_final
     dopts = sputils.option_string_to_dict("mipgap=0.0001")
     objbound = ph.post_solve_bound(solver_options=dopts, verbose=False)
     self.assertGreaterEqual(xhatobj, objbound)
Пример #14
0
    def test_xhat_extension(self):
        """ Make sure least one of the xhat extensions runs.
        """
        from mpisppy.extensions.xhatlooper import XhatLooper
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 1
        PHoptions["xhat_looper_options"] =  {"xhat_solver_options":\
                                             PHoptions["iterk_solver_options"],
                                             "scen_limit": 3}

        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all3_scenario_names,
                               scenario_creator,
                               scenario_denouement,
                               cb_data=3,
                               PH_extensions=XhatLooper)
        conv, basic_obj, tbound = ph.ph_main()
        # in this particular case, the extobject is an xhatter
        xhatobj1 = round_pos_sig(ph.extobject._xhat_looper_obj_final, 1)
        self.assertEqual(xhatobj1, 200000)
Пример #15
0
    def smoke_for_extensions(self):
        """ Make sure the example extensions can at least run.
        """
        from mpisppy.extensions.extension import MultiPHExtension
        from mpisppy.extensions.fixer import Fixer
        from mpisppy.extensions.mipgapper import Gapper
        from mpisppy.extensions.xhatlooper import XhatLooper
        from mpisppy.extensions.xhatclosest import XhatClosest

        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 2
        ph = mpisppy.opt.ph.PH(
            PHoptions,
            self.all3_scenario_names,
            scenario_creator,
            scenario_denouement,
            PH_extensions=MultiPHExtension,
            PH_extension_kwargs=multi_ext,
        )
        multi_ext = {"ext_classes": [Fixer, Gapper, XhatLooper, XhatClosest]}
        conv, basic_obj, tbound = ph.ph_main()
Пример #16
0
    def test_fix_xhat_extension(self):
        """ Make sure that ph and xhat does not unfix a fixed Var
        """
        from mpisppy.extensions.xhatlooper import XhatLooper
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 1
        PHoptions["xhat_looper_options"] =  {"xhat_solver_options":\
                                             PHoptions["iterk_solver_options"],
                                             "scen_limit": 3}

        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all3_scenario_names,
                               self._fix_creator,
                               scenario_denouement,
                               cb_data=3,
                               PH_extensions=XhatLooper)
        conv, basic_obj, tbound = ph.ph_main()

        for k, s in ph.local_scenarios.items():
            self.assertTrue(s.NumProducedFirstStage[5].is_fixed())
            self.assertEqual(pyo.value(s.NumProducedFirstStage[5]), 1134)
Пример #17
0
    def test_ph_solve(self):
        options = self._copy_of_base_options()

        ph = mpisppy.opt.ph.PH(
            options,
            self.all_scenario_names,
            hydro.scenario_creator,
            hydro.scenario_denouement,
            all_nodenames=self.all_nodenames,
            scenario_creator_kwargs={
                "branching_factors": self.branching_factors
            },
        )
        conv, obj, tbound = ph.ph_main()

        sig2tbnd = round_pos_sig(tbound, 2)
        self.assertEqual(180, sig2tbnd)

        ph.disable_W_and_prox()
        sig2eobj = round_pos_sig(ph.Eobjective(), 2)
        self.assertEqual(190, sig2eobj)
Пример #18
0
    def test_ph_xhat(self):
        PHoptions = self._copy_of_base_options()
        PHoptions["PHIterLimit"] = 10  # xhat is feasible
        PHoptions["xhat_specific_options"] = {"xhat_solver_options":
                                              PHoptions["iterk_solver_options"],
                                              "xhat_scenario_dict": \
                                              {"ROOT": "Scen1",
                                               "ROOT_0": "Scen1",
                                               "ROOT_1": "Scen4",
                                               "ROOT_2": "Scen7"},
                                              "csvname": "specific.csv"}

        ph = mpisppy.opt.ph.PH(PHoptions,
                               self.all_scenario_names,
                               hydro.scenario_creator,
                               hydro.scenario_denouement,
                               all_nodenames=self.all_nodenames,
                               cb_data=self.BFs,
                               PH_extensions=XhatSpecific)
        conv, obj, tbound = ph.ph_main()
        sig2xhatobj = round_pos_sig(ph.extobject._xhat_specific_obj_final, 2)
        self.assertEqual(190, sig2xhatobj)
Пример #19
0
 def fix_for_extensions(self):
     """ Make sure the example extensions don't destroy fixedness
     """
     from mpisppy.extensions.extensions import MultiPHExtension
     from mpisppy.extensions.fixer import Fixer
     from mpisppy.extensions.mipgapper import Gapper
     from mpisppy.extensions.xhatlooper import XhatLooper
     from mpisppy.extensions.xhatclosest import XhatClosest
     PHoptions = self._copy_of_base_options()
     PHoptions["PHIterLimit"] = 2
     ph = mpisppy.opt.ph.PH(
         PHoptions,
         self.all3_scenario_names,
         self._fix_creator,
         scenario_denouement,
         PH_extensions=MultiPHExtension,
         PH_extension_kwargs=multi_ext,
     )
     multi_ext = {"ext_classes": [Fixer, Gapper, XhatLooper, XhatClosest]}
     conv, basic_obj, tbound = ph.ph_main()
     for k, s in ph.local_scenarios.items():
         self.assertTrue(s.NumProducedFirstStage[5].is_fixed())
         self.assertEqual(pyo.value(s.NumProducedFirstStage[5]), 1134)
Пример #20
0
                                           "ROOT_0": "Scen1",
                                           "ROOT_1": "Scen4",
                                           "ROOT_2": "Scen7"},
                                          "csvname": "specific.csv"}

    # as of april 2020, we are not supporting xhat as an extension
    ph = mpisppy.opt.ph.PH(
        options,
        all_scenario_names,
        scenario_creator,
        scenario_denouement,
        scenario_creator_kwargs={"branching_factors": BFs},
        all_nodenames=all_nodenames,
    )

    conv, obj, tbound = ph.ph_main()
    if ph.cylinder_rank == 0:
        print("Trival bound =", tbound)

    ph._disable_W_and_prox()
    e_obj = ph.Eobjective()
    if ph.cylinder_rank == 0:
        print("unweighted e_obj={}".format(e_obj))
    """
    #******* APH ******
    print ("APH")
    options["async_frac_needed"] = 1
    options["async_sleep_secs"] = 1
    aph = mpisppy.opt.aph.APH(options, all_scenario_names,
                        scenario_creator,
                              scenario_denouement,
Пример #21
0
    #### first PH ####

    #####multi_ext = {"ext_classes": [Fixer, Gapper, XhatLooper, XhatClosest]}
    multi_ext = {"ext_classes": [Fixer, Gapper]}
    ph = mpisppy.opt.ph.PH(
        options,
        all_scenario_names,
        scenario_creator,
        scenario_denouement,
        scenario_creator_kwargs={"scenario_count": ScenCount},
        rho_setter=_rho_setter,
        extensions=MultiExtension,
        extension_kwargs=multi_ext,
    )

    conv, obj, tbound = ph.ph_main()
    if ph.cylinder_rank == 0:
        print("Trival bound =", tbound)

    print("Quitting early.")

    ############ test W and xbar writers and special joint reader  ############
    from mpisppy.utils.wxbarwriter import WXBarWriter

    newph = mpisppy.opt.ph.PH(
        options,
        all_scenario_names,
        scenario_creator,
        scenario_denouement,
        scenario_creator_kwargs={"scenario_count": ScenCount},
    )
Пример #22
0
    #### first PH ####

    #####multi_ext = {"ext_classes": [Fixer, Gapper, XhatLooper, XhatClosest]}
    multi_ext = {"ext_classes": [Fixer, Gapper]}
    ph = mpisppy.opt.ph.PH(
        options,
        all_scenario_names,
        scenario_creator,
        scenario_denouement,
        scenario_creator_kwargs={"scenario_count": ScenCount},
        rho_setter=_rho_setter,
        extensions=MultiExtension,
        extension_kwargs=multi_ext,
    )

    conv, obj, tbound = ph.ph_main()
    if ph.cylinder_rank == 0:
        print("Trival bound =", tbound)

    print("Quitting early.")

    ############ test W and xbar writers and special joint reader  ############
    from mpisppy.utils.wxbarwriter import WXBarWriter

    newph = mpisppy.opt.ph.PH(
        options,
        all_scenario_names,
        scenario_creator,
        scenario_denouement,
        scenario_creator_kwargs={"scenario_count": ScenCount},
    )