GSoC 2025 Bandwidth Algorithm - pgRouting/pgrouting GitHub Wiki
Table of Contents
Proposal
Brief Description
This project aims to add Bandwidth Boost Graph Library Algorithm for pgRouting.
State of the Project Before GSoC
Bandwidth algorithm has not been implemented in pgRouting. However, from the graph metrics of the Boost Graph Library, only brandes_betweenness_centrality has been implemented in pgRouting so far.
Deliverables
- Implementation of pgr_bandwidth() function.
- Code with detailed comments.
- User's documentation.
- A wiki page for each week's progress and product created.
- Basic pgTap tests for the mentioned functions.
- Integration examples with existing pgRouting algorithms.
Detailed Proposal
Participants
Title | GitHub Handle | Name |
---|---|---|
1st Mentor | @robe2 | Regina Obe |
2nd Mentor | @cvvergara | Vicky Vergara |
3rd Mentor | @sanak | Ko Nagase |
4th Mentor | @iosefa | Iosefa Percival |
Student Developer | @Saloni-2005 | Saloni Kumari |
Timeline
Community Bonding Period
- Introduce myself to the community, interact with my mentors, and learn more about pgRouting.
- Understand the coding style, generating documentation, and the interaction of pgRouting with other applications.
- Set up a wiki page to keep track of my progress.
- Make a branch in the GSoC_pgRouting repository where I will push my weekly code.
- Review pgRouting C++ coding style from Google C++ coding style guide.
- Participate in community discussions, meetings, or forums to engage with the project
Community Bonding Period Report
- Created OSGeo profile and linked it to the GSoC 2025 Accepted Students wiki page.
- Set up project wiki page with project summary, and placeholders for weekly reports and deliverables.
- Initialized basic folder structure for the Bandwidth algorithm implementation in pgRouting.
- Explored pgRouting and Boost Graph Library to understand integration and function design.
- Interacted with mentors and participated in community discussions for onboarding and project clarity.
- Ready for coding phase with a clear understanding of next steps: C++ implementation, SQL wrapping, and testing setup.
First Coding Period
Week 1 (June 2nd - June 8th)
-
Original Plan
-
Review BGL’s Bandwidth algorithm.
-
Design data structures for pgr_bandwidth().
-
-
Revised Plan:
- Focused on setting up file structure to support later development.
-
Work Done:
-
Created foundational files for pgr_bandwidth() implementation:
-
SQL: bandwidth.sql, _bandwidth.sql
-
Include: bandwidth_driver.h, bandwidth.hpp, bandwidth_process.h
-
Src: bandwidth_driver.cpp, bandwidth_process.cpp, bandwidth.c
-
-
-
Plan for Next Week:
-
No major progress expected due to final exams (June 9–15).
-
Will resume implementation and testing in Week 3.
-
-
Blockers:
- Final exams during Week 2 (non-technical).
Week 2
-
Original Plan:
-
Create initial SQL function interface
-
Develop C++ bandwidth calculation algorithm
-
-
Revised Plan:
-
Focus shifted to resolving structural and naming issues across files
-
Postpone logic implementation until after final exams
-
Prioritize clean, consistent codebase setup for upcoming development
-
-
Work Done:
-
Fixed naming issues and removed duplicate/unnecessary files
-
Renamed files for consistency and clarity
-
Updated license headers across all implementation files
-
Modified CMakeLists.txt accordingly
-
Attended project meetings (June 8 & 9)
-
Implemented mentor feedback
-
Updated wiki documentation
-
-
PR link : #445
-
Plan for Week 3:
-
Resolve compilation errors
-
Resume full development
-
Catch up on pending work
-
-
Blockers:
- None
Week 3
-
Original Plan:
-
Implement basic driver to connect SQL and C++
-
Create data pipeline from SQL input to graph representation
-
-
Revised Plan:
-
Focus shifted to resolving compilation errors.
-
Focused on resolving conflicts.
-
-
Work Done:
-
Fixed parameters and data types based on my algorithm
-
Resolved the merge conflicts
-
Resolved compilation errors to reach a stable compilation point
-
Attended project meetings (June 16 & 20)
-
Implemented mentor feedback
-
Updated wiki documentation
-
-
Plan for Week 4:
-
Start testing processes.
-
Develop PostgreSQL integration methods
-
-
Blockers:
- None
Week 4
-
Original Plan:
-
Incorporate core bandwidth calculation logic
-
Develop error handling and edge cases
-
-
Revised Plan:
-
Focus shifted to resolving compilation errors
-
Focused on resolving parameter mismatches and type issues in C++ binding
-
-
Work Done:
-
Fixed parameters and data types based on Boost algorithm implementation
-
Resolved all compilation errors to achieve a stable build
-
Resolved previous merge conflicts
-
Added types_check.pg test file to begin testing the input types
-
Attended project meetings (June 23)
-
Collaborated with mentors for review and feedback
-
Updated the wiki documentation
-
-
PR link: #456
-
Plan for Week 5 (June 30 – July 6):
-
Start the doc-queries testing process
-
Begin work on PostgreSQL integration methods for testing
-
-
Blockers:
- None
Week 5
-
Original plan
- Write comprehensive documentation
- Add performance optimizations
- Prepare for midterm evaluation
-
Revised plan
- Focus shifted to resolving compilation errors
- Started testing process
-
Work done
- Fixed parameters and data types based on my algorithm
- Resolved the merge conflicts
- Resolved compilation errors to reach a stable compilation point
- Implemented mentor feedback
- Updated wiki documentation
-
PR link: #463
-
Plan for Week 6 (July 7 – July 14)
- Develop PostgreSQL integration methods
-
Blockers:
- None
Week 6
TBD
Second Coding Period
Week 7
TBD
Week 8
TBD
Week 9
TBD
Week 10
TBD
Week 11
TBD
Week 12
TBD
Log of Pull Requests
Link to pull requests made in GSoC-pgRouting repository
Pull Request | Description | Date | Status |
---|---|---|---|
#441 | Week 1 | June 3 | Closed |
#443 | Week 1 | June 7 | Merged |
#445 | Week 2 | June 9 | Merged |
#454 | Week 3 | June 20 | Merged |
#456 | Week 4 | June 23 | Merged |
#463 | Week 5 | July 1 | Merged |
Final Report
TBD
Potential Future Work :
TBD
Links:
- Pull Requests:
- Final Pull Request: TBD
- Intermediate pull requests: TBD