# Scenario_time_series_filename="/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_2019.csv", # Finance_customer_tariff_filename="/Users/zhenhua/Desktop/ISO_price_data/tariff_data/caiso_pge_b20_2020.csv", # DCM_active='yes', # retailTimeShift_active='yes', # DA_active='no', # SR_active='yes', # NSR_active='yes', # FR_active="yes", # FR_CombinedMarket="1" # ) # caiso_baseline.run_storagevet() ercot_baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="ERCOT RS+DCM on + stacking", description="ERCOT", Scenario_n='48', Scenario_time_series_filename= "/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_ercot_2019.csv", Finance_customer_tariff_filename= "/Users/zhenhua/Desktop/ISO_price_data/tariff_data/ercot_oncor_2018.csv", DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='yes', NSR_active='yes', FR_active="yes", FR_CombinedMarket="1") ercot_baseline.run_storagevet()
pjm_baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="PJM NSR on", description="PJM", Scenario_n="48", Scenario_time_series_filename= "/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_pjm_2020.csv", DCM_active='no', retailTimeShift_active='no', DA_active='yes', SR_active='no', NSR_active='yes', FR_active="no", FR_CombinedMarket="1") pjm_baseline.run_storagevet() nyiso_baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="NYISO NSR on", description="NYISO", Scenario_n="48", Scenario_time_series_filename= "/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_nyiso_2019.csv", DCM_active='no', retailTimeShift_active='no', DA_active='yes', SR_active='no', NSR_active='yes', FR_active="no",
Finance_npv_discount_rate = "7" Scenario_time_series_filename = "/Users/zhenhua/Desktop/price_data/stanford_data/hourly_timeseries_2019_eCEF.csv" cef = SvetObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname=site + " RS+DCM on", description=site, Battery_ch_max_rated=2000, Battery_dis_max_rated=2000, Battery_ene_max_rated=8000, Scenario_n=Scenario_n, Finance_npv_discount_rate=Finance_npv_discount_rate, Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='no', NSR_active='no', FR_active="no", FR_CombinedMarket="1" ) cef.run_storagevet() site = "eCampus" Scenario_n = "36" Finance_npv_discount_rate = "7" Scenario_time_series_filename = "/Users/zhenhua/Desktop/price_data/stanford_data/hourly_timeseries_2019_eCampus.csv" campus = SvetObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname=site + " RS+DCM on", description=site, Battery_ch_max_rated=2000, Battery_dis_max_rated=2000, Battery_ene_max_rated=8000, Scenario_n=Scenario_n, Finance_npv_discount_rate=Finance_npv_discount_rate, Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename,
# Create a storagevet object # TODO: change the default params file (and update tariff name) # Note: DA should be turned off due to double counting of enegry arbitrage DCM_baseline = SvetObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_EA.csv", shortname="EA+DCM on", description="test run", Scenario_n="month", Scenario_time_series_filename="/Applications/storagevet2v101/StorageVET-master-git/Data/hourly_timeseries_2019.csv", DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='no' ) DCM_baseline.run_storagevet() # DCM constraints DCMconstraint = ConstraintObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname=DCM_baseline.shortname, baseline_runID=DCM_baseline.runID, app_hours=[0, 23], regulation_scenario=3, constraint_init=True) DCMconstraint.set_DCM_user_constraints() # DCM priority run based on baseline DCMpriority = SvetObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_EA.csv", shortname=DCMconstraint.new_shortname, description="DCM priority run using retail rates", Scenario_n="month",
ts = "/Applications/storagevet2v101/StorageVET-master-git/Data/hourly_timeseries_2019.csv" # baseline run baseline = SvetObject( SVet_absolute_path=path, shortname="first run", description="first run with SR + NSR + DA + RA + FR active", Scenario_time_series_filename=ts, SR_active='yes', NSR_active='yes', DA_active='yes', RA_active='yes', RA_dispmode='0', FR_active="yes", FR_CombinedMarket="0") baseline.run_storagevet() ############## Spinning Reserves ################## # SR_only run SRonly = SvetObject(SVet_absolute_path=path, shortname="SR only", description="first run with SR only", Scenario_time_series_filename=ts, SR_active='yes') SRonly.run_storagevet() # SR_only constraints SRconstraint = ConstraintObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname=SRonly.shortname,
def combine_runs(SVet_absolute_path, description, shortname, app_types, app_hours, regulation_scenario, **argument_list): """This function takes as input the type of regulatory scenario desired and three pieces of information regarding each run used to make the combined run: the resource type: [“NSR”,”SR”,”RA0”,”FR”] the hours in which a resource is given priority [[6,16], [16,23]] the regulation scenario for reach resource type: [1, 3, 3] It uses this information to run StorageVET with the desired combination of storage value stacking""" # Check that app_types, and app_hours and regulation_scenario are the same length if all( len(lst) == len(regulation_scenario) for lst in [app_types, app_hours]): pass else: raise ValueError("Wrong input list length for combine_runs") # Check for overlap in app_hours & that each element has length 2 if all(len(lst) == 2 for lst in app_hours) & (sum(app_hours, []) == sorted( sum(app_hours, []))): pass else: raise ValueError("Wrong input resource hours for combine_runs") # Check if app_types contain valid options if all(i in ["NSR", "SR", "RA0", "FR"] for i in app_types): pass else: raise ValueError("Wrong input resource types for combine_runs") # Iterate through each resource type baseline = SvetObject(SVet_absolute_path=SVet_absolute_path, shortname=shortname, description=description, **argument_list) baseline.run_storagevet() new_svet_object = baseline for i in range(len(app_types)): constraint_init = True if i == 0 else False new_constraint_object = ConstraintObject( SVet_absolute_path=SVet_absolute_path, shortname=new_svet_object.shortname, baseline_runID=new_svet_object.runID, app_hours=app_hours[i], regulation_scenario=regulation_scenario[i], constraint_init=constraint_init) getattr(new_constraint_object, "set_" + app_types[i] + "_user_constraints")() argument_list[app_types[i] + '_active'] = 'no' argument_list[ 'Scenario_time_series_filename'] = new_constraint_object.new_hourly_timeseries_path print(i, "values ", new_constraint_object.new_shortname, new_constraint_object.values, new_constraint_object.new_hourly_timeseries_path) new_svet_object = SvetObject( SVet_absolute_path=SVet_absolute_path, shortname=new_constraint_object.new_shortname, description="run #{}".format(i), User_active="yes", User_price=new_constraint_object.values, **argument_list) new_svet_object.run_storagevet() return print("Combine runs has been completed")
caiso_all = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DCM+SR+NSR on".format(iso_name), description=iso_name, Scenario_n="36", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='yes', NSR_active='yes', FR_active="no", FR_CombinedMarket="1") caiso_all.run_storagevet() # use ths to determine monthly peak net load caiso_baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DCM on".format(iso_name), description=iso_name, Scenario_n="36", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='no', NSR_active='no',
from vc_wrap import SvetObject # Create a storagevet object test = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/storagevet_dervet/", default_params_file="Model_Parameters_2v1-0-2_default.csv", shortname="test_run", description="test run", Scenario_time_series_filename= "/Applications/storagevet2v101/StorageVET-master-git/Data/hourly_timeseries_2019.csv", SR_active='yes', NSR_active='yes', DA_active='yes', RA_active='no', RA_dispmode=0, User_active='no', FR_active="no", FR_CombinedMarket="0") # Test if storagevet can run test.run_storagevet() print(test.runID, test.argument_list)
from vc_wrap import SvetObject from combine_runs import ConstraintObject iso_name = "pjm" Scenario_time_series_filename = "/Users/zhenhua/Desktop/price_data/hourly_timeseries_pjm_2019.csv" Finance_customer_tariff_filename = "/Users/zhenhua/Desktop/price_data/tariff_data/original_documents/caiso_pge_b20_2020.csv" # value stacking, should be the best scenario baseline = SvetObject(SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DA on".format(iso_name), description=iso_name, Scenario_n="24", Scenario_no_export="1", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='no', retailTimeShift_active='no', DA_active='yes', SR_active='no', NSR_active='no', FR_active="no", FR_CombinedMarket="1" ) baseline.run_storagevet()
def run_double_count(iso_name, tariff): # Initialize results Finance_customer_tariff_filename = "/Users/zhenhua/Desktop/price_data/tariff_data_fake/{}.csv".format( tariff) Scenario_time_series_filename = "/Users/zhenhua/Desktop/price_data/hourly_timeseries_{}_2019_200x.csv".format( iso_name) results = pd.DataFrame(columns=[ "Case #", "DA ETS", "SR", "NSR", "Avoided Demand", "Avoided Energy", "Capex", "O&M Cost", "NPV" ]) # Case 0a: use retail rates for RS case0a = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} RS on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='no', retailTimeShift_active='yes', DA_active='no', SR_active='no', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case0a.run_storagevet() results = results.append( { "Case #": "0 - RS", "Avoided Demand": case0a.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case0a.npv_new["Avoided Energy Charge"][0], "Capex": case0a.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case0a.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case0a.npv_new["Lifetime Present Value"][0] }, ignore_index=True) # Case 0b: use retail rates for RS+DCM case0b = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} RS+DCM on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='no', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case0b.run_storagevet() results = results.append( { "Case #": "0 - RS+DCM", "Avoided Demand": case0b.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case0b.npv_new["Avoided Energy Charge"][0], "Capex": case0b.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case0b.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case0b.npv_new["Lifetime Present Value"][0] }, ignore_index=True) # Case 0c: use DA rates for wholesale participation only case0c = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DA+SR on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='no', retailTimeShift_active='no', DA_active='yes', SR_active='yes', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case0c.run_storagevet() results = results.append( { "Case #": "0 - DA+SR", "DA ETS": case0c.npv_new["DA ETS"][0], "SR": case0c.npv_new["Spinning Reserves"][0], "Capex": case0c.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case0c.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case0c.npv_new["Lifetime Present Value"][0] }, ignore_index=True) case1b = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DA+SR+DCM on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='no', DA_active='yes', SR_active='yes', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case1b.run_storagevet() results = results.append( { "Case #": "1 - use DA for DA+SR+DCM after double counting", "DA ETS": case1b.npv_new["DA ETS"][0], "SR": case1b.npv_new["Spinning Reserves"][0], "Avoided Demand": case1b.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case1b.npv_new["Avoided Energy Charge"][0], "Capex": case1b.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case1b.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case1b.npv_new["Lifetime Present Value"][0] }, ignore_index=True) results = results.append( { "Case #": "1 - use DA for DA+SR+DCM before double counting", "DA ETS": case1b.npv_new["DA ETS"][0], "SR": case1b.npv_new["Spinning Reserves"][0], "Avoided Demand": case1b.npv_new["Avoided Demand Charge"][0], "Avoided Energy": 0, "Capex": case1b.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case1b.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case1b.npv_new["Lifetime Present Value"][0] - case1b.npv_new["Avoided Energy Charge"][0] }, ignore_index=True) results = results.append( { "Case #": "1 - double count delta", "NPV": case1b.npv_new["Avoided Energy Charge"][0] }, ignore_index=True) case2a = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} RS+SR+DCM on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='yes', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case2a.run_storagevet() results = results.append( { "Case #": "2 - use RS for RS+SR+DCM before double counting", "SR": case2a.npv_new["Spinning Reserves"][0], "Avoided Demand": case2a.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case2a.npv_new["Avoided Energy Charge"][0], "Capex": case2a.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case2a.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case2a.npv_new["Lifetime Present Value"][0] }, ignore_index=True) # TODO case2a_ts_results = pd.read_csv(case2a.runID_dispatch_timeseries_path) da_ets_corrected_yearly = np.dot(case2a.initial_hourly_timeseries["DA Price ($/kWh)"], case2a_ts_results["Load (kW)"]) - \ np.dot(case2a.initial_hourly_timeseries["DA Price ($/kWh)"], case2a_ts_results["Net Load (kW)"]) da_ets_corrected_npv_list = [] for i in range(0, 15): da_ets_corrected_npv_list.append(da_ets_corrected_yearly * (1 + 0.03)**i) da_ets_corrected_npv_list = [0] + da_ets_corrected_npv_list da_ets_corrected_npv = np.npv(0.07, da_ets_corrected_npv_list) results = results.append( { "Case #": "2 - use RS for RS+SR+DCM after double counting", "DA ETS": da_ets_corrected_npv, "SR": case2a.npv_new["Spinning Reserves"][0], "Avoided Demand": case2a.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case2a.npv_new["Avoided Energy Charge"][0], "Capex": case2a.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case2a.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case2a.npv_new["Lifetime Present Value"][0] + da_ets_corrected_npv }, ignore_index=True) results = results.append( { "Case #": "2 - double count delta", "NPV": da_ets_corrected_npv }, ignore_index=True) case3 = SvetObject( SVet_absolute_path= "/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="{} DA+RS+DCM+SR on".format(iso_name), description="{} 200x".format(iso_name), Scenario_n="36", Finance_npv_discount_rate="7", Scenario_time_series_filename=Scenario_time_series_filename, Finance_customer_tariff_filename=Finance_customer_tariff_filename, DCM_active='yes', retailTimeShift_active='yes', DA_active='yes', SR_active='yes', NSR_active='no', FR_active="no", FR_CombinedMarket="1") case3.run_storagevet() results = results.append( { "Case #": "3 - use DA and RS for DA+SR+RS+DCM", "DA ETS": case3.npv_new["DA ETS"][0], "SR": case3.npv_new["Spinning Reserves"][0], "Avoided Demand": case3.npv_new["Avoided Demand Charge"][0], "Avoided Energy": case3.npv_new["Avoided Energy Charge"][0], "Capex": case3.npv_new["2MW-5hr Capital Cost"][0], "O&M Cost": case3.npv_new["2MW-5hr Fixed O&M Cost"][0], "NPV": case3.npv_new["Lifetime Present Value"][0] }, ignore_index=True) results.sort_values(by="Case #").reset_index(drop=True)\ .to_csv("/Users/zhenhua/Desktop/double_count_results_0410/{}_{}.csv".format(iso_name, tariff)) # Plot prices & results case1b_ts_results = pd.read_csv(case1b.runID_dispatch_timeseries_path) case2a_ts_results = pd.read_csv(case2a.runID_dispatch_timeseries_path) case1b_ts_results["date"] = pd.to_datetime( case1b_ts_results["Start Datetime (hb)"]).dt.date case1b_ts_results["hour (hb)"] = pd.to_datetime( case1b_ts_results["Start Datetime (hb)"]).dt.hour case2a_ts_results["date"] = pd.to_datetime( case2a_ts_results["Start Datetime (hb)"]).dt.date case2a_ts_results["hour (hb)"] = pd.to_datetime( case2a_ts_results["Start Datetime (hb)"]).dt.hour fig = make_subplots(rows=2, cols=2, subplot_titles=("DA and retail", "SR", "DA as signal, RS to double count", "RS as signal, DA to double count")) for date in set(case1b_ts_results["date"]): data = case1b_ts_results[case1b_ts_results["date"] == date].reset_index() fig.add_trace(go.Scatter(x=data["hour (hb)"], y=data["DA Price Signal ($/kWh)"], line=dict(color='blue'), opacity=0.2, name=str(date)), row=1, col=1) fig.add_trace(go.Scatter(x=data["hour (hb)"], y=data["SR Price Signal ($/kW)"], line=dict(color='green'), opacity=0.5, name=str(date)), row=1, col=2) fig.add_trace(go.Scatter(x=data["hour (hb)"], y=data["2MW-5hr Power (kW)"], line=dict(color='blue'), opacity=0.2, name=str(date)), row=2, col=1) data2 = case2a_ts_results[case2a_ts_results["date"] == date].reset_index() fig.add_trace(go.Scatter(x=data2["hour (hb)"], y=data2["Energy Price ($/kWh)"], line=dict(color='red'), opacity=0.5, name=str(date)), row=1, col=1) fig.add_trace(go.Scatter(x=data2["hour (hb)"], y=data2["2MW-5hr Power (kW)"], line=dict(color='blue'), opacity=0.2, name=str(date)), row=2, col=2) fig.update_layout(title="{}_{}".format(iso_name, tariff)) return results, fig
# First, run the baseline scenario baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname="first run", description="first run with SR + NSR + DA + RA + FR active", Scenario_time_series_filename= "/Applications/storagevet2v101/StorageVET-master-git/Data/hourly_timeseries_2019.csv", SR_active='yes', NSR_active='yes', DA_active='yes', RA_active='yes', RA_dispmode=0, FR_active="yes", FR_CombinedMarket="0") baseline.run_storagevet() # Then, create NSR constraint by passing baseline shortname and runID constraint = ConstraintObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname=baseline.shortname, baseline_runID=baseline.runID, app_hours=[14, 20], regulation_scenario=1, constraint_init=True) constraint.set_NSR_user_constraints() print(" ", constraint.new_shortname, constraint.new_hourly_timeseries_path, constraint.values) # Lastly, use the new params to do a new SV run second_run = SvetObject(
default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="PJM DCM+SR+NSR on", description="PJM", Scenario_n="48", Scenario_time_series_filename= "/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_pjm_2020.csv", Finance_customer_tariff_filename= "/Users/zhenhua/Desktop/ISO_price_data/tariff_data/pjm_virginia_gs3_2019.csv", DCM_active='yes', retailTimeShift_active='yes', DA_active='no', SR_active='yes', NSR_active='yes', FR_active="no", FR_CombinedMarket="1") pjm_all.run_storagevet() # use ths to determine monthly peak net load pjm_baseline = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", default_params_file="Model_Parameters_2v1-0-2_default_03-2021.csv", shortname="PJM DCM+SR on", description="PJM", Scenario_n="48", Scenario_time_series_filename= "/Users/zhenhua/Desktop/ISO_price_data/hourly_timeseries_pjm_2020.csv", Finance_customer_tariff_filename= "/Users/zhenhua/Desktop/ISO_price_data/tariff_data/pjm_virginia_gs3_2019.csv", DCM_active='yes', retailTimeShift_active='yes', DA_active='no',
# print(" ", sr4.new_shortname, sr4.new_hourly_timeseries_path, sr4.values) Patricia_133 = SvetObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname="Patricia 133", description="NSR + DA active", Scenario_time_series_filename= "/Applications/storagevet2v101/StorageVET-master-git/Data/hourly_timeseries_2019.csv", SR_active='no', NSR_active='yes', DA_active='yes', RA_active='no', RA_dispmode=0, FR_active="no", FR_CombinedMarket="0") Patricia_133.run_storagevet() # VERIFIED ~636 nsr1 = ConstraintObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname=Patricia_133.shortname, baseline_runID=Patricia_133.runID, app_hours=[14, 20], regulation_scenario=1, constraint_init=True) nsr1.set_NSR_user_constraints() print(" ", nsr1.new_shortname, nsr1.new_hourly_timeseries_path, nsr1.values) # VERIFIED ~289 nsr3 = ConstraintObject( SVet_absolute_path="/Applications/storagevet2v101/StorageVET-master-git/", shortname=Patricia_133.shortname, baseline_runID=Patricia_133.runID,