Module jumper.core.heuristics
Heuristics for the search algorithm.
A heuristic provides an estimate of the optimal cost from a given location to a target. As such, it guides the pathfinder to the goal, helping it to decide which route is the best.
This script holds the definition of built-in heuristics available.
Distance functions are internally used by the pathfinder to evaluate the optimal path from the start location to the goal. These functions share the same prototype:
local function myHeuristic(dx, dy) -- function body endJumper features some built-in distance heuristics, named
MANHATTAN
, EUCLIDIAN
, DIAGONAL
, CARDINTCARD
.
You can also supply your own heuristic function, using the template given above.
Usage:
-- Example local Distance = require ('jumper.core.heuristics') local Grid = require ("jumper.grid") local Pathfinder = require ("jumper.pathfinder") local walkable = 0 -- Placeholder: local map = {...} local grid = Grid(map) local myFinder = Pathfinder('ASTAR', grid, walkable) -- Use Euclidian heuristic to evaluate distance myFinder:setHeuristic('EUCLIDIAN') -- etc ...
Info:
- Copyright: 2012-2013
- License: MIT
- Author: Roland Yonaba
Functions
Heuristics.MANHATTAN (dx, dy) | Manhattan distance. |
Heuristics.EUCLIDIAN (dx, dy) | Euclidian distance. |
Heuristics.DIAGONAL (dx, dy) | Diagonal distance. |
Heuristics.CARDINTCARD (dx, dy) | Cardinal/Intercardinal distance. |
Functions
- Heuristics.MANHATTAN (dx, dy)
-
Manhattan distance.
This heuristic is the default one being used by the pathfinder object.
Evaluates asdistance = |dx|+|dy|
Parameters:
- dx int the difference endX-startX
- dy int the difference endY-startY
Returns:
-
number
the distance from location
startX, startY
to locationendX, endY
-- First method pathfinder:setHeuristic('MANHATTAN')
-- Second method local Distance = require ('jumper.core.heuristics') pathfinder:setHeuristic(Distance.MANHATTAN) - Heuristics.EUCLIDIAN (dx, dy)
-
Euclidian distance.
Evaluates asdistance = squareRoot(dx*dx+dy*dy)
Parameters:
- dx int the difference endX-startX
- dy int the difference endY-startY
Returns:
-
number
the distance from location
startX, startY
to locationendX, endY
-- First method pathfinder:setHeuristic('EUCLIDIAN')
-- Second method local Distance = require ('jumper.core.heuristics') pathfinder:setHeuristic(Distance.EUCLIDIAN) - Heuristics.DIAGONAL (dx, dy)
-
Diagonal distance.
Evaluates asdistance = max(|dx|, abs|dy|)
Parameters:
- dx int the difference endX-startX
- dy int the difference endY-startY
Returns:
-
number
the distance from location
startX, startY
to locationendX, endY
-- First method pathfinder:setHeuristic('DIAGONAL')
-- Second method local Distance = require ('jumper.core.heuristics') pathfinder:setHeuristic(Distance.DIAGONAL) - Heuristics.CARDINTCARD (dx, dy)
-
Cardinal/Intercardinal distance.
Evaluates asdistance = min(dx, dy)*squareRoot(2) + max(dx, dy) - min(dx, dy)
Parameters:
- dx int the difference endX-startX
- dy int the difference endY-startY
Returns:
-
number
the distance from location
startX, startY
to locationendX, endY
-- First method pathfinder:setHeuristic('CARDINTCARD')
-- Second method local Distance = require ('jumper.core.heuristics') pathfinder:setHeuristic(Distance.CARDINTCARD)