breos.optimization.optimize_system_multi_objective#

breos.optimization.optimize_system_multi_objective(tmy_data, houseload, config, results_dir='results/optimization', pop_size=40, n_gen=100, n_offsprings=None, seed=1, verbose=False)[source]#

Run NSGA-II multi-objective PV/battery sizing.

This is the public wrapper around SolarDesignProblem. It optimizes module count, battery capacity, tilt, and optionally azimuth. Objectives are grid independence, NPV, and ZEB ratio. Install breos[optimization] to provide the pymoo dependency.

Parameters:
  • tmy_data (DataFrame) – One-year weather DataFrame.

  • houseload (DataFrame) – One-year load profile.

  • config (Dict[str, Any]) – Optimization config using the nested keys consumed by SolarDesignProblem (location, constraints, simulation, pv, battery, costs, financials).

  • results_dir (str) – Directory label retained in the problem object.

  • pop_size (int) – NSGA-II population size.

  • n_gen (int) – Number of generations.

  • n_offsprings (int | None) – Offspring count per generation. Defaults to pymoo’s algorithm default when None.

  • seed (int) – Random seed passed to pymoo.

  • verbose (bool) – Print pymoo progress.

Return type:

OptimizationResult

Returns:

OptimizationResult whose details["pareto"] is a DataFrame with Modules, Battery_kWh, Tilt, Azimuth, Grid_Independence_%, NPV_Eur, and ZEB_Ratio.

Raises: