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") path = 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)] scenario_creator_kwargs = {"path": path} # 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, scenario_creator_kwargs=scenario_creator_kwargs, 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, scenario_creator_kwargs=scenario_creator_kwargs) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=None) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # slam up bound spoke if with_slamup: slamup_spoke = vanilla.slamup_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # cross scenario cut spoke if with_cross_scenario_cuts: cross_scenario_cut_spoke = vanilla.cross_scenario_cut_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) 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() 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)) scenario_creator_kwargs = { "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, scenario_creator_kwargs=scenario_creator_kwargs, 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, scenario_creator_kwargs=scenario_creator_kwargs) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=rho_setter) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # cross scenario cut spoke if with_cross_scenario_cuts: cross_scenario_cut_spoke = vanilla.cross_scenario_cut_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) 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 not in (3, 10): raise RuntimeError(f"num_scen must the 3 or 10; was {num_scen}") scenario_creator_kwargs = {"scenario_count": 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 variable_probability = sizes._variable_probability 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, scenario_creator_kwargs=scenario_creator_kwargs, ph_extensions=ph_ext, rho_setter=rho_setter, variable_probability=variable_probability) 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, scenario_creator_kwargs=scenario_creator_kwargs) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=rho_setter) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) 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 crops_mult = args.crops_mult with_fwph = args.with_fwph with_xhatlshaped = args.with_xhatlshaped scenario_creator = farmer.scenario_creator scenario_denouement = farmer.scenario_denouement all_scenario_names = [f"scen{sn}" for sn in range(num_scen)] scenario_creator_kwargs = { "use_integer": False, "crops_multiplier": crops_mult, } # Things needed for vanilla cylinders beans = (args, scenario_creator, scenario_denouement, all_scenario_names) # Options for the L-shaped method at the hub # Bounds only valid for 3 scenarios, I think? Need to ask Chris spo = None if args.max_solver_threads is None else {"threads": args.max_solver_threads} options = { "master_solver": args.solver_name, "sp_solver": args.solver_name, "sp_solver_options" : spo, #"valid_eta_lb": {i: -432000 for i in all_scenario_names}, "max_iter": args.max_iterations, "verbose": False, "master_scenarios":[all_scenario_names[len(all_scenario_names)//2]] } # L-shaped hub hub_dict = { "hub_class": LShapedHub, "hub_kwargs": { "options": { "rel_gap": args.rel_gap, "abs_gap": args.abs_gap, }, }, "opt_class": LShapedMethod, "opt_kwargs": { # Args passed to LShapedMethod __init__ "options": options, "all_scenario_names": all_scenario_names, "scenario_creator": scenario_creator, "scenario_creator_kwargs": scenario_creator_kwargs, }, } # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke(*beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat looper bound spoke -- any scenario will do for # lshaped (they're all the same) xhat_scenario_dict = {"ROOT": all_scenario_names[0]} if with_xhatlshaped: xhatlshaped_spoke = vanilla.xhatlshaped_spoke(*beans, scenario_creator_kwargs=scenario_creator_kwargs) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_xhatlshaped: list_of_spoke_dict.append(xhatlshaped_spoke) spin_the_wheel(hub_dict, list_of_spoke_dict)
def main(): args = _parse_args() num_scen = args.num_scens crops_multiplier = 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 a default must be specified via --default-rho") if args.use_norm_rho_converger: if not args.use_norm_rho_updater: raise RuntimeError( "--use-norm-rho-converger requires --use-norm-rho-updater") else: ph_converger = NormRhoConverger else: ph_converger = None scenario_creator = farmer.scenario_creator scenario_denouement = farmer.scenario_denouement all_scenario_names = ['scen{}'.format(sn) for sn in range(num_scen)] scenario_creator_kwargs = { 'use_integer': False, "crops_multiplier": crops_multiplier, } 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) if args.run_async: # Vanilla APH hub hub_dict = vanilla.aph_hub( *beans, scenario_creator_kwargs=scenario_creator_kwargs, ph_extensions=None, rho_setter=rho_setter) else: # Vanilla PH hub hub_dict = vanilla.ph_hub( *beans, scenario_creator_kwargs=scenario_creator_kwargs, ph_extensions=None, ph_converger=ph_converger, rho_setter=rho_setter) ## hack in adaptive rho if args.use_norm_rho_updater: hub_dict['opt_kwargs']['extensions'] = NormRhoUpdater hub_dict['opt_kwargs']['options']['norm_rho_options'] = { 'verbose': True } # FWPH spoke if args.with_fwph: fw_spoke = vanilla.fwph_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # Standard Lagrangian bound spoke if args.with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=rho_setter) # xhat looper bound spoke if args.with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if args.with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) list_of_spoke_dict = list() if args.with_fwph: list_of_spoke_dict.append(fw_spoke) if args.with_lagrangian: list_of_spoke_dict.append(lagrangian_spoke) if args.with_xhatlooper: list_of_spoke_dict.append(xhatlooper_spoke) if args.with_xhatshuffle: list_of_spoke_dict.append(xhatshuffle_spoke) wheel = WheelSpinner(hub_dict, list_of_spoke_dict) wheel.spin() if write_solution: wheel.write_first_stage_solution('farmer_plant.csv') wheel.write_first_stage_solution('farmer_cyl_nonants.npy', first_stage_solution_writer=sputils. first_stage_nonant_npy_serializer) wheel.write_tree_solution('farmer_full_solution')
def main(): args = _parse_args() num_scen = args.num_scens with_fwph = args.with_fwph with_xhatlshaped = args.with_xhatlshaped scenario_creator = uc.scenario_creator scenario_denouement = uc.scenario_denouement scenario_creator_kwargs = {"path": f"./{num_scen}scenarios_r1/"} all_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) # Options for the L-shaped method at the hub spo = None if args.max_solver_threads is None else { "threads": args.max_solver_threads } spo['mipgap'] = 0.005 options = { "master_solver": args.solver_name, "sp_solver": args.solver_name, "sp_solver_options": spo, "master_solver_options": spo, #"valid_eta_lb": {n:0. for n in all_scenario_names}, "max_iter": args.max_iterations, "verbose": False, "master_scenarios": [all_scenario_names[len(all_scenario_names) // 2]], } # L-shaped hub hub_dict = { "hub_class": LShapedHub, "hub_kwargs": { "options": { "rel_gap": args.rel_gap, "abs_gap": args.abs_gap, }, }, "opt_class": LShapedMethod, "opt_kwargs": { # Args passed to LShapedMethod __init__ "options": options, "all_scenario_names": all_scenario_names, "scenario_creator": scenario_creator, "scenario_creator_kwargs": scenario_creator_kwargs, }, } # FWPH spoke if with_fwph: fw_spoke = vanilla.fwph_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) fw_spoke["opt_kwargs"]["PH_options"]["abs_gap"] = 0. fw_spoke["opt_kwargs"]["PH_options"]["rel_gap"] = 1e-5 fw_spoke["opt_kwargs"]["rho_setter"] = uc.scenario_rhos if with_xhatlshaped: xhatlshaped_spoke = vanilla.xhatlshaped_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) list_of_spoke_dict = list() if with_fwph: list_of_spoke_dict.append(fw_spoke) if with_xhatlshaped: list_of_spoke_dict.append(xhatlshaped_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") scenario_creator_kwargs = { "data_dir": 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, scenario_creator_kwargs=scenario_creator_kwargs, 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, scenario_creator_kwargs=scenario_creator_kwargs) # Standard Lagrangian bound spoke if with_lagrangian: lagrangian_spoke = vanilla.lagrangian_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=None) # xhat looper bound spoke if with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) 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 crops_multiplier = 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)] scenario_creator_kwargs = { 'use_integer': False, "crops_multiplier": crops_multiplier, } 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, scenario_creator_kwargs=scenario_creator_kwargs, ph_extensions=None, rho_setter=rho_setter) # FWPH spoke if args.with_fwph: fw_spoke = vanilla.fwph_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # Special Lagranger bound spoke if args.with_lagranger: lagranger_spoke = vanilla.lagranger_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs, rho_setter=rho_setter) # xhat looper bound spoke if args.with_xhatlooper: xhatlooper_spoke = vanilla.xhatlooper_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) # xhat shuffle bound spoke if args.with_xhatshuffle: xhatshuffle_spoke = vanilla.xhatshuffle_spoke( *beans, scenario_creator_kwargs=scenario_creator_kwargs) 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 WheelSpinner(hub_dict, list_of_spoke_dict).spin()