<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dijkstra Heuristic | Henry Kou</title><link>https://kenryhou2.github.io/tags/dijkstra-heuristic/</link><atom:link href="https://kenryhou2.github.io/tags/dijkstra-heuristic/index.xml" rel="self" type="application/rss+xml"/><description>Dijkstra Heuristic</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://kenryhou2.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Dijkstra Heuristic</title><link>https://kenryhou2.github.io/tags/dijkstra-heuristic/</link></image><item><title>A* Pursuit of Dynamic Target</title><link>https://kenryhou2.github.io/projects/a-star-dynamic-target/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://kenryhou2.github.io/projects/a-star-dynamic-target/</guid><description>&lt;p&gt;I built this planner to answer a simple pursuit question: if the target is moving on a cost map and I know its future trajectory, where should the robot move next? Instead of planning only in &lt;code&gt;(x, y)&lt;/code&gt;, I lift the search into &lt;code&gt;(x, y, t)&lt;/code&gt; so an interception is defined as both agents occupying the same cell at the same time.&lt;/p&gt;
&lt;p&gt;The core method is weighted A* over 8-connected grid motion plus a wait action. The edge cost comes from the destination cell, cells above the collision threshold are treated as blocked, and the planner returns only the first action from the best path. That receding-horizon structure matters because the useful plan changes as the target advances.&lt;/p&gt;
&lt;p&gt;The interesting engineering detail is the heuristic. I cache a multi-source Dijkstra table from feasible near-future target cells, then combine that with a static meet-point estimate chosen by travel cost plus wait time. The implementation also exposes &lt;code&gt;eps&lt;/code&gt;, &lt;code&gt;time_budget_ms&lt;/code&gt;, and &lt;code&gt;heu_band&lt;/code&gt; so I can trade optimality against response time, and it uses deterministic priority-queue tie breaking on &lt;code&gt;f&lt;/code&gt;, &lt;code&gt;h&lt;/code&gt;, &lt;code&gt;g&lt;/code&gt;, and packed state keys. The repo includes map files, recorded robot trajectories such as &lt;code&gt;rtraj_map*.txt&lt;/code&gt;, and a Matplotlib visualizer for replaying the pursuit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources I leaned on:&lt;/strong&gt; Hart, Nilsson, and Raphael&amp;rsquo;s 1968 A* paper for best-first graph search; Pearl&amp;rsquo;s heuristic-search framing; and Koenig and Likhachev&amp;rsquo;s D* Lite work as background for why replanning problems often need incremental or receding-horizon structure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt; weighted A*, time-expanded A*, dynamic target pursuit, receding-horizon replanning, 8-connected grid search, wait action, collision threshold, cost map, multi-source Dijkstra, static meet point, trajectory visualization, C++, CMake, Python, Matplotlib.&lt;/p&gt;</description></item></channel></rss>