This project is a solution for the Zindi ML competition "Smart Energy Supply Scheduling for Green Telecom Challenge". The goal is to develop machine learning models to predict solar energy generation and create optimal energy supply strategies for telecom sites with hybrid power sources (grid, solar, diesel) and battery storage. The objective is to minimize energy costs while maintaining battery State of Charge (SOC) above safe thresholds.
The competition focuses on 10 telecom sites over 7-day periods, requiring predictions and strategies at 15-minute intervals.
This project serves as the foundation for an undergraduate thesis titled "Optimized Energy Supply Strategies for Green Telecommunications Networks: An AI and Multi-Objective Optimization Approach", supervised by Professor Eugène C. Ezin. The competition dataset and problem formulation provide the empirical basis for exploring AI-driven optimization techniques in sustainable telecommunications infrastructure.
- Solar Prediction: ML models to forecast hourly solar generation based on weather conditions
- Load Prediction: Forecasting energy consumption patterns
- Strategy Optimization: Various algorithms (greedy, dynamic programming, genetic algorithms, etc.) to generate optimal energy source usage strategies
- Feasibility Validation: Ensuring battery SOC constraints are met
- Scoring: Official evaluation using the provided error metric
-
Clone the repository:
git clone <repository-url> cd smart-uti
-
Set up Python environment:
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -r requirements.txt
Note: If
requirements.txtdoesn't exist, install core dependencies:pip install pandas numpy scikit-learn autogluon matplotlib seaborn autogluon
The training data is located in trainData/:
energy consumption.csv: Hourly energy consumption per sitesolar power and weather condition.csv: Weather features and actual solar generationsite information and grid outage.csv: Site configurations including battery specs and grid outage plans
Run the prediction scripts to generate solar and load forecasts:
python scripts/generate_predictions.pyThis will create predictions/solar_predictions.csv and predictions/load_predictions.csv.
Choose from various strategy generation scripts:
- Baseline:
python scripts/generate_baseline_strategy.py - Conservative:
python scripts/generate_conservative_strategy.py - Optimized:
python scripts/generate_optimized_feasible_strategy.py - Probabilistic:
python scripts/generate_probabilistic_strategy.py - Smart Conservative:
python scripts/generate_smart_conservative_strategy.py - Ultra Safe:
python scripts/generate_ultra_safe_strategy.py
Or use optimization algorithms:
- Greedy:
python scripts/greedy_optimization.py - Dynamic Programming:
python scripts/dp_optimization.py - Genetic Algorithm:
python scripts/genetic_optimization.py
Check if your strategy is feasible:
python scripts/validate_strategy.py --strategy submission_optimized_feasible.csvEstimate the score using the official metric:
python scripts/estimate_score.py --strategy submission_optimized_feasible.csvTrain solar prediction models using AutoGluon:
python notebooks/solar_prediction_autogluon.ipynbTrain load prediction models:
python notebooks/energy_forecasting_autogluon.ipynbThe official scoring metric is defined in errorMetric_ex.py. The score is calculated as:
score = 300 * dieselStartups + totalDieselTime + 0.95 * maxDieselContinuousTime + 0.25 * totalGridTime
Key constraints:
- Battery SOC must never drop below DOD threshold
- Strategy must cover exactly 672 time intervals (15-min granularity over 7 days)
- Grid can only be used when available according to outage plan
├── docs/ # Documentation
├── models/ # Trained ML models
│ ├── load_predictor/
│ └── solar_predictor/
├── notebooks/ # Jupyter notebooks for analysis and training
├── predictions/ # Generated predictions
├── scripts/ # Python scripts for strategy generation
├── trainData/ # Training data
├── errorMetric_ex.py # Official scoring script
├── SampleSubmission.csv # Sample submission format
└── README.md
- Strategy not feasible: Check battery SOC constraints using
validate_strategy.py - High score: Minimize diesel startups (300x penalty) and continuous runtime
- Grid usage errors: Ensure grid is only used when
gridPlan[hour] == true - Time granularity: Strategies must have exactly 672 rows per site
- Use probabilistic strategies for uncertainty handling
- Optimize for diesel startup minimization
- Consider weather patterns for solar prediction accuracy
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly using validation scripts
- Submit a pull request
This project is for educational and research purposes in the context of the Zindi competition.