def save_root_node_file(m, file_dir): dat_file = os.path.join(file_dir, "RootNode.dat") print "saving {}...".format(dat_file) utilities.save_inputs_as_dat( model=m, instance=m, save_path=dat_file, exclude=["rfm_supply_tier_cost", "rfm_supply_tier_limit", "rfm_supply_tier_fixed_cost"] )
def test_save_inputs_as_dat(self): import switch_mod.solve from pyomo.environ import DataPortal from testfixtures import compare (model, instance) = switch_mod.solve.load("test_dat") # To do: create a temporary file name for dat_path and delete it # when the test is complete. dat_path = "test_dat/complete_inputs.dat" utilities.save_inputs_as_dat(model, instance, save_path=dat_path) reloaded_data = DataPortal(model=model) reloaded_data.load(filename=dat_path) compare(reloaded_data.data(), instance.DataPortal.data())
def test_save_inputs_as_dat(self): (model, instance) = switch_mod.solve.main( args=["--inputs-dir", os.path.join('examples', '3zone_toy', 'inputs')], return_model=True, return_instance=True ) temp_dir = tempfile.mkdtemp(prefix="switch_test_") try: dat_path = os.path.join(temp_dir, "complete_inputs.dat") utilities.save_inputs_as_dat(model, instance, save_path=dat_path) reloaded_data = DataPortal(model=model) reloaded_data.load(filename=dat_path) compare(reloaded_data.data(), instance.DataPortal.data()) finally: shutil.rmtree(temp_dir)
def test_save_inputs_as_dat(self): import switch_mod.solve from pyomo.environ import DataPortal from testfixtures import compare (model, instance) = switch_mod.solve.main(args=["--inputs-dir", "test_dat"], return_model=True, return_instance=True) temp_dir = tempfile.mkdtemp(prefix="switch_test_") try: dat_path = os.path.join(temp_dir, "complete_inputs.dat") utilities.save_inputs_as_dat(model, instance, save_path=dat_path) reloaded_data = DataPortal(model=model) reloaded_data.load(filename=dat_path) compare(reloaded_data.data(), instance.DataPortal.data()) finally: shutil.rmtree(temp_dir)
def save_dat_files(): if not os.path.exists(os.path.join(inputs_dir, pysp_subdir)): os.makedirs(os.path.join(inputs_dir, pysp_subdir)) ############## # RootNode.dat dat_file = os.path.join(inputs_dir, pysp_subdir, "RootNode.dat") print "creating and saving {}...".format(dat_file) utilities.save_inputs_as_dat(model, instance, save_path=dat_file, sorted_output=model.options.sorted_output) ####################### # ScenarioStructure.dat scen_file = os.path.join(inputs_dir, pysp_subdir, "ScenarioStructure.dat") print "creating and saving {}...".format(scen_file) with open(scen_file, "w") as f: # Data will be defined in a Node basis to avoid redundancies f.write("param ScenarioBasedData := False ;\n\n") f.write("set Stages :=") for st in stage_list: f.write(" {}".format(st)) f.write(";\n\n") f.write("set Nodes := RootNode ") for s in scenario_list: f.write("\n {}".format(s)) f.write(";\n\n") f.write("param NodeStage := RootNode {}\n".format(stage_list[0])) for s in scenario_list: f.write(" {scen} {st}\n".format(scen=s, st=stage_list[1])) f.write(";\n\n") f.write("set Children[RootNode] := ") for s in scenario_list: f.write("\n {}".format(s)) f.write(";\n\n") f.write("param ConditionalProbability := RootNode 1.0") # All scenarios have the same probability in this example probs = [1.0 / len(scenario_list)] * (len(scenario_list) - 1) # The remaining probability is lumped in the last scenario to avoid rounding issues probs.append(1.0 - sum(probs)) for (s, p) in zip(scenario_list, probs): f.write("\n {s} {p}".format(s=s, p=p)) f.write(";\n\n") f.write("set Scenarios := ") for s in scenario_list: f.write("\n Scenario_{}".format(s)) f.write(";\n\n") f.write("param ScenarioLeafNode := ") for s in scenario_list: f.write("\n Scenario_{s} {s}".format(s=s, p=p)) f.write(";\n\n") # Write out variable names for pysp.. if a variable has indexes like # BuildProj[proj, build_year], print it as BuildProj[*,*]. def write_var_name(f, cname): if hasattr(instance, cname): dimen = getattr(instance, cname).index_set().dimen if dimen == 0: f.write(" {cn}\n".format(cn=cname)) else: indexing = (",".join(["*"] * dimen)) f.write(" {cn}[{dim}]\n".format(cn=cname, dim=indexing)) else: raise ValueError( "Variable '{}' is not a component of the model. Did you make a typo?" .format(cname)) for st in stage_list: f.write("set StageVariables[{}] := \n".format(st)) for var in stage_vars[st]: write_var_name(f, var) f.write(";\n\n") # The InvestmentCost and OperationCost components are defined in ReferenceModel.py f.write("param StageCostVariable := \n") f.write(" Investment InvestmentCost\n") f.write(" Operation OperationCost\n") f.write(";")
def save_dat_files(): if not os.path.exists(os.path.join(inputs_dir, pysp_subdir)): os.makedirs(os.path.join(inputs_dir, pysp_subdir)) ############## # RootNode.dat dat_file = os.path.join(inputs_dir, pysp_subdir, "RootNode.dat") print "creating and saving {}...".format(dat_file) utilities.save_inputs_as_dat(model, instance, save_path=dat_file, sorted_output=model.options.sorted_output) ####################### # ScenarioStructure.dat scen_file = os.path.join(inputs_dir, pysp_subdir, "ScenarioStructure.dat") print "creating and saving {}...".format(scen_file) with open(scen_file, "w") as f: # Data will be defined in a Node basis to avoid redundancies f.write("param ScenarioBasedData := False ;\n\n") f.write("set Stages :=") for st in stage_list: f.write(" {}".format(st)) f.write(";\n\n") f.write("set Nodes := RootNode ") for s in scenario_list: f.write("\n {}".format(s)) f.write(";\n\n") f.write("param NodeStage := RootNode {}\n".format(stage_list[0])) for s in scenario_list: f.write(" {scen} {st}\n".format(scen=s,st=stage_list[1])) f.write(";\n\n") f.write("set Children[RootNode] := ") for s in scenario_list: f.write("\n {}".format(s)) f.write(";\n\n") f.write("param ConditionalProbability := RootNode 1.0") # All scenarios have the same probability in this example probs = [1.0/len(scenario_list)] * (len(scenario_list) - 1) # The remaining probability is lumped in the last scenario to avoid rounding issues probs.append(1.0 - sum(probs)) for (s, p) in zip(scenario_list, probs): f.write("\n {s} {p}".format(s=s, p=p)) f.write(";\n\n") f.write("set Scenarios := ") for s in scenario_list: f.write("\n Scenario_{}".format(s)) f.write(";\n\n") f.write("param ScenarioLeafNode := ") for s in scenario_list: f.write("\n Scenario_{s} {s}".format(s=s, p=p)) f.write(";\n\n") # Write out variable names for pysp.. if a variable has indexes like # BuildProj[proj, build_year], print it as BuildProj[*,*]. def write_var_name(f, cname): if hasattr(instance, cname): dimen = getattr(instance, cname).index_set().dimen if dimen == 0: f.write(" {cn}\n".format(cn=cname)) else: indexing = (",".join(["*"]*dimen)) f.write(" {cn}[{dim}]\n".format(cn=cname, dim=indexing)) else: raise ValueError( "Variable '{}' is not a component of the model. Did you make a typo?". format(cname)) for st in stage_list: f.write("set StageVariables[{}] := \n".format(st)) for var in stage_vars[st]: write_var_name(f, var) f.write(";\n\n") # The InvestmentCost and OperationCost components are defined in ReferenceModel.py f.write("param StageCostVariable := \n") f.write(" Investment InvestmentCost\n") f.write(" Operation OperationCost\n") f.write(";")
def save_dat_files(): dat_file = dat_file_name() print "saving {}...".format(dat_file) utilities.save_inputs_as_dat( model, instance, save_path=dat_file, exclude=["rfm_supply_tier_cost", "rfm_supply_tier_limit", "rfm_supply_tier_fixed_cost"]) scenarios = [str(i).zfill(n_digits) for i in range(n_scenarios)] dat_file = os.path.join(dat_file_dir(), "ScenarioStructure.dat") print "saving {}...".format(dat_file) with open(dat_file, "w") as f: # use show only the changed data in the dat files for each scenario f.write("param ScenarioBasedData := False ;\n\n") f.write("set Stages := Build Operate ;\n\n") f.write("set Nodes := RootNode \n") for s in scenarios: f.write(" fuel_supply_curves_{}\n".format(s)) f.write(";\n\n") f.write("param NodeStage := RootNode Build\n") for s in scenarios: f.write(" fuel_supply_curves_{} Operate\n".format(s)) f.write(";\n\n") f.write("set Children[RootNode] := \n") for s in scenarios: f.write(" fuel_supply_curves_{}\n".format(s)) f.write(";\n\n") f.write("param ConditionalProbability := RootNode 1.0\n") probs = [1.0/n_scenarios] * (n_scenarios - 1) # evenly spread among all scenarios probs.append(1.0 - sum(probs)) # lump the remainder into the last scenario for (s, p) in zip(scenarios, probs): f.write(" fuel_supply_curves_{s} {p}\n".format(s=s, p=p)) f.write(";\n\n") f.write("set Scenarios := \n") for s in scenarios: f.write(" Scenario_{}\n".format(s)) f.write(";\n\n") f.write("param ScenarioLeafNode := \n") for s in scenarios: f.write(" Scenario_{s} fuel_supply_curves_{s}\n".format(s=s, p=p)) f.write(";\n\n") def write_var_name(f, cname): if hasattr(instance, cname): dimen = getattr(instance, cname).index_set().dimen indexing = "" if dimen == 0 else (",".join(["*"]*dimen)) f.write(" {cn}[{dim}]\n".format(cn=cname, dim=indexing)) # all build variables (and fuel market expansion) go in the Build stage f.write("set StageVariables[Build] := \n") for cn in build_vars: write_var_name(f, cn) f.write(";\n\n") # all other variables go in the Operate stage operate_vars = [ c.cname() for c in instance.component_objects() if isinstance(c, pyomo.core.base.var.Var) and c.cname() not in build_vars ] f.write("set StageVariables[Operate] := \n") for cn in operate_vars: write_var_name(f, cn) f.write(";\n\n") f.write("param StageCostVariable := \n") f.write(" Build BuildCost\n") f.write(" Operate OperateCost\n") f.write(";\n\n")