예제 #1
0
파일: pha.py 프로젝트: switch-hawaii/pha2
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"]
    )
예제 #2
0
 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())
예제 #3
0
 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())
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
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(";")
예제 #7
0
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(";")
예제 #8
0
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")