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, startYto 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, startYto 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, startYto 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, startYto locationendX, endY-- First method pathfinder:setHeuristic('CARDINTCARD')
-- Second method local Distance = require ('jumper.core.heuristics') pathfinder:setHeuristic(Distance.CARDINTCARD)