41 namespace Gecode {
namespace Search {
44 template<
class T,
template<
class>
class E>
54 template<
class T,
template<
class>
class E>
59 template<
class T,
template<
class>
class E>
62 return build<T,PBS<T,E> >(s,
opt);
69 namespace Gecode {
namespace Search {
namespace Meta {
namespace Sequential {
82 namespace Gecode {
namespace Search {
namespace Meta {
namespace Parallel {
95 namespace Gecode {
namespace Search {
namespace Meta {
97 template<
class T,
template<
class>
class E>
105 static_cast<double>(opt.
assets)),1.0);
107 unsigned int n_slaves = opt.
assets;
111 for (
unsigned int i=0;
i<n_slaves;
i++) {
113 Space* slave = (
i == n_slaves-1) ?
116 slaves[
i] = build<T,E>(slave,
opt);
122 template<
class T,
template<
class>
class E>
128 int n_slaves = sebs.
size();
132 for (
int i=0;
i<n_slaves;
i++) {
135 sebs[
i]->options().stop = stops[
i];
136 sebs[
i]->options().clone =
false;
137 Space* slave = (
i == n_slaves-1) ?
138 master : master->
clone(sebs[
i]->options().threads <= 1.0,
139 sebs[
i]->options().share_pbs);
141 slaves[
i] = (*sebs[
i])(slave);
148 #ifdef GECODE_HAS_THREADS 150 template<
class T,
template<
class>
class E>
157 unsigned int n_slaves =
std::min(static_cast<unsigned int>(opt.
threads),
165 for (
unsigned int i=0;
i<n_slaves;
i++) {
167 Space* slave = (
i == n_slaves-1) ?
170 slaves[
i] = build<T,E>(slave,
opt);
176 template<
class T,
template<
class>
class E>
188 for (
int i=0;
i<n_slaves;
i++) {
191 sebs[
i]->options().stop = stops[
i];
192 sebs[
i]->options().clone =
false;
193 Space* slave = (
i == n_slaves-1) ?
194 master : master->
clone(
false,sebs[
i]->options().share_pbs);
196 slaves[
i] = (*sebs[
i])(slave);
200 for (
int i=n_slaves;
i<sebs.
size();
i++)
212 template<
class T,
template<
class>
class E>
235 (void) master->master(0);
239 (void) master->slave(0);
240 e = Search::build<T,E>(master,
opt);
244 #ifdef GECODE_HAS_THREADS 246 e = Search::Meta::parallel<T,E>(master,stat,
opt);
249 e = Search::Meta::sequential<T,E>(master,stat,
opt);
252 template<
class T,
template<
class>
class E>
259 for (
int i=sebs.
size();
i--; )
260 b += sebs[
i]->
best() ? 1 : 0;
261 if ((b > 0) && (b < sebs.
size()))
263 best = (b == sebs.
size());
283 (void) master->master(0);
285 #ifdef GECODE_HAS_THREADS 287 e = Search::Meta::parallel<T,E>(master,sebs,stat,
opt,
best);
290 e = Search::Meta::sequential<T,E>(master,sebs,stat,
opt,
best);
293 template<
class T,
template<
class>
class E>
298 template<
class T,
template<
class>
class E>
302 SEBs sebs(2, seb0, seb1);
305 template<
class T,
template<
class>
class E>
309 SEBs sebs(3, seb0, seb1, seb2);
312 template<
class T,
template<
class>
class E>
316 SEBs sebs(4, seb0, seb1, seb2, seb3);
320 template<
class T,
template<
class>
class E>
327 template<
class T,
template<
class>
class E>
void build(T *s, SEBs &sebs, const Search::Options &o)
The actual build function.
Search engine implementation interface
int size(void) const
Return size of array (number of elements)
const FloatNum max
Largest allowed float value.
Meta engine using a portfolio of search engines.
#define GECODE_SEARCH_EXPORT
Options & options(void)
Provide access to options.
virtual Engine * operator()(Space *s) const
The actual build function.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
A class for building search engines.
Exception: No assets requested for portfolio-based search
Options opt
Stored and already expanded options.
void stop(Support::Timer &timer, std::ostream &os)
Get time since start of timer and print user friendly time information.
Engine * build(Space *s, const Options &opt)
Build an engine of type E for a script T.
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
unsigned long int fail
Number of failed nodes in search tree.
Space * clone(bool share_data=true, bool share_info=true, CloneStatistics &stat=unused_clone) const
Clone space.
Options expand(void) const
Expand with real number of threads.
double threads
Number of threads to use.
const bool b
Whether engine to be built is a best solution search engine.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
bool clone
Whether engines create a clone when being initialized.
virtual bool slave(const MetaInfo &mi)
Slave configuration function for meta search engines.
bool share_pbs
Whether to share AFC information among assets in a portfolio.
Exception: Mixed non-best and best solution search requested
unsigned int assets
Number of assets (engines) in a portfolio.
T * pbs(T *s, const Search::Options &o)
Run a portfolio of search engines.
bool best(void) const
Whether engine is a best solution search engine.
PbsBuilder(const Options &opt)
The constructor.
Passing search engine builder arguments.
Stop * stop
Stop object for stopping search.
Gecode toplevel namespace
Base-class for Stop-object.
PBS(T *s, const Search::Options &o=Search::Options::def)
Initialize with engines running copies of s with options o.