{"id":17182239,"url":"https://github.com/mooophy/path-planning","last_synced_at":"2025-04-13T16:21:47.317Z","repository":{"id":48185156,"uuid":"41897300","full_name":"Mooophy/Path-Planning","owner":"Mooophy","description":"Implementation for A* with stricted visited list, Lifelong Planning A* and D* Lite final version","archived":false,"fork":false,"pushed_at":"2015-10-27T13:03:03.000Z","size":4709,"stargazers_count":90,"open_issues_count":5,"forks_count":34,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-27T07:11:50.669Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mooophy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-04T04:14:26.000Z","updated_at":"2025-03-10T08:40:54.000Z","dependencies_parsed_at":"2022-08-31T00:41:38.344Z","dependency_job_id":null,"html_url":"https://github.com/Mooophy/Path-Planning","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooophy%2FPath-Planning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooophy%2FPath-Planning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooophy%2FPath-Planning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooophy%2FPath-Planning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mooophy","download_url":"https://codeload.github.com/Mooophy/Path-Planning/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248741846,"owners_count":21154386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T00:36:25.190Z","updated_at":"2025-04-13T16:21:47.294Z","avatar_url":"https://github.com/Mooophy.png","language":"C++","readme":"# Path-Planning\nThis repo provides implementation for three Path-Planning Algorithms: A* with strict visited list, Lifelong Planning A* and D* Lite final version\nA* with strict visited list\n------------------\n\n#### Data structure:\n ```java\n q                          priority queue\n max_q_size                 unsigned int\n expansions                 hash table\n final_path                 string\n run_time                   long long\n is_found                   bool\n ```\n \n#### Pseudocode:\n```ruby\nq.push start\nwhile q is not empty and q.top != goal\n  curr = q.pop\n  if curr has not been visited\n    expansions.insert curr.state\n    foreach neighbour of curr\n      if neighbour has not been visited\n        if q does not contain neighbour\n          q.push neighbour\n        else\n          update q with neighbour\nif q.empty\n  final_path = \"\"\nelse\n  final_path = q.top.path\n```\n\n\n\n Lifelong Planning A*\n------------------\n\n#### Data structure:\n```java\nmatrix                     2D dynamic array\nstart, goal                tuple\nhfunc                      function object\nq                          priority queue\nmax_q_size                 unsigned int\nexpansions                 hash table\npath                       string\nrun_time                   long long\n```\n\n#### Pseudocode:\n```ruby\ninitialize\n  q.reset\n  at(start).r = 0\n  q.push start\n\nupdate_vertex(s)\n  if s.cell != start\n    minimum = huge\n    foreach neighbour of s.cell\n      minimum = min(minimum, (at(neighbour).g + cost()))\n    s.r = minimum\n  q.remove s.cell\n  if s.g != s.r \n    q.push s.cell\n  \nupdate_neighbours_of(cell)\n  foreach neighbour of cell\n    if !at(neighbour).bad\n      update_vertex(at(neighbour));\n      \ncompute_shortest_path\n  while (!q.empty  and key(at(q.top)) \u003c key(at(goal)) or at(goal).r != at(goal).g\n    c = q.pop\n    if at(c).g \u003e at(c).r\n      at(c).g = at(c).r\n    else\n      at(c).g = huge \n      update_vertex at c\n    update_neighbours_of c\n    max_q_size = max(max_q_size, q.size())\n    expansions.insert c\n  path = build_path\n  \nplan\n  initialize\n  compute_shortest_path\n  \nreplan(cells_to_toggle)\n  foreach cell of cells_to_toggle\n    at(cell).bad = !at(cell).bad\n    if !at(cell).bad\n      update_vertex at cell\n    else\n      at(cell).g = at(cell).r = huge\n      update_neighbours_of cell\n  compute_shortest_path\n```\n\n D* Lite final version\n------------------\n#### Data structure:\n```java\nmatrix                     2D dynamic array\nstart, goal                tuple\nhfunc                      function object\nkm                         int\nq                          priority queue\nold_keys                   hash table\nmax_q_size                 unsigned int\nexpansions                 hash table\npath                       string\nrun_time                   long long\n```\n#### Pseudocode:\n```ruby\ninitialize\n  q.reset\n  km = at(goal).r = 0\n  q.push goal\n  old_keys.insert key(goal, { at(goal), km } )\n  \nupdate_vertex(s)\n  if s.cell != goal\n    minimum = huge\n    foreach neighbour of s.cell\n      minimum = min(minimum, (at(neighbour).g + cost()))\n      s.r = minimum\n  q.remove s.cell\n  if s.g != s.)\n    q.push s.cell \n    old_keys.update_with tuple({ s.cell, Key{ s, km })\n    \nupdate_neighbours_of(cell)\n  foreach neighbour of cell\n    if !at(neighbour).bad\n      update_vertex(at(neighbour))\n      \ncompute_shortest_path\n  while !q.empty() \u0026\u0026 ((key(at(q.top)) \u003c key(at(start)) || at(start).r != at(start).g))\n    c = q.pop\n    if old_keys.at(c) \u003c key(at(c), km)\n      q.push c\n      old_keys.update_with tuple( c, Key{ at(c), km })\n    else if at(c).g \u003e at(c).r\n      at(c).g = at(c).r\n      update_neighbours_of c\n    else\n      at(c).g = huge\n      update_vertex at c\n      update_neighbours_of c\n    max_q_size = max(max_q_size, q.size)\n    expansions.insert c\n    \ninitial_plan\n  initialize\n  compute_shortest_path\n  \nplan(changes, move_to, use_path)\n  initial_plan\n  last = start\n  curr = start\n  i = 0\n  while curr != goal\n    curr = min(neighbours of curr)\n    move_to curr\n    if i != changes.length\n      km += hfunc(this_loop.last, this_loop.curr)\n      last = curr\n      foreach cell of changes[i]\n        at(cell).bad = !at(cell).bad\n        if !at(cell).bad\n          update_vertex at cell\n        else\n          at(cell).g = at(cell).r = huge\n        update_neighbours_of cell\n      ++i\n      compute_shortest_path\n    use_path build_path(this_loop.curr, goal)\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooophy%2Fpath-planning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmooophy%2Fpath-planning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooophy%2Fpath-planning/lists"}