From 6feebedc0d4dba30dfdd32427cfba96110617b9c Mon Sep 17 00:00:00 2001 From: Jonas Hoersch Date: Tue, 22 Jan 2019 11:24:07 +0100 Subject: [PATCH] cluster_network, simplify_network: Improve debugging facilities for clustering --- scripts/cluster_network.py | 9 +++++++-- scripts/simplify_network.py | 17 ++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/scripts/cluster_network.py b/scripts/cluster_network.py index 5683a582..98ac14cb 100644 --- a/scripts/cluster_network.py +++ b/scripts/cluster_network.py @@ -111,7 +111,11 @@ def distribute_clusters_optim(n, n_clusters, solver_name=None): return pd.Series(m.n.get_values(), index=L.index).astype(int) -def busmap_for_n_clusters(n, n_clusters): +def busmap_for_n_clusters(n, n_clusters, **kmeans_kwds): + kmeans_kwds.setdefault('n_init', 1000) + kmeans_kwds.setdefault('max_iter', 30000) + kmeans_kwds.setdefault('tol', 1e-6) + n.determine_network_topology() if 'snakemake' in globals(): @@ -123,10 +127,11 @@ def busmap_for_n_clusters(n, n_clusters): def busmap_for_country(x): prefix = x.name[0] + x.name[1] + ' ' + logger.debug("Determining busmap for country {}".format(prefix[:-1])) if len(x) == 1: return pd.Series(prefix + '0', index=x.index) weight = weighting_for_country(n, x) - return prefix + busmap_by_kmeans(n, weight, n_clusters[x.name], buses_i=x.index, n_init=1000, max_iter=30000, tol=1e-6) + return prefix + busmap_by_kmeans(n, weight, n_clusters[x.name], buses_i=x.index, **kmeans_kwds) return n.buses.groupby(['country', 'sub_network'], group_keys=False).apply(busmap_for_country) def plot_busmap_for_n_clusters(n, n_clusters=50): diff --git a/scripts/simplify_network.py b/scripts/simplify_network.py index e1cc85fb..7f60df4e 100644 --- a/scripts/simplify_network.py +++ b/scripts/simplify_network.py @@ -241,16 +241,18 @@ if __name__ == "__main__": from vresutils.snakemake import MockSnakemake, Dict snakemake = MockSnakemake( path='..', - wildcards=Dict(simpl=''), + wildcards=Dict(simpl='1024', network='elec'), input=Dict( - network='networks/elec.nc', - regions_onshore='resources/regions_onshore.geojson', - regions_offshore='resources/regions_offshore.geojson' + network='networks/{network}.nc', + tech_costs="data/costs.csv", + regions_onshore="resources/regions_onshore.geojson", + regions_offshore="resources/regions_offshore.geojson" ), output=Dict( - network='networks/elec_s{simpl}.nc', - regions_onshore='resources/regions_onshore_s{simpl}.geojson', - regions_offshore='resources/regions_offshore_s{simpl}.geojson' + network='networks/{network}_s{simpl}.nc', + regions_onshore="resources/regions_onshore_{network}_s{simpl}.geojson", + regions_offshore="resources/regions_offshore_{network}_s{simpl}.geojson", + clustermaps='resources/clustermaps_{network}_s{simpl}.h5' ) ) @@ -268,6 +270,7 @@ if __name__ == "__main__": if snakemake.wildcards.simpl: n_clusters = int(snakemake.wildcards.simpl) + logger.info("Clustering to {} buses".format(n_clusters)) renewable_carriers = pd.Index([tech for tech in n.generators.carrier.unique()