cluster_network: tidy up

This commit is contained in:
Fabian 2024-01-29 12:22:42 +01:00
parent 81e7c4eb67
commit ca1628a585

View File

@ -122,6 +122,7 @@ Exemplary unsolved network clustered to 37 nodes:
""" """
import logging import logging
import os
import warnings import warnings
from functools import reduce from functools import reduce
@ -259,12 +260,14 @@ def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="scip"):
lower=1, upper=N, coords=[L.index], name="n", integer=True lower=1, upper=N, coords=[L.index], name="n", integer=True
) )
m.add_constraints(clusters.sum() == n_clusters, name="tot") m.add_constraints(clusters.sum() == n_clusters, name="tot")
m.objective = ( # leave out constant in objective L * n_clusters ** 2
clusters * clusters - 2 * clusters * L * n_clusters m.objective = (clusters * clusters - 2 * clusters * L * n_clusters).sum()
) # + (L * n_clusters) ** 2 (constant)
if solver_name == "gurobi": if solver_name == "gurobi":
logging.getLogger("gurobipy").propagate = False logging.getLogger("gurobipy").propagate = False
else: elif solver_name != "scip":
logger.info(
f"The configured solver `{solver_name}` does not support quadratic objectives. Falling back to `scip`."
)
solver_name = "scip" solver_name = "scip"
m.solve(solver_name=solver_name) m.solve(solver_name=solver_name)
return m.solution["n"].to_series().astype(int) return m.solution["n"].to_series().astype(int)
@ -374,7 +377,7 @@ def clustering_for_n_clusters(
aggregate_carriers=None, aggregate_carriers=None,
line_length_factor=1.25, line_length_factor=1.25,
aggregation_strategies=dict(), aggregation_strategies=dict(),
solver_name="cbc", solver_name="scip",
algorithm="hac", algorithm="hac",
feature=None, feature=None,
extended_link_costs=0, extended_link_costs=0,
@ -451,7 +454,6 @@ if __name__ == "__main__":
params = snakemake.params params = snakemake.params
solver_name = snakemake.config["solving"]["solver"]["name"] solver_name = snakemake.config["solving"]["solver"]["name"]
solver_name = "appsi_highs" if solver_name == "highs" else solver_name
n = pypsa.Network(snakemake.input.network) n = pypsa.Network(snakemake.input.network)