update the csv file output code and add a progress bar in the code

This commit is contained in:
Hanzhang Ma 2024-05-16 21:12:13 +02:00
parent 3740136d7c
commit df2f953678
2 changed files with 98 additions and 563 deletions

File diff suppressed because one or more lines are too long

63
main.py
View File

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# coding: utf-8 # coding: utf-8
# In[39]: # In[83]:
import os import os
@ -28,7 +28,7 @@ folder_path = 'plots'
clear_folder_make_ess_pv(folder_path) clear_folder_make_ess_pv(folder_path)
# In[40]: # In[84]:
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
@ -39,7 +39,7 @@ from EnergySystem import EnergySystem
from config import pv_config, grid_config, ess_config from config import pv_config, grid_config, ess_config
# In[41]: # In[85]:
import json import json
@ -53,7 +53,7 @@ with open('config.json', 'r') as f:
time_interval = js_data["time_interval"]["numerator"] / js_data["time_interval"]["denominator"] time_interval = js_data["time_interval"]["numerator"] / js_data["time_interval"]["denominator"]
print(time_interval) # print(time_interval)
pv_loss = js_data["pv"]["loss"] pv_loss = js_data["pv"]["loss"]
pv_cost_per_kW = js_data["pv"]["cost_per_kW"] pv_cost_per_kW = js_data["pv"]["cost_per_kW"]
@ -116,7 +116,7 @@ ess_capacities = np.linspace(ess_begin, ess_end, ess_groups)
# overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities) # overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
# In[42]: # In[86]:
hour_demand = [] hour_demand = []
@ -132,7 +132,7 @@ plt.savefig('plots/demand.png')
plt.close() plt.close()
# In[43]: # In[87]:
def draw_results(results, filename, title_benefit, annot_benefit=False, figure_size=(10, 10)): def draw_results(results, filename, title_benefit, annot_benefit=False, figure_size=(10, 10)):
@ -171,7 +171,7 @@ def draw_results(results, filename, title_benefit, annot_benefit=False, figure_s
plt.savefig(filename) plt.savefig(filename)
# In[44]: # In[88]:
def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, figure_size=(10, 10)): def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, figure_size=(10, 10)):
@ -184,7 +184,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
if 0 in df.index and 0 in df.columns: if 0 in df.index and 0 in df.columns:
df.loc[0,0] = 100 df.loc[0,0] = 100
df[df > 80] = 100 df[df > 80] = 100
print(df) # print(df)
df = df.astype(float) df = df.astype(float)
df.index = df.index / 1000 df.index = df.index / 1000
@ -193,7 +193,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
df.columns = df.columns.map(int) df.columns = df.columns.map(int)
min_value = df.min().min() min_value = df.min().min()
max_value = df.max().max() max_value = df.max().max()
print(max_value) # print(max_value)
max_scale = max(abs(min_value), abs(max_value)) max_scale = max(abs(min_value), abs(max_value))
df[df.columns[-1] + 1] = df.iloc[:, -1] df[df.columns[-1] + 1] = df.iloc[:, -1]
@ -222,7 +222,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
plt.close() plt.close()
# In[45]: # In[89]:
def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10)): def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10)):
@ -257,17 +257,17 @@ def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10
plt.close() plt.close()
# In[46]: # In[90]:
def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure_size=(10, 10), days=365, granularity=15): def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure_size=(10, 10), days=365, granularity=15):
df = overload_cnt df = overload_cnt
print(days, granularity) # print(days, granularity)
coef = 60 / granularity * days * 24 coef = 60 / granularity * days * 24
print(coef) # print(coef)
print(df) # print(df)
df = ( coef - df) / coef df = ( coef - df) / coef
print(df) # print(df)
df = df.astype(float) df = df.astype(float)
df.index = df.index / 1000 df.index = df.index / 1000
@ -309,7 +309,7 @@ def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure
plt.close() plt.close()
# In[47]: # In[91]:
def cal_profit(es: EnergySystem, saved_money, days): def cal_profit(es: EnergySystem, saved_money, days):
@ -317,7 +317,7 @@ def cal_profit(es: EnergySystem, saved_money, days):
return profit return profit
# In[48]: # In[92]:
def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacity, ess_cost_per_kW, ess_lifetime, ess_loss, grid_capacity, grid_loss, sell_price, time_interval, data, days, storage=0): def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacity, ess_cost_per_kW, ess_lifetime, ess_loss, grid_capacity, grid_loss, sell_price, time_interval, data, days, storage=0):
@ -357,9 +357,11 @@ def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacit
energySystem.time) energySystem.time)
# In[49]:
# In[93]:
from tqdm import tqdm
months_results = [] months_results = []
months_costs = [] months_costs = []
months_overload = [] months_overload = []
@ -368,7 +370,7 @@ months_gen_energy = []
months_gen_energy2 = [] months_gen_energy2 = []
months_ess_rest = pd.DataFrame(30, index=pv_capacities, columns= ess_capacities) months_ess_rest = pd.DataFrame(30, index=pv_capacities, columns= ess_capacities)
months_csv_data = {} months_csv_data = {}
for index, month_data in enumerate(months_data): for index, month_data in tqdm(enumerate(months_data), total=len(months_data), position=0, leave= True):
results = pd.DataFrame(index=pv_capacities, columns= ess_capacities) results = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities) costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities) overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
@ -381,7 +383,7 @@ for index, month_data in enumerate(months_data):
pv_generates = {} pv_generates = {}
grid_need_powers = {} grid_need_powers = {}
times = {} times = {}
for pv_capacity in pv_capacities: for pv_capacity in tqdm(pv_capacities, total=len(pv_capacities), desc=f'generating pv for month {index + 1}',position=1, leave=False):
factory_demands[pv_capacity] = {} factory_demands[pv_capacity] = {}
buy_prices[pv_capacity] = {} buy_prices[pv_capacity] = {}
sell_prices[pv_capacity] = {} sell_prices[pv_capacity] = {}
@ -496,7 +498,7 @@ draw_overload(overload_cnt=annual_overload,
figure_size=figure_size) figure_size=figure_size)
# In[50]: # In[94]:
def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capacities): def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capacities):
@ -513,7 +515,7 @@ def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capac
return data return data
# In[51]: # In[102]:
annual_pv_gen = collapse_months_csv_data(months_csv_data, "pv_generate", pv_capacities, ess_capacities) annual_pv_gen = collapse_months_csv_data(months_csv_data, "pv_generate", pv_capacities, ess_capacities)
@ -523,16 +525,21 @@ annual_sell_price = collapse_months_csv_data(months_csv_data, "sell_price", pv_c
annual_factory_demand = collapse_months_csv_data(months_csv_data, "factory_demand", pv_capacities, ess_capacities) annual_factory_demand = collapse_months_csv_data(months_csv_data, "factory_demand", pv_capacities, ess_capacities)
annual_grid_need_power = collapse_months_csv_data(months_csv_data, "grid_need_power", pv_capacities, ess_capacities) annual_grid_need_power = collapse_months_csv_data(months_csv_data, "grid_need_power", pv_capacities, ess_capacities)
from datetime import datetime, timedelta
for pv_capacity in pv_capacities: for pv_capacity in pv_capacities:
for ess_capacity in ess_capacities: for ess_capacity in ess_capacities:
with open(f'data/annual_data-pv-{pv_capacity}-ess-{ess_capacity}.csv', 'w') as f: with open(f'data/annual_data-pv-{pv_capacity}-ess-{ess_capacity}.csv', 'w') as f:
f.write("time,pv_generate,factory_demand,buy_price,sell_price,grid_need_power\n") f.write("date, time,pv_generate (kW),factory_demand (kW),buy_price (USD/MWh),sell_price (USD/MWh),grid_need_power (kW)\n")
start_date = datetime(2023, 1, 1, 0, 0, 0)
for i in range(len(annual_time[pv_capacity][ess_capacity])): for i in range(len(annual_time[pv_capacity][ess_capacity])):
f.write(f"{annual_time[pv_capacity][ess_capacity][i]}, {int(annual_pv_gen[pv_capacity][ess_capacity][i])}, {int(annual_factory_demand[pv_capacity][ess_capacity][i])}, {int(annual_buy_price[pv_capacity][ess_capacity][i]*1000)}, {int(annual_sell_price[pv_capacity][ess_capacity][i]*1000)}, {int(annual_grid_need_power[pv_capacity][ess_capacity][i])}\n") current_date = start_date + timedelta(hours=i)
formate_date = current_date.strftime("%Y-%m-%d")
f.write(f"{formate_date},{annual_time[pv_capacity][ess_capacity][i]},{int(annual_pv_gen[pv_capacity][ess_capacity][i])},{int(annual_factory_demand[pv_capacity][ess_capacity][i])},{int(annual_buy_price[pv_capacity][ess_capacity][i]*1000)},{int(annual_sell_price[pv_capacity][ess_capacity][i]*1000)},{int(annual_grid_need_power[pv_capacity][ess_capacity][i])} \n")
# In[52]: # In[96]:
def save_data(data, filename): def save_data(data, filename):
@ -540,7 +547,7 @@ def save_data(data, filename):
data.to_json(filename + '.json') data.to_json(filename + '.json')
# In[53]: # In[97]:
if not os.path.isdir('data'): if not os.path.isdir('data'):
@ -551,13 +558,13 @@ save_data(annual_costs, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_
save_data(annual_overload, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-overload_cnt') save_data(annual_overload, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-overload_cnt')
# In[54]: # In[98]:
draw_results(annual_result, 'plots/test.png', 'test', False) draw_results(annual_result, 'plots/test.png', 'test', False)
# In[55]: # In[99]:
draw_roi(annual_costs, annual_nettos, 'plots/annual_roi.png', title_roi, 365, annot_benefit, figure_size) draw_roi(annual_costs, annual_nettos, 'plots/annual_roi.png', title_roi, 365, annot_benefit, figure_size)