def add_generators_to_topology(AMB_network): file_path = stored_path.main_path + '/data/generators/generator_adjacency_matrix_dict1.json' with open(file_path) as f: data = json.loads(f.read()) number_of_added_generators = 0 for name_generator in data.keys(): L_ = data[name_generator] try: if type(L_[0]) != float: if not math.isnan(L_[-2]): if L_[-1] == 'Hydro': P_min = L_[-2] else: P_min = 0 g = Generator(name_generator, L_[0], 0, L_[-1], Pmax=L_[-2], Pmin=P_min, marginal_cost=np.array(L_[1])) AMB_network.add_generator(g) number_of_added_generators += 1 except: pass return AMB_network
def get_basics(Horizon_T, day): AMB_network = top(network="ABM") AMB_network = add_loads_to_topology(AMB_network) AMB_network = add_generators_to_topology(AMB_network) H, h = AMB_network.H, AMB_network.h print("Topology loaded") """ Tweak case : add a fake generator """ node_name = "MDN" AMB_network.add_generator( Generator("diesel_gen", node_name, 0, 0, Pmax=200, Pmin=0, marginal_cost=[0, 0])) """ Get the load data """ d = get_load_matrix(AMB_network, day, Horizon_T) d = tweak_d(d, load_factor=1, index_to_tweak=10, load_factor_for_node=1) print("Load historical data loaded and tweaked") """ Get the bid matrices """ b, P_max, P_min = get_producers_matrices(AMB_network, day, Horizon_T) print("Load historical bids") """ Load now the topology of generators """ Mn = AMB_network.Mn return H, h, Mn, b, P_max, P_min, d
def launch_model(): AMB_network = top(network="ABM") """ Create loads on each node """ Existing_sub_nodes = ld.get_existing_subnodes() historical_loads = ld.get_historical_loads() Simp_nodes_dict = ld.get_nodes_to_subnodes() Simp_nodes_dict["MAN"] = ["MAN2201"] Existing_sub_nodes.append("MAN2201") nodes_to_index = pd.read_csv(stored_path.main_path + '/data/ABM/ABM_Nodes.csv') for i, node in enumerate(AMB_network.names_2_nodes.keys()): # print("Load added at node : " + node) index = nodes_to_index[nodes_to_index["Node names"] == node]["Node index"].values[0] load = Load(node, node, index, type="real_load") load.add_load_data(historical_loads, Simp_nodes_dict, Existing_sub_nodes) AMB_network.add_load(load) file_path = stored_path.main_path + '/data/generators/generator_adjacency_matrix_dict1.json' with open(file_path) as f: data = json.loads(f.read()) number_of_added_generators = 0 for name_generator in data.keys(): L_ = data[name_generator] try: if type(L_[0]) != float: if not math.isnan(L_[-2]): if L_[-1] == "Gas" or L_[-1] == "Biogas": add = 35 if L_[-1] == "Geothermal": add = 10 if L_[-1] == "Coal": add = 50 if L_[-1] == "Diesel": add = 150 if L_[-1] == 'Hydro': P_min = 0.1 * L_[-2] else: P_min = 0 g = Generator(name_generator, L_[0], 0, L_[-1], Pmax=L_[-2], Pmin=P_min, marginal_cost=add + np.array(L_[1])) AMB_network.add_generator(g) number_of_added_generators += 1 except: pass node_name = "MDN" # index = 10 AMB_network.add_generator( Generator("diesel_gen", node_name, 0, 0, Pmax=200, Pmin=0, marginal_cost=[0, 0])) # AMB_network.generators[10] """ get d_t for day 12 and trading period 1 """ Horizon_T = 48 day = 2 d = [] for k, node in enumerate(AMB_network.loads.keys()): d.append([]) for j in range(day * 48, day * 48 + Horizon_T): d[k].append( 1 * 1000 * AMB_network.loads[node][0].return_d(1 + j // 48, j % 48 + 1)) # d[1] = d[1]*2 d = np.array(d) # # d[1] = d[1]*10 # # import matplotlib.pyplot as plt # plt.plot(sum(d)) # plt.show() # # sum(d[:,0]) # d = np.zeros((d.shape[0], Horizon_T)) # d = P_min """ Add topology specific characteristics """ n_generator = AMB_network.get_number_of_gen() b = np.zeros((n_generator, Horizon_T)) P_max = np.zeros((n_generator, Horizon_T)) P_min = np.zeros((n_generator, Horizon_T)) for node in AMB_network.generators.keys(): for g in AMB_network.generators[node]: for i, j in enumerate(range(day * 48, day * 48 + Horizon_T)): if g.name == "diesel_gen": pmax, pmin, a = 500, 0, 200 else: pmax, pmin, a = LMP.get_P_min_a(g.name, 1 + j // 48, j % 48 + 1, g.type) P_max[g.index, i] = pmax P_min[g.index, i] = pmin if g.type == "Hydro" else 0 b[g.index, i] = a if a > 0 else np.random.randint(0, 100) print("Loading data done") list_of_generator = {} for node in AMB_network.generators.keys(): for g in AMB_network.generators[node]: list_of_generator[g.index] = g new_dict = {} for key in sorted(list_of_generator.keys()): new_dict[key] = list_of_generator[key] H, h = AMB_network.H, AMB_network.h Mn = AMB_network.Mn save = d[10].copy() save_d = d.copy() d[10] = save d = 1.3 * save_d.copy() d[10] = save * 12.1 cost_of_battery = 200 * 1000 / (2 * 365) model = run_program(d, b, P_max, P_min, H, h, Mn, i_battery=None, z_start=1, cost_of_battery=cost_of_battery) beta = np.array([[pyo.value(model.beta[t, i]) for i in range(Horizon_T)] for t in range(H.shape[0])]) save_results(model, i_test=4) print("\n___ OBJ ____") print(pyo.value(model.obj))
from lmpnz.Network.PriceBids.Load.Load import Load from lmpnz.Network.PriceBids.Generator.Generator import Generator from lmpnz.MarketOperator.marketOperator import marketOperator import lmpnz.Network.PriceBids.Load.Load as ld import pandas as pd from cvxpy import * import numpy as np """ One node test : 1 GEN, 1 LD """ # Initializing topology, generator and load ONDE = Topology(network="ONDE") GEN = Generator("GEN", "NDE", 0, "dummy", Pmax=20, Pmin=0, marginal_cost=10) LD = Load( "LD", "NDE", 0, ) ONDE_market = marketOperator # Adding generator and load to topology ONDE.add_generator(GEN) ONDE.add_load(LD) # Updating Topology characteristics ONDE.create_Mn() ONDE.create_Pmin_Pmax() ONDE.create_Ag_qg()
- aggregate and add the generators to "AMB network" """ AMB_network = Topology.add_loads_to_topology(AMB_network) AMB_network = Topology.add_generators_to_topology(AMB_network) #plot the grid nzgridvisu.plot_19_nodes() print("Topology loaded") """ Get the bid matrices from historical bid """ # Average congestion on MDN node_name = "MDN" AMB_network.add_generator(Generator("swing_generator", node_name, 0, 0, Pmax=200, Pmin=0, marginal_cost=[0, 0])) b, P_max, P_min = dataPackage.get_producers_matrices(AMB_network, day, Horizon_T, random_a=False) print("historical bids loaded") """ Load now the topology of generators """ Mn = AMB_network.Mn """ Get LMP without Battery and plot them """ d = dataPackage.get_load_matrix(AMB_network, day, Horizon_T) d = dataPackage.tweak_d(d, load_factor=1.3, index_to_tweak=10, load_factor_for_node=12.7) #1.3, 12.7 plotprog.plot_nodal_demand(d)
AMB_network.add_load(load) file_path = stored_path.main_path + '/data/generators/generator_adjacency_matrix_dict.json' with open(file_path) as f: data = json.loads(f.read()) number_of_added_generators = 0 for name_generator in data.keys(): L_ = data[name_generator] try: if type(L_[0]) != float: if not math.isnan(L_[-2]): g = Generator(name_generator, L_[0], 0, L_[-1], Pmax=L_[-2], Pmin=L_[-3], marginal_cost=L_[1]) AMB_network.add_generator(g) number_of_added_generators += 1 except: pass """ get d_t for day 12 and trading period 1 """ Horizon_T = 24 d = [] for k, node in enumerate(AMB_network.loads.keys()): d.append([]) for j in range(Horizon_T):
Test : Two Node network """ TwoNode_network = Topology(network="NSNDE") """ Test : AMB Network """ AMB_network = Topology(network="ABM") # AMB_network.names_2_nodes """ Create two generators and add them to the network """ g = Generator("GuillaumeGenerator", "HEN", 0, "dummy", Pmax=20, Pmin=0, marginal_cost=10) AMB_network.add_generator(g) a = Generator("AliceGenerator", "HEN", 2, "dummy", Pmax=200, Pmin=0, marginal_cost=200) AMB_network.add_generator(a) k = Generator("KieranGenerator", "MAN", 1,