-
-
Notifications
You must be signed in to change notification settings - Fork 369
GSoC 2020 Lengauer Tarjan dominator tree and Bipartite
- Proposal
- Participants
- Timeline
- Log of Pull Requests
- Slides
- Final Report
- Weekly Reports
- References
The project consists of the implementation of two algorithms:
-
Lengauer Tarjan Dominator Tree
-
Bipartite
The algorithms are going to be taken from Boost Graph Library (BGL). The first part of this project is to provide support for Lengauer Tarjan Dominator Tree in pgRouting. Lengauer Tarjan Dominator Tree is applied in many routing applications, such as if the user wants to go from city A to city B and there are multiple routes but all the routes are diverting from city X then the user can find out city X by using this algorithm. And the second part of this project is to provide support for check any given graph is bipartite or not. If the graph is bipartite then function returns the node along with two colors 0 and 1 which represents two different sets. If graph is not bipartite then algorithm returns an empty set. The algorithms are going to be taken from the Boost Graph Library (BGL). -
Lengauer Tarjan dominator tree
In a directed graph G = ( V , E , r ) where V is set of vertices, E is set of edges and r is starting vertex, a vertex v is dominated by vertex w if every possible path from starting vertex r to the vertex v goes through the vertex w . Vertex w is the immediate dominator of v, denoted as idom(v) = w if w dominates v and other dominators of v dominate w. By making every idom of each vertex as its parent, the dominator tree can be built.- Boost implemented the Lengauer-Tarjan algorithm whose time complexity is O ((V + E )log(V + E )).
- Lengauer-Tarjan algorithm utilizes two techniques:
- Find a semi dominator.
- Path Compression.
-
Bipartite graph
A bipartite graph is a graph with two sets of vertices which are connected to each other,but not within themselves. A bipartite graph G = (U, V, E), consists of a set of vertices U a disjoint set of vertices V and a set of edges E ⊂ U × V. A bipartite graph is possible if the graph coloring is possible using two colors such that vertices in a set are colored with the same color.- The time complexity for the algorithm is O (V + E).
-
Two graphs common spanning trees
(This idea was dropped due to bug in boost algorithm. Instead of that implemented Bipartite graph algorithm with the permission of mentors.)
A spanning tree is a subset of Graph G, which has all the vertices covered with the minimum possible number of edges. Hence, a spanning tree does not have cycles and it cannot be disconnected.Now, imagine there are two graphs that are represented as lists of edges. A common spanning tree is a set of indices that identifies a spanning tree for both the first and for the second of the two graphs. Both graphs can have multiple common spanning trees.
- The algorithm, based on an academic article of Mint , Read and Tarjan , called MRT, is an efficient algorithm for the common spanning tree problem.
pgRouting currently does not have these algorithms implemented.
- Current state of pgRouting doesn’t support any algorithm for finding a dominator tree. A single standard function does not exist .
- pgRouting has the algorithms to find the minimum cost spanning tree using Prim’s and Kruskal’s algorithm but doesn’t support any algorithm for Two Graphs Common Spanning Trees.
- And also a single standard function does not exist to check whether any graph is Bi-partite or not.
-
Implementation of Lengauer tarjan dominator tree for pgRouting : I need to construct a function
pgr_lengauerTarjanDominatorTree()
and it will return the dominator tree where parents are each child's immediate dominator. Create all helper functions and header files. Create documentation and tests. Prepare a report for Evaluation. And finalize all documentation and tests.
2. Implementation of Bipartite graph for pgRouting : I need to construct a function pgr_bipartite()
and it will return a vector which contains color of each node such that the color of two adjacent vertices are not same,if the graph is bipartite. Else it will return an empty set which shows the graph is not bipartite. Create all helper functions and header files. Create documentation and tests. Prepare a report for Evaluation. And finalize all documentation and tests.
Detailed Proposal in PDF format
Title | GitHub Handle | Name |
---|---|---|
1st Mentor | cvvergara | Vicky Vergara |
2nd Mentor | AasheeshT | Aasheesh Tiwari |
Student Developer | prakashupes | Prakash Tiwari |
- Initial research and analysis of algorithms and requirements.
- Set up the development environment.
- Interact with mentors, introduce myself to the community, and actively get involved in the discussion.
- Get familiar with pgRouting’s development style. Understand expected coding, documentation, and testing standards set by pgRouting.
- Set up a wiki page to keep track of weekly progress.
- Develop a better understanding of PostgreSQL, PostGIS, Pl/pgSQL, and how they interact with pgRouting.
- Learn to create unit tests using pgTap.
- Implement simple dummy functions to better understand pgRouting.
(Note: After discussing with mentors I have planned to complete the work of the official coding period in the community bonding period and get 2-weeks buffer for the end semester examination. The tentative week for the examination is Week-6 and Week-7)
- Developing
pgr_lengauerTarjanDominatorTree()
. - Create a basic skeleton for C, C++, SQL code, and for documentation and tests.
- Read data from PostgreSQL.
- Transform data to C++ containers suitable for using with Boost.
- Create the necessary class wrappers for the Boost function.
- Process the data with the Boost function.
- Transform results to C containers suitable for passing to PostgreSQL.
- Prepare user documentation.
- Create suitable queries using the sample data of the pgRouting documentation.
- Create the first term report.
- Create the necessary class wrappers for the Boost function.
- Process the data with the Boost function.
- Transform results to C containers suitable for passing to PostgreSQL.
- Prepare user documentation.
- Create suitable queries using the sample data of the pgRouting documentation.
- Create the first term report.
- Work on feedback provided from the first evaluation.
- Developing
pgr_bipartite()
starts. - Create a basic skeleton for C, C++, SQL code, and for documentation and tests.
- Read data from PostgreSQL.
- Transform data to C++ containers suitable for using with Boost.
- Create the necessary class wrappers for the Boost function.
- Process the data with the Boost function.
- Transform results to C containers suitable for passing to PostgreSQL.
- Prepare user documentation.
- Create suitable queries using the sample data of the pgRouting documentation.
- Create the first term report.
- Work on feedback provided from the second evaluation.
- Tests for function
pgr_lengauerTarjanDominatorTree()
.- create pgTap tests to check no server crash.
- create pgTap unit tests for expected results for different small graphs:
- one vertex graph
- one edge graph
- two edge graph
- cycle graph with 3 edges
- Tests for function
pgr_bipartite()
.- create pgTap tests to check no server crash.
- create pgTap unit tests for expected results for different small graphs:
- one vertex graph
- one edge graph
- two edge graph
- cycle graph with 3 edges
- Integration to the develop branch in the main repository.
- Preparation of final report.
Pull Request | Description | Date | Status |
---|---|---|---|
#35 | Rebase to 3.0.0 and some basic dummy function | 20th May | Merged |
#37 | [Official coding week 0] | 25th May-June 1st | Merged |
#40 | Coding of week [1] | June 1st-June 7th | Merged |
#44 | Coding of week [2] | June 7th-June 14th | Merged |
#48 | Coding of week [3] | June 14th-Jun 21st | Merged |
#51 | Coding of week[4] | June 21-June 28th | Merged |
#55 | Coding of week[5] | June 29- Jul 6th | Merged |
#60 | Coding of week[6] | Jul 7th- Jul 13th | Merged |
#64 | Coding of week[7] | Jul 13th-Jul 19th | Merged |
#80 | Coding of week[8] | Jul 19th-Jul 26th | Merged |
#112 | Coding of week[9] | Jul 27th- Aug 2nd | Merged |
#130 | Coding of week[10] | Aug 3rd- Aug 10th | Merged |
#134 | Coding of week[11] | Aug 10th- Aug 16th | Merged |
#135 | Coding of week[12] | Aug 16th- Aug 23rd | Merged |
#1608 | Final pull request | August 23rd | Merged |
#1609 | removing links from linkcheck_ignore | August 24th | Merged |
Hello everyone,
With GSoC coming to an end, I present to you the final report of my work over the past three months! It has been a great experience and great learning. This report is in accordance with the guidelines set by Google and OSGeo GSoC Admins.
Title - Implement Lengauer Tarjan Dominator Tree and Bipartite algorithm for pgRouting
Organisation - pgRouting under OSGeo
Abstract - This GSoC project dealt with implementing two new graph algorithms in pgRouting. The algorithms are described as follows:
-
Boost::lengauer_tarjan_dominator_tree The algorithm calculates the immediate dominator (The immediate dominator or idom of a node n is the unique node that strictly dominates n but does not strictly dominate any other node that strictly dominates n) of each vertex called idom, once idom of each vertex is calculated then by making every idom of each vertex as its parent, the dominator tree can be built.This algorithm is only applicable for directed graphs. It has a linear time complexity of O((V+E)log(V+E)).
-
Boost::is_bipartite A bipartite graph is a graph with two sets of vertices which are connected to each other, but not within themselves. A bipartite graph is possible if the graph coloring is possible using two colors such that vertices in a set are colored with the same color. This algorithm is only applicable for undirected graphs. It has a linear time complexity of O(|V| + |E|).
State of the Project Before GSoC - pgRouting currently does not have these algorithms implemented. Current state of pgRouting doesn’t support any algorithm for finding a dominator tree. And also a single standard function does not exist to check whether any graph is Bi-partite or not.
The addition that my project brought to pgRouting: The deliverables are code, documentation, documentation tests, and the pgTAP tests of the two functions.
-
Lengauer Tarjan Dominator Tree (pgr_lengauerTarjanDominatorTree) can be used to find the dominator tree of any graph or immediate dominator of any vertex. It returns the immediate dominator of each vertex. This function is applicable only for directed graphs.
-
Bipartite (pgr_bipartite) can be used to check whether a given graph is bipartite or not. If the graph is bipartite then the function returns the vertex and color. If the graph is not bipartite then the function returns an empty row. This function is applicable only for undirected graphs.
Potential Future Work
-
Edge Coloring algorithm can be implemented, which assigns the color to the edges of a graph, unlike the Bipartite graph algorithm, that assigns the colors to the vortices if the graph is bipartite.
-
The third function pgr_twoGraphsCommonSpanningTrees, can't be implemented because there was some problem in the boost algorithm itself. The algorithm was not returning the output as expected. In future if it will be fixed in boost algorithm then it can also be implemented in the pgRouting.
Links
-
Code Documentation
-
Lengauer Tarjan Dominator Tree (pgr_lengauerTarjanDominatorTree )- https://docs.pgrouting.org/3.2/en/pgr_lengauerTarjanDominatorTree.html
-
Bipartite (pgr_bipartite) - https://docs.pgrouting.org/3.2/en/pgr_bipartite.html
-
-
Tags
-
Pull Requests
-
Final pull request (#1608).
-
Pull Request for removing links from linkcheck_ignore (#1609).
-
Intermediate pull requests - https://github.com/pgRouting/GSoC-pgRouting/pulls?q=is%3Apr+is%3Aclosed+author%3Aprakashupes
-
-
Project Documentation (Wiki Page) https://github.com/pgRouting/pgrouting/wiki/GSoC-2020-Lengauer-Tarjan-dominator-tree-and-Bipartite
-
Images
- pgr_lengauerTarjanDominatorTree (https://drive.google.com/file/d/1_3yn0PmF_OeBcw2yTfv9GP-sk9vdAiLA/view?usp=drivesdk)
- pgr_bipartie (https://drive.google.com/file/d/1YHxv8yMkNYuogd2sgnJeJtOAK0f1Uhqd/view?usp=drivesdk) Media
Slide Demonstration https://docs.google.com/presentation/d/1uvQc4GUUYr1pzRH4KfwOg5YoRZ6TFC8bMQw81QUjnfA/edit?usp=drivesdk
I am so glad to have such an interesting and exciting adventure with all of you. Thanks for all your support! I will be happy if my code proves beneficial to the community.
Thanks and Regards,
Prakash Tiwari
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed. Completed work for the final submission of code and made the changes suggested by the mentor.
- Completed the user documentation for pgr_bipartite and pgr_lengaueeTarjanDominatorTree with a lot of suggations and changes these can be reviewed in week 12 PR.
- Rebased my working branch before making PR to pgrouting/develop.
- Created a pull request to pgrouting-develop from my working branch gsoc-prakash for final integration of the code.
- Made the presentation for the two functions which I implemented during the program.
- Created a tag named 2020-prakashupes-lengauerTarjanDominatorTree-bipartite.
What do I plan on doing next week?
- Merge the final pull request which is created to the pgrouting/develop branch.
- Submit the final report of GSoC work.
- Complete the mentor evaluation.
Blocking Issues
It is not blocking of pgRouting. But I found the problem in boost::two_graph_common_spanning_trees it was not returning the output as they were expected, So I mailed the issue to the boost mailing list regarding this. As they will response I will continue with my rest of the coding part. Till then I started working in my next function (After discussing with mentors)that is bipartite it was an additional idea.
Meetings attended in this week
No meeting was scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed. [2]
- Fixed the rebase from the main repository.
- Started work on the final submission of work.
- Prepare user documentation for pgr_bipartite with an additional example of odd length cycle.
- Created more pgTap tests for pgr_bipartite that includes tests for odd length cycle and even length cycle.
- Modified docquaries and output column for bipartite.
What do I plan on doing next week?
- Refine and review the code of implemented algorithms.Add more pgTap tests of pgr_bipartite and pgr_lengauerTarjanDominatorTree Prepare user documentation with additional example of pgr_bipartite and pgr_lengauerTarjanDominatorTree.
- Work on suggestions given by mentors.
Blocking Issues
It is not blocking of pgRouting. But I found the problem in boost::two_graph_common_spanning_trees it was not returning the output as they were expected, So I mailed the issue to the boost mailing list regarding this. As they will response I will continue with my rest of the coding part. Till then I started working in my next function (After discussing with mentors)that is bipartite it was an additional idea.
Meetings attended in this week
An individual meeting was scheduled for rebasing the branch.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Fixed the rebase from the main repository.
- Started work on the final submission of work.
- Prepare user documentation with an additional example of pgr_bipartite.
- Renamed the directory of the function Lengauer Tarjan dominator Tree from LTDTRee to lengauerTarjanDominatorTree.
- Fixed the coding style according to code checker. What do I plan on doing next week?
- Refine and review the code of implemented algorithms.
- Add more pgTap tests of pgr_bipartite and pgr_lengauerTarjanDominatorTree Prepare user documentation with additional example of pgr_bipartite and pgr_lengauerTarjanDominatorTree.
- Work on suggestions given by mentors.
Blocking Issues
It is not blocking of pgRouting. But I found the problem in boost::two_graph_common_spanning_trees it was not returning the output as they were expected, So I mailed the issue to the boost mailing list regarding this. As they will response I will continue with my rest of the coding part. Till then I started working in my next function (After discussing with mentors)that is bipartite it was an additional idea.
Meetings attended in this week
No meeting was scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Completed the GSoC second evaluation.
- Complete the pgTap tests of
pgr_bipartite
which includes- no_crash_test-bipartite.sql
- bipartite-inner-query.sql
- bipartite-types-check.sql
- bipartite-edges-sql.sql
- Prepare user documentation with additional example of
pgr_bipartite
. - Renamed files of pgTap tests according to mentor suggationa.
- Refined the code of c++ files.
- Rebase my working branch
gsoc-prakash
withupstream/develop
where upstream is remote of pgRouting main repository. - Merged the pull request of this week.
What do I plan on doing next week?
-
Refine and review the code of implemented algorithms.
-
Add more pgTap tests of
pgr_bipartite
andpgr_lengauerTarjanDominatorTree
-
Prepare user documentation with additional example of
pgr_bipartite
andpgr_lengauerTarjanDominatorTree
.
Blocking Issues
It is not a blocking of pgRouting. But I found the problem in boost::two_graph_common_spanning_trees
it was not returning the output as they were expected, So I mailed the issue to the boost mailing list regarding this. As they will response I will continue with my rest of coding part. Till then I started working in my next function (After discussing with mentors)that is bipartite
it was an additional idea.
Meetings attended in this week
No meeting was scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Found the problem in
boost::two_graph_common_spanning_trees
it was not returning the output as they were expected, So mailed the issue to the boost mailing list regarding this. - Created an issue in pgRouting to discuss the signature of new function that is
pgr_bipartite
. - Improved the c++ containers of
pgr_lengauerTarjanDominatorTree
by removing manual mapping and made suitable containers that can work withBase Graph
. - Rebase my working branch
gsoc-prakash
withupstream/develop
where upstream is remote of pgRouting main repository. - Started coding of new function
boost::is_bipartite()
in thepgr_bipartite
for that made following files:
- SQL files (the main signature)
- bipartite.sql
- _bipartite.sql
- C/C++ Headers and files:
- bipartite.c
- bipartite_driver.cpp
- bipartite_driver.h
- pgr_bipartite_driver.hpp
- pgr_bipartite_rt.h
- pgTap Test files:
- no_crash_test-bipartite.sql
- bipartite-inner-query.sql
- bipartite-types-check.sql
- bipartite-edges-sql.sql
- Doc and Docqueries:
- pgr_bipartite.rst
- doc-bipartite.result
- doc-bipartite.test.sql
- test.bipartite
- Started and completed the coding of bipartite.sql and _bipartite.sql with the signature of
pgr_bipartite(edge_sql)
which returnsset of (vid,color)
. - Started and completed the coding of
bipartite.c
file by making and including suitable headers and functions. - Started and completed the coding of
bipartite_driver.cpp
file. Which converted the data_edge into undirected graph and also it includes all the necessary exceptions and headers. - Started and completed the coding of
pgr_bipartite_driver.hpp
. In which created proper c++ containers that can work with boost and base graph. Also called theboost::is_bipartite()
algorithm. And converted the result into a vector. - Merged the pull request of this week.
What do I plan on doing next week?
- Complete the GSoC evaluation.
- Complete the pgTap tests of
pgr_bipartite
which includes- no_crash_test-bipartite.sql
- bipartite-inner-query.sql
- bipartite-types-check.sql
- bipartite-edges-sql.sql
- Prepare user documentation with additional example of
pgr_bipartite
.
Blocking Issues
It is not a blocking of pgRouting. But I found the problem in boost::two_graph_common_spanning_trees
it was not returning the output as they were expected, So I mailed the issue to the boost mailing list regarding this. As they will response I will continue with my rest of coding part. Till then I started working in my next function (After discussing with mentors)that is bipartite
it was an additional idea.
Meetings attended in this week
No meeting was scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Completed the user documentation of
lengauerTarjanDominatorTree
. - Fix the errors of Lengauer Tarjan dominator Tree docqueries.
- Changed the signature of Two Graphs Common Spanning Trees from
pgr_mrt
topgr_two_graphs_common_spanning_trees
and changed all the files related to this that aremrt.c
andpgrouting--3.0.0.sig
. - Made the c++ containers and added
boost::two_graphs_common_spanning_trees
algorithm for undirected graph.But till now it gives a lot of errors. - Added docqueries files inside the
doc/spanningTree
folder containingdoc-mrt.test.sql
anddoc-mrt.result
. - Completed the user documentation of
pgr_two_graphs_common_spanning_trees
up till work.
What do I plan on doing next week?
- Complete coding of c++ containers and add
boost::lengauer_tarjan_dominator_tree
for both undirected graph and directed graph and fix all errors. - Write some tests for
no_crash_test-mrt.sql
andmrt-edge-cases.sql
- Prepare user documentation for
two graph common spanning tree
.
Meetings attended in this week
No meetings attended.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Completed the coding of SQL functions that are
pgr_mrt.sql
and_pgr_mrt.sql
. - Fix the signature of Lengauer Tarjan dominator Tree. (Rename from LTDTree to
lengauer_tarjan_dominator_tree
).- Changed the name of the function in
LTDTree.c
file to solve the errors. - Changed the name of functions in
pgTap tests
to proper testing. - Changed the signature of function in
pgrouting--3.0.0.sig
file.
- Changed the name of the function in
- Able to read data from postgreSql for
pgr_mrt()
. - Made the c++ containers and added
boost::lengauer_tarjan_dominator_tree
algorithm for undirected graph.But till now it returns 0 rows. - Added pgTap tests files with zero tests in
spanningTree/mrt
directory that contains:
mrt-edge-cases.sql
mrt-innerQuery.sql
no_crash_test-mrt.sql
pgr_mrt_types_check.sql
What do I plan on doing next week?
- Complete coding of c++ containers and add
boost::lengauer_tarjan_dominator_tree
for both undirected graph and directed graph. - Write some tests for
no_crash_test-mrt.sql
andmrt-edge-cases.sql
- Prepare user documentation for
two graph common spanning tree
.
Meetings attended in this week
No meeting was scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Completed the mentor evaluation in Google Summer Of Code official website.
- Read and understand the requirements of two graph common spanning trees.
- Started coding my SQL function
pgr_mrt
and_pgr_mrt
. - Added all the required files for the implementation of
pgr_mrt
and_pgr_mrt
function ie:
-
sql/mrt/
- CMakeLists.txt, _mrt.sql, mrt.sql - Added the directory in
configuration.conf
and Added the function signatures insql/sigs/pgrouting--3.0.0.sig
- Created all files of c,c++,headers, The files are:
- SQL files:
- mrt.sql
- _mrt.sql
- C/C++ Headers and files:
- mrt.c
- mrt_driver.cpp
- mrt_driver.h
- pgr_mrt_driver.hpp
What do I plan on doing next week?
- Complete the coding of sql functions.
- Read data from postgreSql.
- Transform data into c++ containers suitable for using Boost C++.
Meetings attended in this week
These meetings were a part of the Bolsena Online Code Sprint 2020:
June 30th: Discussed and presented all the work I had done so far, for the GSoC '20 program, with the mentor, who reviewed the work and suggested some modifications.
July 2nd: Attended and reviewed the workshop of the MobilityDB team with pgRouting and PostGIS.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Fixed the server got crashed when user entered any query.
- Created function
is_valid_root
to handle negative vertex and vertex that are not present in the graph. Also raised exception inLTDTree.sql
file. - Written
ltdtree-edges-cases
pgTap tests. Which includes:- 0 edge 0 vertex tests
- Root not present tests
- Negative root tests
- Id constrained tests
- Add docqueries for the documentation using the pgRouting Sample Data.
- Completed user documentaion with suitable example.
What do I plan on doing next week?
- Create more pgTap tests.
- Add more suitable example in documentation.
- Complete first term evaluation and work on feedback provided from the mentors.
- Open an issue to discuss about the signature of next function
Two Graph Common Spannig Trees
. - Add initial
sql and c\c++
files to be required to develop the function.
Am I blocked on anything?
No blocking issues.
Meetings attended in this week
No meetings are scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Created the necessary containers for boost functions in
pgr_ltdtree_driver.hpp
file. And return the results vector which is type ofpgr_ltdtree_rt
and containsvid
(vertex id) andidom
(immediate dominator) - Created pgTap test which includes :
- no_crash_test-ltdtree.sql
- ltdtree-inner-query.sql
- ltdtree-edges-cases.sql
- Competed user documentation of up till work.
What do I plan on doing next week?
- I have completed the boost work but server got crashed when user entered any query so fix the issue in next week.
- Create more pgTap tests.
- Add docqueries for the documentation using the pgRouting Sample Data.
Am I blocked on anything?
No blocking issues.
Meetings attended in this week
No meetings are scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Start coding of
pgr_ltdtree_driver.hpp
file. In which function template function namepgr_ltdree
is defined which will return the vector of result which will further proceed inltdtree_driver.cpp
file. - Understand the parameters of
boost::lengauer_tarjan_dominator_tree
. And I planned to used the boost version in which it takes three parameters:- const graph: The graph object on which the algorithm will be applied.
- vertex_descriptor entry : The dominator tree will be rooted at this vertex.
- DomTreePredMap: The predecessor map where parents are each children's immediate dominator.
- Extracted vertices of
pgr_base_graph
to make use in boost algorithm. - Completed documentation of uptil work.
What do I plan on doing next week?
- Complete the requirements of
boost::lengauer_tarjan_dominator_tree
and make the The predecessor map. - Create basic tests and complete the user documentation.
Am I blocked on anything?
No blocking issues.
Meetings attended in this week
No meetings are scheduled.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Completed the code of sql function and make it capable to read data from postgres.
- Transform the data of sql function into c++ container.
- Created the structure name
pgr_ltdtree_rt
of the result tuples to store the result and transform back into sql. - Completed the coding of
ltdtree_driver.h
file in whichdo_pgr_ltdtree
function is defined. - Created function template and exceptions handling inside the
ltdtree_driver.cpp
file.
What do I plan on doing next week?
- Start coding of
pgr_ltdtree_driver.hpp
file. - Till now I haven't started the coding for
boost::lengauer_tarjan_dominator_tree
so in this week make suitable c++ containers to provide parameter for boost algorithm.
Am I blocked on anything?
No blocking issues.
Meetings attended in this week
June 2nd: Discussions regarding contraction algorithms and techniques.
June 5th: More Discussion regarding contraction, particularly area contraction. Also, learned how to use the run.sh file effectively for building and testing the files locally.
What did I get done this week?
- Created the pull request in which my weekly progress can be reviewed.
- Read and understand the coding style and required files of pgRouting library.
- Started coding my SQL function
pgr_LTDTree
and_pgr_LTDTree
. - Added all the required files for the implementation of
pgr_LTDTree
and_pgr_LTDTree
function ie:
-
sql/ltdtree/
- CMakeLists.txt, _LTDTree.sql, LTDTree.sql - Added the directory in
configuration.conf
and Added the function signatures insql/sigs/pgrouting--3.0.0.sig
- Created all files of c,c++,headers, doc,docqueries,pgTap. The files are:
- C/C++ Headers and files:
- ltdtree.c
- ltdtree_driver.cpp
- ltdtree_driver.h
- pgr_ltdtree_driver.hpp
- pgTap Test files:
- no_crash_test-ltdtree.sql
- ltdtree-inner-query.sql
- ltdtree-types-check.sql
- ltdtree-edges-sql.sql
- Doc and Docqueries:
- pgr_ltdtree.rst
- doc-ltdtree.result
- doc-ltdtree.test.sql
- test.config
What do I plan on doing next week?
- Complete the coding of sql functions.
- Read data from postgreSql.
- Transform data into c++ containers suitable for using Boost C++.
Am I blocked on anything?
No blocking issues.
Meetings attended in this week
May 26th: More discussions regarding the functionality request of the pgr_dijkstra with the combinations SQL.
May 28th: Discussion regarding Contraction Techniques in pgRouting.
- Initial research and analysis of algorithms and requirements.
- Set up the development environment.
- Interact with mentors, introduce myself to the community, and actively get involved in the discussion.
- Set up a wiki page to keep track of weekly progress.
- Add a wiki link to OSGeo's accepted student's wiki page.
- Introduce myself and my project on OSGeo's SOC mailing list.
- Get familiar with pgRouting’s development style. Understand expected coding, documentation, and testing standards set by pgRouting.
- Develop a better understanding of PostgreSQL, PostGIS, Pl/pgSQL, and how they interact with pgRouting.
- Learn to create unit tests using pgTap.
- Implement simple dummy functions to better understand pgRouting.
[1]. Thomas Lengauer and Robert Endre Tarjan , A fast algorithm for finding dominators flowgraph ACM Transactions on Programming Language and Systems, 1(1):121-141,1979.
[2]. Lengauer Tarjan Dominator Tree , Boost C++ Libraries Official Documentation.
[3]. Schach, S. R. (1983), Efficient algorithm for common spanning tree problem,Electronics Letters, 19(9), 346.
[4]. Boost: is_bipartite algorithm documentation
[5]. Wikipedia: bipartite graph
[6]. Sample Data network.