cost
going from state
to a goal state.Is is expected that the heuristic is admissible, it means its is an
optimistic estimation and never an over-estimate, thus is cannot be
higher than the lowest possible remaining cost.
See SearchSolver::do_revisit
for details.
Default: 0
.
# An heuristic of the estimated `cost` going from `state` to a goal state.
#
# Is is expected that the heuristic is *admissible*, it means its is an
# optimistic estimation and never an over-estimate, thus is cannot be
# higher than the lowest possible remaining cost.
# See `SearchSolver::do_revisit` for details.
#
# Default: `0`.
fun heuristic(state: S): Float do return 0.0
lib/ai/search.nit:99,2--107,45
# The sum of the Manhattan distances of each tile to its goal
# Not the best heuristic but the simplest to implement among the good ones.
redef fun heuristic(state)
do
var p = 0
var i = -1
for t in state do
i += 1
# The hole does not count
if t == hole then continue
var dx = (i % width - t.goal_idx % width).abs
var dy = (i / width - t.goal_idx / width).abs
# Add Manhattan distance
p += dx + dy
end
return p.to_f
end
lib/ai/examples/puzzle.nit:148,2--167,4