Focused crawls are collections of frequently-updated webcrawl data from narrow (as opposed to broad or wide) web crawls, often focused on a single domain or subdomain.
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
main creates a grid of a given size n, with any point set as an obstacle with a probability of 1/n. It then runs all the algorithms in the repository on the given grid.
To run each algorithm independently, set BUILD_INDIVIDUAL to ON (Executables created: dijkstra, a_star, etc). If you want to run all of them on the same grid, set BUILD_INDIVIDUAL to OFF (Executable created: main).
To run tests, set BUILD_INDIVIDUAL to OFF and RUN_TESTS to ON.
Set CHECK_COVERAGE to check code coverage.
Set DYNAMIC_ALGOS to build the dynamic runs of LPA* and D* Lite (No tests check the dynamic runs of these algorithms in the test section; the code implementing the dynamic runs of algorithms has been excluded from the code coverage statistics above)
Set CUSTOM_DEBUG_HELPER_FUNCION to build functions that are used primarily for debugging (excluded from code coverage)
Notes on test:
Unit test framework set up to set algorithms under different grids. This section uses Google Test.
CMake option RUN_TESTS allows building tests when set when BUILD_INDIVIDUAL is set OFF.
The tests do not cover live runs of the D* Lite and LPAStar algorithm, reducing the code coverage value.
Given the random nature of RRT, no set has been set up for it yet.
Files named grid#.cpp are specific grids to check for correctness under certain conditions. gridr.cpp generates a random grid and checks whether Dijkstra, A* and D* Lite (without new obstacles) generate the same cost from start to end.
Due to the nature of Ant Colony Optimization and accounting for the hyper parameters, the tests are run with a 20% margin above the optimal solution. Similarly for Genetic Algorithm.
The test function for genetic algorithm has been modified to ensure correct functioning.
Notes on implementations:
RRT stops as soon as goal is found. It is connects new points to the nearest point, not accounting for total cost to reach that point. In contrast RRT* chooses to connect to a new node to the node that allows the new node to have the minimum cost. RRT* also rewires the preexisting nodes to the new node if that path allows for a lower cost for the preexisting node.
Acceptable motions can be modified in the GetMotion function in utils.cpp.
A* and D* Lite use Manhattan distance (L1) as their heuristic (change to L2 if adding diagonal moves to the GetMotion function). D* Lite also uses the same in its C function.
D* Lite can be run live with random obstacle creation using the RunDStarLite function. For the live run of D* Lite, obstacles are detected on the current path of the bot with a probability of 1/n, n being the number of rows/columns in the grid. D* Lite is implemented based on Sven Koenig's & Maxim Likhachev's paper.
To specify your own grid, set n to number of rows, created the 2D vector, setting 1 for obstacles and 0 elsewhere, and comment out the MakeGrid function.
The LPA* algorithm is implemented to run max_iter_ number of times with default value n. Obstacles are created on the current path of the bot with a probability of 1/n, n being the number of rows/columns in the grid, at a random point along the path. It can be run with max_iter_ set to 0 if continuous replanning is to be disabled.
The genetic algorithm has an option shorten_chromosome, which allows the shortening of the chromosome (path length) based on the length of the path found that reaches the goal. This reduces computation time and pushes the solution towards the shortest path.
TODOs:
Alterations for moving node variables into private namespace.
Prune merged branches.
Use hash to check if node in list for D* Lite (can be applied to others if required)
Add test of probabilistic completeness for RRT.
Formalize pseudocode and add references for ACO.
Add documentation for jump point search.
Refactor
Consider:
Adding namespace to each header file.
Inheriting node class into each file that requires a modified node (such as A* with heuristic cost, etc).
About
This repository contains path planning algorithms in C++ for a grid based search.
You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.
We use optional third-party analytics cookies to understand how you use GitHub.com so we can build better products.
Learn more.
We use optional third-party analytics cookies to understand how you use GitHub.com so we can build better products.
You can always update your selection by clicking Cookie Preferences at the bottom of the page.
For more information, see our Privacy Statement.
Essential cookies
We use essential cookies to perform essential website functions, e.g. they're used to log you in.
Learn more
Always active
Analytics cookies
We use analytics cookies to understand how you use our websites so we can make them better, e.g. they're used to gather information about the pages you visit and how many clicks you need to accomplish a task.
Learn more