fix small issues

This commit is contained in:
Fabian Hofmann 2019-09-23 16:44:48 +02:00
parent 9178dde4a7
commit 16ff2b51bd
2 changed files with 22 additions and 11 deletions

View File

@ -175,7 +175,8 @@ rule cluster_network:
network='networks/{network}_s{simpl}.nc', network='networks/{network}_s{simpl}.nc',
regions_onshore="resources/regions_onshore_{network}_s{simpl}.geojson", regions_onshore="resources/regions_onshore_{network}_s{simpl}.geojson",
regions_offshore="resources/regions_offshore_{network}_s{simpl}.geojson", regions_offshore="resources/regions_offshore_{network}_s{simpl}.geojson",
clustermaps=ancient('resources/clustermaps_{network}_s{simpl}.h5') clustermaps=ancient('resources/clustermaps_{network}_s{simpl}.h5'),
tech_costs=COSTS
output: output:
network='networks/{network}_s{simpl}_{clusters}.nc', network='networks/{network}_s{simpl}_{clusters}.nc',
regions_onshore="resources/regions_onshore_{network}_s{simpl}_{clusters}.geojson", regions_onshore="resources/regions_onshore_{network}_s{simpl}_{clusters}.geojson",

View File

@ -18,10 +18,11 @@ from six.moves import reduce
import pyomo.environ as po import pyomo.environ as po
import pypsa import pypsa
from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_louvain, from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_spectral_clustering,
busmap_by_spectral_clustering,
_make_consense, get_clustering_from_busmap) _make_consense, get_clustering_from_busmap)
from add_electricity import load_costs
def normed(x): def normed(x):
return (x/x.sum()).fillna(0.) return (x/x.sum()).fillna(0.)
@ -132,7 +133,8 @@ def plot_busmap_for_n_clusters(n, n_clusters=50):
def clustering_for_n_clusters(n, n_clusters, aggregate_carriers=None, def clustering_for_n_clusters(n, n_clusters, aggregate_carriers=None,
line_length_factor=1.25, potential_mode='simple', line_length_factor=1.25, potential_mode='simple',
solver_name="cbc", algorithm="kmeans"): solver_name="cbc", algorithm="kmeans",
extended_link_costs=0):
if potential_mode == 'simple': if potential_mode == 'simple':
p_nom_max_strategy = np.sum p_nom_max_strategy = np.sum
@ -149,15 +151,15 @@ def clustering_for_n_clusters(n, n_clusters, aggregate_carriers=None,
aggregate_generators_carriers=aggregate_carriers, aggregate_generators_carriers=aggregate_carriers,
aggregate_one_ports=["Load", "StorageUnit"], aggregate_one_ports=["Load", "StorageUnit"],
line_length_factor=line_length_factor, line_length_factor=line_length_factor,
generator_strategies={'p_nom_max': p_nom_max_strategy} generator_strategies={'p_nom_max': p_nom_max_strategy},
) scale_link_capital_costs=False)
nc = clustering.network nc = clustering.network
nc.links['underwater_fraction'] = (n.links.eval('underwater_fraction * length') nc.links['underwater_fraction'] = (n.links.eval('underwater_fraction * length')
.div(nc.links.length).dropna()) .div(nc.links.length).dropna())
# nc.links['capital_cost'] += (costs.at['HVDC overhead', 'capital_cost'] * nc.links['capital_cost'] += (nc.links.length.sub(n.links.length).dropna()
# (nc.links.length - n.links.length) .clip(lower=0)
# .dropna().clip(lower=0)) .mul(extended_link_costs * line_length_factor))
return clustering return clustering
def save_to_geojson(s, fn): def save_to_geojson(s, fn):
@ -190,7 +192,9 @@ if __name__ == "__main__":
network='networks/{network}_s{simpl}.nc', network='networks/{network}_s{simpl}.nc',
regions_onshore='resources/regions_onshore_{network}_s{simpl}.geojson', regions_onshore='resources/regions_onshore_{network}_s{simpl}.geojson',
regions_offshore='resources/regions_offshore_{network}_s{simpl}.geojson', regions_offshore='resources/regions_offshore_{network}_s{simpl}.geojson',
clustermaps='resources/clustermaps_{network}_s{simpl}.h5' clustermaps='resources/clustermaps_{network}_s{simpl}.h5',
tech_costs='data/costs.csv',
), ),
output=Dict( output=Dict(
network='networks/{network}_s{simpl}_{clusters}.nc', network='networks/{network}_s{simpl}_{clusters}.nc',
@ -222,6 +226,11 @@ if __name__ == "__main__":
clustering = pypsa.networkclustering.Clustering(n, busmap, linemap, linemap, pd.Series(dtype='O')) clustering = pypsa.networkclustering.Clustering(n, busmap, linemap, linemap, pd.Series(dtype='O'))
else: else:
line_length_factor = snakemake.config['lines']['length_factor'] line_length_factor = snakemake.config['lines']['length_factor']
overhead_cost = (load_costs(n.snapshot_weightings.sum()/8760,
tech_costs=snakemake.input.tech_costs,
config=snakemake.config['costs'],
elec_config=snakemake.config['electricity'])
.at['HVAC overhead', 'capital_cost'])
def consense(x): def consense(x):
v = x.iat[0] v = x.iat[0]
@ -234,7 +243,8 @@ if __name__ == "__main__":
clustering = clustering_for_n_clusters(n, n_clusters, aggregate_carriers, clustering = clustering_for_n_clusters(n, n_clusters, aggregate_carriers,
line_length_factor=line_length_factor, line_length_factor=line_length_factor,
potential_mode=potential_mode, potential_mode=potential_mode,
solver_name=snakemake.config['solving']['solver']['name']) solver_name=snakemake.config['solving']['solver']['name'],
extended_link_costs=overhead_cost)
clustering.network.export_to_netcdf(snakemake.output.network) clustering.network.export_to_netcdf(snakemake.output.network)
with pd.HDFStore(snakemake.output.clustermaps, mode='w') as store: with pd.HDFStore(snakemake.output.clustermaps, mode='w') as store: