[gecode-users] Best-first search
Guido Tack
tack at ps.uni-sb.de
Fri Sep 4 09:30:18 CEST 2009
Malcolm Ryan wrote:
> I need a search engine for gecode that implements best-first search,
> i.e. search using a priority queue sorted on an heuristic. It doesn't
> look like Gecode current implements this, so I figure I'll have to
> write it myself.
>
> Any recommendations on how I should go about it? I've been reading the
> source for DFS and LDS but I'm not clear on what functions such an
> engine would be expected to implement.
If you want the same interface as the built-in search engines, it
should mainly provide a next method, and probably use Stop objects to
further control the search.
In order to get started, I'd just use an STL priority queue and
implement a system with full copying, i.e., the queue stores spaces.
When you dequeue a space, you determine the number of its children n,
create n-1 copies, commit the original space and each copy to one
alternative each, determine the cost for each child, and enqueue the
resulting children.
This should give you something that works, although the cost in terms
of memory may be prohibitive (you'll keep an exponential number of
spaces alive).
So the second step would be to figure out how to combine this with
recomputation. Instead of queuing spaces, you queue nodes, which may
contain a space or a pointer to a parent node. You'll have to
represent parts of the search tree in addition to the queue in order
to make this work. Then, if you dequeue a node that doesn't have a
space, you follow the parent pointers up in the tree to find a node
with a space, and recompute the target node.
I'm not quite sure how this works in practice, as you'll have to
actually create a space for each node when you create it, to determine
its priority. I guess you'd then throw away the spaces for all nodes
except the best, or something similar.
Cheers,
Guido
More information about the gecode-users
mailing list