Solar Energy System Optimization
A high-performance Rust implementation for optimizing solar energy systems using linear programming. This tool helps design and optimize residential and commercial solar energy systems with battery storage, heat pumps, electric vehicle charging, and grid integration.
Features
Core Optimization Capabilities
- Photovoltaic (PV) Systems - Solar panel capacity optimization
- Battery Storage - Energy storage with configurable efficiency and losses
- Grid Integration - Electricity import/export with feed-in tariffs
- Heat Pump Systems - Space heating optimization with COP calculations
- Electric Vehicle Charging - Flexible and fixed charging schedules
- Hot Water Storage - Thermal energy storage optimization
Advanced Features
- Insulation-based Heating - Uses building characteristics for accurate heat demand
- Monthly Demand Scaling - Customize electricity demand patterns
- Multiple Optimization Modes - Cost minimization or autonomy maximization
- Comprehensive Plotting - Visual analysis of optimization results
- Caching System - Efficient data loading and processing
Quick Start
Installation
# Clone the repository
# Build the project
# Run with default configuration
# Run with individual day plots
Basic Usage
use run_simple_opt;
use OptimizationConfig;
Core Function: run_simple_opt
The main optimization function that performs linear programming optimization of solar energy systems.
Function Signature
Parameters
config:OptimizationConfig- Complete system configuration (see Configuration section)pv_cap_w_max:f64- Maximum PV capacity in wattssolar_irradiance:Vec<f64>- Hourly solar irradiance values (8760 hours, 0-1 scale)electricity_demand:Vec<f64>- Hourly electricity demand in Wh (8760 hours)
Returns
SimpleOptimizationResults: Struct containing optimization results including:- System capacities (PV, battery, grid, heat pump)
- Energy flows (hourly PV production, grid consumption, battery storage)
- Economic metrics (total cost, investment costs, operating costs)
- Performance indicators (autonomy, self-consumption, etc.)
Detailed Usage Examples
Example 1: Basic Residential System
use run_simple_opt;
use ;
Example 2: System with Heat Pump and Electric Vehicle
use run_simple_opt;
use ;
Example 3: Optimization for Maximum Autonomy
use run_simple_opt;
use ;
Configuration Reference
The OptimizationConfig struct contains all system parameters:
Investment Costs
pub inv_pv: f64, // PV investment cost (€/kW)
pub inv_bat: f64, // Battery investment cost (€/kWh)
pub inv_hwat: f64, // Hot water storage cost (€/kWh)
pub inv_grid: f64, // Grid connection cost (€/kW)
pub inv_heat_pump: f64, // Heat pump cost (€/kW)
Economic Parameters
pub annuity: f64, // Annuity factor for investments
pub fc_grid: f64, // Grid electricity cost (€/kWh)
pub feed_in_tariff: f64, // Feed-in tariff (€/kWh)
System Parameters
pub storage_loss_bat: f64, // Battery hourly loss rate
pub eta_in_bat: f64, // Battery charging efficiency
pub eta_out_bat: f64, // Battery discharging efficiency
pub c_rate_limit: f64, // C-rate limit (fraction of capacity per hour)
pub electricity_usage: f64, // Annual electricity usage (Wh)
Electric Vehicle Parameters
pub electric_car_enabled: bool, // Enable/disable EV charging
pub car_daily_km: f64, // Daily kilometers driven
pub car_efficiency_kwh_per_km: f64, // Car efficiency (kWh/km)
pub car_battery_size_kwh: f64, // Car battery size (kWh)
pub car_charge_during_day: bool, // Day/night charging preference
Heat Pump Parameters
pub heat_pump_enabled: bool, // Enable/disable heat pump
pub house_square_meters: f64, // House size (m²)
pub building_type: BuildingTypeEnum, // Building type
pub construction_period: YearCategoryESEnum, // Construction period
pub insulation_standard: InsulationLevel, // Insulation quality
pub heating_type: HeatingType, // Floor or radiator heating
Data Requirements
Input Data Files
The system expects CSV files in the data/ directory:
ts_res.csv- Solar irradiance time series (8760 hours, 0-1 scale)demand.csv- Base electricity demand pattern (8760 hours, kWh)when2heat_processed_2022.csv- Heat demand data for insulation calculations
Data Format
All time series must contain exactly 8760 hourly values representing a full year.
Command Line Usage
# Run optimization with default settings
# Run with individual day plots (shows detailed daily profiles)
# Build release version for better performance
# Run with custom data directory
RUST_LOG=info
Output and Visualization
The system generates several types of output:
Console Output
- Optimization progress and results
- System performance metrics
- Economic analysis
Plot Files
- Hourly energy profiles
- Seasonal analysis
- Individual day plots (when using
cargo run days)
Results Structure
Performance
- Optimization Time: Typically 1-5 seconds for residential systems
- Memory Usage: ~50-100 MB for full year optimization
- Solver: Uses Clarabel solver via
good_lpcrate - Caching: Automatic caching of loaded data for repeated runs
Dependencies
good_lp- Linear programming solvercalamine- Excel file readingplotters- Plotting and visualizationems-model- Building energy model integrationserde- Serialization support
Error Handling
The system provides comprehensive error handling:
- Data Loading Errors - Invalid CSV files or missing data
- Optimization Errors - Solver failures or infeasible problems
- Configuration Errors - Invalid parameter values
- File I/O Errors - Missing or corrupted data files
Contributing
- Follow Rust conventions and use
cargo fmt - Add tests for new functionality
- Update documentation for API changes
- Ensure all tests pass with
cargo test
License
This project is part of the EverBlue P2P Energy Management System.