def main(): args = _parse_args() num_scen = args.num_scens CropsMult = args.crops_mult rho_setter = farmer._rho_setter if hasattr(farmer, '_rho_setter') else None if args.default_rho is None and rho_setter is None: raise RuntimeError("No rho_setter so there must be --default-rho") scenario_creator = farmer.scenario_creator scenario_denouement = farmer.scenario_denouement all_scenario_names = ['scen{}'.format(sn) for sn in range(num_scen)] cb_data={'use_integer': False, "CropsMult": CropsMult} scenario_names = [f"Scenario{i+1}" for i in range(num_scen)] # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) # Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=None, rho_setter = rho_setter) # FWPH spoke if args.with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, cb_data=cb_data) # Special Lagranger bound spoke if args.with_lagranger: lagranger_spoke = vanilla.lagranger_spoke(*beans, cb_data=cb_data, rho_setter = rho_setter) # xhat looper bound spoke if args.with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke(*beans, cb_data=cb_data) # xhat shuffle bound spoke if args.with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke(*beans, cb_data=cb_data) list_of_spoke_dict = list() if args.with_fwph: list_of_spoke_dict.append(fw_spoke) if args.with_lagranger: list_of_spoke_dict.append(lagranger_spoke) if args.with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if args.with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) mpisppy.cylinders.SPOKE_SLEEP_TIME = 0.1 spin_the_wheel(hub_dict, list_of_spoke_dict)
def main(): args = _parse_args() inst = args.instance_name num_scen = int(inst.split("-")[-3]) if args.num_scens is not None and args.num_scens != num_scen: raise RuntimeError("Argument num-scens={} does not match the number " "implied by instance name={} " "\n(--num-scens is not needed for netdes)") with_fwph = args.with_fwph with_xhatlooper = args.with_xhatlooper with_xhatshuffle = args.with_xhatshuffle with_lagrangian = args.with_lagrangian with_slamup = args.with_slamup with_cross_scenario_cuts = args.with_cross_scenario_cuts if args.default_rho is None: raise RuntimeError("The --default-rho option must be specified") cb_data = f"{netdes.__file__[:-10]}/data/{inst}.dat" scenario_creator = netdes.scenario_creator scenario_denouement = netdes.scenario_denouement all_scenario_names = [f"Scen{i}" for i in range(num_scen)] # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) if with_cross_scenario_cuts: ph_ext = CrossScenarioExtension else: ph_ext = None # Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=ph_ext, rho_setter = None) if with_cross_scenario_cuts: hub_dict["opt_kwargs"]["PHoptions"]["cross_scen_options"]\ = {"check_bound_improve_iterations" : args.cross_scenario_iter_cnt} # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, cb_data=cb_data) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke(*beans, cb_data=cb_data, rho_setter = None) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke(*beans, cb_data=cb_data) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke(*beans, cb_data=cb_data) # slam up bound spoke if with_slamup: slamup_spoke = vanilla.slamup_spoke(*beans, cb_data=cb_data) # cross scenario cut spoke if with_cross_scenario_cuts: cross_scenario_cut_spoke = vanilla.cross_scenario_cut_spoke(*beans, cb_data=cb_data) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) if with_slamup: list_of_spoke_dict.append(slamup_spoke) if with_cross_scenario_cuts: list_of_spoke_dict.append(cross_scenario_cut_spoke) spin_the_wheel(hub_dict, list_of_spoke_dict)
def main(): args = _parse_args() inst = args.instance_name num_scen = int(inst.split("_")[-1]) if args.num_scens is not None and args.num_scens != num_scen: raise RuntimeError("Argument num-scens={} does not match the number " "implied by instance name={} " "\n(--num-scens is not needed for sslp)") with_fwph = args.with_fwph with_fixer = args.with_fixer fixer_tol = args.fixer_tol with_xhatlooper = args.with_xhatlooper with_xhatshuffle = args.with_xhatshuffle with_lagrangian = args.with_lagrangian if args.default_rho is None: raise RuntimeError("The --default-rho option must be specified") cb_data = f"{sslp.__file__[:-8]}/data/{inst}/scenariodata" scenario_creator = sslp.scenario_creator scenario_denouement = sslp.scenario_denouement all_scenario_names = [f"Scenario{i+1}" for i in range(num_scen)] if with_fixer: ph_ext = Fixer else: ph_ext = None # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) # Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=ph_ext, rho_setter = None) if with_fixer: hub_dict["opt_kwargs"]["PHoptions"]["fixeroptions"] = { "verbose": False, "boundtol": fixer_tol, "id_fix_list_fct": sslp.id_fix_list_fct, } # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, cb_data=cb_data) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke(*beans, cb_data=cb_data, rho_setter = None) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke(*beans, cb_data=cb_data) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke(*beans, cb_data=cb_data) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) spin_the_wheel(hub_dict, list_of_spoke_dict)
def main(): args = _parse_args() num_scen = args.num_scens with_fwph = args.with_fwph with_xhatlooper = args.with_xhatlooper with_xhatshuffle = args.with_xhatshuffle with_lagrangian = args.with_lagrangian with_fixer = args.with_fixer fixer_tol = args.fixer_tol with_cross_scenario_cuts = args.with_cross_scenario_cuts scensavail = [3,5,10,25,50,100] if num_scen not in scensavail: raise RuntimeError("num-scen was {}, but must be in {}".\ format(num_scen, scensavail)) cb_data = {"scenario-count": num_scen, "path": str(num_scen)+"scenarios_r1"} scenario_creator = uc.scenario_creator scenario_denouement = uc.scenario_denouement all_scenario_names = [f"Scenario{i+1}" for i in range(num_scen)] rho_setter = uc._rho_setter # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) ### start ph spoke ### # Start with Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=MultiPHExtension, rho_setter = rho_setter) # Extend and/or correct the vanilla dictionary ext_classes = [Gapper] if with_fixer: ext_classes.append(Fixer) if with_cross_scenario_cuts: ext_classes.append(CrossScenarioExtension) if args.xhat_closest_tree: ext_classes.append(XhatClosest) hub_dict["opt_kwargs"]["PH_extension_kwargs"] = {"ext_classes" : ext_classes} if with_cross_scenario_cuts: hub_dict["opt_kwargs"]["PHoptions"]["cross_scen_options"]\ = {"check_bound_improve_iterations" : args.cross_scenario_iter_cnt} if with_fixer: hub_dict["opt_kwargs"]["PHoptions"]["fixeroptions"] = { "verbose": args.with_verbose, "boundtol": fixer_tol, "id_fix_list_fct": uc.id_fix_list_fct, } if args.xhat_closest_tree: hub_dict["opt_kwargs"]["PHoptions"]["xhat_closest_options"] = { "xhat_solver_options" : dict(), "keep_solution" : True } if args.ph_mipgaps_json is not None: with open(args.ph_mipgaps_json) as fin: din = json.load(fin) mipgapdict = {int(i): din[i] for i in din} else: mipgapdict = None hub_dict["opt_kwargs"]["PHoptions"]["gapperoptions"] = { "verbose": args.with_verbose, "mipgapdict": mipgapdict } if args.default_rho is None: # since we are using a rho_setter anyway hub_dict.opt_kwargs.PHoptions["defaultPHrho"] = 1 ### end ph spoke ### # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, cb_data=cb_data) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke(*beans, cb_data=cb_data, rho_setter = rho_setter) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke(*beans, cb_data=cb_data) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke(*beans, cb_data=cb_data) # cross scenario cut spoke if with_cross_scenario_cuts: cross_scenario_cut_spoke = vanilla.cross_scenario_cut_spoke(*beans, cb_data=cb_data) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) if with_cross_scenario_cuts: list_of_spoke_dict.append(cross_scenario_cut_spoke) spcomm, opt_dict = spin_the_wheel(hub_dict, list_of_spoke_dict) if args.solution_dir is not None: uc.write_solution(spcomm, opt_dict, args.solution_dir)
def main(): args = _parse_args() num_scen = args.num_scens with_fwph = args.with_fwph with_xhatlooper = args.with_xhatlooper with_xhatshuffle = args.with_xhatshuffle with_lagrangian = args.with_lagrangian with_fixer = args.with_fixer fixer_tol = args.fixer_tol if num_scen != 3 and num_scen != 10: raise RuntimeError("num-scen must the 3 or 10; was{}".\ format(num_scen)) cb_data = num_scen scenario_creator = sizes.scenario_creator scenario_denouement = sizes.scenario_denouement all_scenario_names = [f"Scenario{i+1}" for i in range(num_scen)] rho_setter = sizes._rho_setter if with_fixer: ph_ext = Fixer else: ph_ext = None # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) # Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=ph_ext, rho_setter = rho_setter) if with_fixer: hub_dict["opt_kwargs"]["PHoptions"]["fixeroptions"] = { "verbose": False, "boundtol": fixer_tol, "id_fix_list_fct": sizes.id_fix_list_fct, } if args.default_rho is None: # since we are using a rho_setter anyway hub_dict.opt_kwargs.PHoptions["defaultPHrho"] = 1 # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, cb_data=cb_data) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke(*beans, cb_data=cb_data, rho_setter = rho_setter) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke(*beans, cb_data=cb_data) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke(*beans, cb_data=cb_data) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) spin_the_wheel(hub_dict, list_of_spoke_dict)
def main(): args = _parse_args() BFs = [int(bf) for bf in args.BFs.split(',')] if len(BFs) != 2: raise RuntimeError("Hydro is a three stage problem, so it needs 2 BFs") with_xhatspecific = args.with_xhatspecific with_lagrangian = args.with_lagrangian # This is multi-stage, so we need to supply node names all_nodenames = ["ROOT"] # all trees must have this node # The rest is a naming convention invented for this problem. # Note that mpisppy does not have nodes at the leaves, # and node names must end in a serial number. for b in range(BFs[0]): all_nodenames.append("ROOT_" + str(b)) ScenCount = BFs[0] * BFs[1] cb_data = BFs all_scenario_names = [f"Scen{i+1}" for i in range(ScenCount)] scenario_creator = hydro.scenario_creator scenario_denouement = hydro.scenario_denouement rho_setter = None # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) # Vanilla PH hub hub_dict = vanilla.ph_hub(*beans, cb_data=cb_data, ph_extensions=None, rho_setter=rho_setter) hub_dict["opt_kwargs"]["all_nodenames"] = all_nodenames hub_dict["opt_kwargs"]["PHoptions"]["branching_factors"] = BFs # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke(*beans, cb_data=cb_data, rho_setter=rho_setter) lagrangian_spoke["opt_kwargs"]["all_nodenames"] = all_nodenames lagrangian_spoke["opt_kwargs"]["PHoptions"]["branching_factors"] = BFs # xhat looper bound spoke xhat_scenario_dict = { "ROOT": "Scen1", "ROOT_0": "Scen1", "ROOT_1": "Scen4", "ROOT_2": "Scen7" } if with_xhatspecific: xhatspecific_spoke = vanilla.xhatspecific_spoke(*beans, xhat_scenario_dict, all_nodenames, BFs, cb_data=cb_data) list_of_spoke_dict = list() if with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if with_xhatspecific: list_of_spoke_dict.append(xhatspecific_spoke) spcomm, opt_dict = spin_the_wheel(hub_dict, list_of_spoke_dict) if "hub_class" in opt_dict: # we are a hub rank if spcomm.opt.rank == spcomm.opt.rank0: # we are the reporting hub rank print("BestInnerBound={} and BestOuterBound={}".\ format(spcomm.BestInnerBound, spcomm.BestOuterBound))