Example #1
0
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
Example #2
0
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
Example #3
0
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))
Example #4
0
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()
Example #5
0
        - 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)
Example #6
0
        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):
Example #7
0
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,