Skip to main content

astar_grid2d_opts

Function astar_grid2d_opts 

Source
pub fn astar_grid2d_opts(
    start: (usize, usize),
    goal: (usize, usize),
    opts: &GridAStarOpts<'_>,
) -> Option<AStarResult<(usize, usize)>>
Expand description

Full-featured A* on a 2D grid with cost metrics, periodic boundaries, admissibility, and walkability maps.

This is the advanced variant of astar_grid2d. Use GridAStarOpts to configure all parameters.

§Admissibility

Setting admissibility > 0.0 trades optimality for speed. The algorithm inflates the heuristic by (1 + admissibility), which causes it to explore fewer nodes at the cost of finding paths that may be up to (1 + admissibility) times the optimal length.

§Example

use rustsim_pathfinding::astar::{astar_grid2d_opts, GridAStarOpts};
use rustsim_pathfinding::metrics::PenaltyMap;
use rustsim_pathfinding::metrics::DirectDistance;

let mut opts = GridAStarOpts::new(50, 50);
opts.diagonal = true;
opts.periodic = true;
opts.admissibility = 0.5;
opts.walkable = Some(&|x, y| !(x == 25 && y != 25));

let penalties = vec![0i32; 2500];
let metric = PenaltyMap::new(penalties, 50, 50, DirectDistance::new()).unwrap();
opts.cost_metric = Some(&metric);

let result = astar_grid2d_opts((0, 0), (49, 49), &opts);
assert!(result.is_some());