search.hh
Go to the documentation of this file.
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Main authors:
* Christian Schulte <schulte@gecode.org>
* Guido Tack <tack@gecode.org>
*
* Contributing authors:
* Kevin Leo <kevin.leo@monash.edu>
* Maxim Shishmarev <maxim.shishmarev@monash.edu>
*
* Copyright:
* Kevin Leo, 2017
* Christian Schulte, 2002
* Maxim Shishmarev, 2017
* Guido Tack, 2004
*
* This file is part of Gecode, the generic constraint
* development environment:
* http://www.gecode.org
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#ifndef __GECODE_SEARCH_HH__
#define __GECODE_SEARCH_HH__
#include <initializer_list>
#include <gecode/kernel.hh>
/*
* Configure linking
*
*/
#if !defined(GECODE_STATIC_LIBS) && \
(defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
#ifdef GECODE_BUILD_SEARCH
#define GECODE_SEARCH_EXPORT __declspec( dllexport )
#else
#define GECODE_SEARCH_EXPORT __declspec( dllimport )
#endif
#else
#ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
#define GECODE_SEARCH_EXPORT __attribute__ ((visibility("default")))
#else
#define GECODE_SEARCH_EXPORT
#endif
#endif
// Configure auto-linking
#ifndef GECODE_BUILD_SEARCH
#define GECODE_LIBRARY_NAME "Search"
#include <gecode/support/auto-link.hpp>
#endif
namespace Gecode { namespace Search {
namespace Sequential {}
namespace Parallel {}
namespace Meta {}
namespace Meta {
namespace Sequential {}
namespace Parallel {}
}
namespace Config {
const bool clone = true;
const double threads = 1.0;
const unsigned int c_d = 8;
const unsigned int a_d = 2;
const unsigned int steal_limit = 3;
const unsigned int initial_delay = 5;
const unsigned int d_l = 5;
const double base = 1.5;
const unsigned int slice = 250;
const unsigned int nogoods_limit = 128;
const unsigned int cpprofiler_port = 6565U;
}
}}
#include <gecode/search/exception.hpp>
namespace Gecode { namespace Search {
class Statistics : public StatusStatistics {
public:
unsigned long int fail;
unsigned long int node;
unsigned long int depth;
unsigned long int restart;
unsigned long int nogood;
Statistics(void);
void reset(void);
Statistics operator +(const Statistics& s);
Statistics& operator +=(const Statistics& s);
};
}}
#include <gecode/search/statistics.hpp>
namespace Gecode { namespace Search {
class WrapTraceRecorder;
class TraceRecorder;
class EdgeTraceRecorder;
}}
#include <string>
#include <sstream>
namespace Gecode {
class SearchTracer {
friend class Search::WrapTraceRecorder;
friend class Search::TraceRecorder;
friend class Search::EdgeTraceRecorder;
public:
enum EngineType {
DFS = 0,
BAB = 1,
LDS = 2,
RBS = 3,
PBS = 4,
AOE = 5
};
class EngineInfo {
protected:
EngineType _type;
unsigned int _fst;
unsigned int _lst;
public:
EngineInfo(void);
EngineInfo(EngineType et, unsigned int fst, unsigned int lst);
EngineType type(void) const;
bool meta(void) const;
unsigned int wfst(void) const;
unsigned int wlst(void) const;
unsigned int workers(void) const;
unsigned int efst(void) const;
unsigned int elst(void) const;
unsigned int engines(void) const;
};
class EdgeInfo {
protected:
unsigned int _wid;
unsigned int _nid;
unsigned int _a;
std::string _s;
public:
void init(unsigned int wid, unsigned int nid, unsigned int a);
void init(unsigned int wid, unsigned int nid, unsigned int a,
const Space& s, const Choice & c);
void invalidate(void);
EdgeInfo(void);
EdgeInfo(unsigned int wid, unsigned int nid, unsigned int a);
operator bool(void) const;
unsigned int wid(void) const;
unsigned int nid(void) const;
unsigned int alternative(void) const;
std::string string(void) const;
};
enum NodeType {
SOLVED = 0,
FAILED = 1,
BRANCH = 2
};
class NodeInfo {
protected:
NodeType _nt;
unsigned int _wid;
unsigned int _nid;
const Space& _s;
const Choice* _c;
public:
NodeInfo(NodeType nt,
unsigned int wid, unsigned int nid,
const Space& s, const Choice* c = nullptr);
NodeType type(void) const;
unsigned int wid(void) const;
unsigned int nid(void) const;
const Space& space(void) const;
const Choice& choice(void) const;
};
private:
Support::Mutex m;
unsigned int pending;
unsigned int n_e;
unsigned int n_w;
unsigned int n_active;
Support::DynamicArray<EngineInfo,Heap> es;
Support::DynamicArray<unsigned int,Heap> w2e;
void engine(EngineType t, unsigned int n);
void worker(unsigned int& wid, unsigned int& eid);
void worker(void);
//{@
void _round(unsigned int eid);
void _skip(const EdgeInfo& ei);
void _node(const EdgeInfo& ei, const NodeInfo& ni);
public:
SearchTracer(void);
unsigned int workers(void) const;
unsigned int engines(void) const;
const EngineInfo& engine(unsigned int eid) const;
unsigned int eid(unsigned int wid) const;
virtual void init(void) = 0;
virtual void round(unsigned int eid) = 0;
virtual void skip(const EdgeInfo& ei) = 0;
virtual void node(const EdgeInfo& ei, const NodeInfo& ni) = 0;
virtual void done(void) = 0;
virtual ~SearchTracer(void);
};
class GECODE_SEARCH_EXPORT StdSearchTracer : public SearchTracer {
protected:
std::ostream& os;
static const char* t2s[EngineType::AOE + 1];
public:
StdSearchTracer(std::ostream& os = std::cerr);
virtual void init(void);
virtual void round(unsigned int eid);
virtual void skip(const EdgeInfo& ei);
virtual void node(const EdgeInfo& ei, const NodeInfo& ni);
virtual void done(void);
virtual ~StdSearchTracer(void);
static StdSearchTracer def;
};
}
#include <gecode/search/tracer.hpp>
#include <gecode/search/trace-recorder.hpp>
#ifdef GECODE_HAS_CPPROFILER
namespace Gecode {
namespace CPProfiler {}
}
namespace Gecode { namespace CPProfiler {
class Connector;
}}
namespace Gecode {
class GECODE_SEARCH_EXPORT CPProfilerSearchTracer : public SearchTracer {
public:
class GECODE_SEARCH_EXPORT GetInfo : public HeapAllocated {
public:
GetInfo(void);
virtual std::string getInfo(const Space& home) const = 0;
virtual ~GetInfo(void);
};
private:
CPProfiler::Connector* connector;
int execution_id;
std::string name;
int restart;
const GetInfo* pgi;
public:
CPProfilerSearchTracer(int eid, std::string name,
unsigned int port = Search::Config::cpprofiler_port,
const GetInfo* pgi = nullptr);
virtual void init(void);
virtual void round(unsigned int eid);
virtual void skip(const EdgeInfo& ei);
virtual void node(const EdgeInfo& ei, const NodeInfo& ni);
virtual void done(void);
virtual ~CPProfilerSearchTracer(void);
};
}
#endif
namespace Gecode { namespace Search {
class GECODE_SEARCH_EXPORT Cutoff : public HeapAllocated {
public:
Cutoff(void);
virtual unsigned long int operator ()(void) const = 0;
virtual unsigned long int operator ++(void) = 0;
virtual ~Cutoff(void);
static Cutoff*
constant(unsigned long int scale=Config::slice);
static Cutoff*
linear(unsigned long int scale=Config::slice);
static Cutoff*
geometric(unsigned long int scale=Config::slice, double base=Config::base);
static Cutoff*
luby(unsigned long int scale=Config::slice);
static Cutoff*
rnd(unsigned int seed,
unsigned long int min, unsigned long int max,
unsigned long int n);
static Cutoff*
append(Cutoff* c1, unsigned long int n, Cutoff* c2);
static Cutoff*
merge(Cutoff* c1, Cutoff* c2);
static Cutoff*
repeat(Cutoff* c, unsigned long int n);
};
class GECODE_SEARCH_EXPORT CutoffConstant : public Cutoff {
protected:
unsigned long int c;
public:
CutoffConstant(unsigned long int c);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
};
class GECODE_SEARCH_EXPORT CutoffLinear : public Cutoff {
protected:
unsigned long int scale;
unsigned long int n;
public:
CutoffLinear(unsigned long int scale);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
};
class GECODE_SEARCH_EXPORT CutoffLuby : public Cutoff {
protected:
unsigned long int i;
unsigned long int scale;
static const unsigned long int n_start = 63U;
static unsigned long int start[n_start];
static unsigned long int log(unsigned long int i);
static unsigned long int luby(unsigned long int i);
public:
CutoffLuby(unsigned long int scale);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
};
class GECODE_SEARCH_EXPORT CutoffGeometric : public Cutoff {
protected:
double n;
double scale;
double base;
public:
CutoffGeometric(unsigned long int scale, double base);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
};
class GECODE_SEARCH_EXPORT CutoffRandom : public Cutoff {
protected:
Support::RandomGenerator rnd;
unsigned long int min;
unsigned long int n;
unsigned long int step;
unsigned long int cur;
public:
CutoffRandom(unsigned int seed,
unsigned long int min, unsigned long int max,
unsigned long int n);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
};
class GECODE_SEARCH_EXPORT CutoffAppend : public Cutoff {
protected:
Cutoff* c1;
Cutoff* c2;
unsigned long int n;
public:
CutoffAppend(Cutoff* c1, unsigned long int n, Cutoff* c2);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
virtual ~CutoffAppend(void);
};
class GECODE_SEARCH_EXPORT CutoffMerge : public Cutoff {
protected:
Cutoff* c1;
Cutoff* c2;
public:
CutoffMerge(Cutoff* c1, Cutoff* c2);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
virtual ~CutoffMerge(void);
};
class GECODE_SEARCH_EXPORT CutoffRepeat : public Cutoff {
protected:
Cutoff* c;
// Current cutoff
unsigned int cutoff;
// Iteration
unsigned long int i;
// Number of repetitions
unsigned long int n;
public:
CutoffRepeat(Cutoff* c, unsigned long int n);
virtual unsigned long int operator ()(void) const;
virtual unsigned long int operator ++(void);
virtual ~CutoffRepeat(void);
};
}}
#include <gecode/search/cutoff.hpp>
namespace Gecode { namespace Search {
class Stop;
class Options {
public:
bool clone;
double threads;
unsigned int c_d;
unsigned int a_d;
unsigned int d_l;
unsigned int assets;
unsigned int slice;
unsigned int nogoods_limit;
Stop* stop;
Cutoff* cutoff;
SearchTracer* tracer;
GECODE_SEARCH_EXPORT static const Options def;
Options(void);
GECODE_SEARCH_EXPORT Options
expand(void) const;
};
}}
#include <gecode/search/options.hpp>
namespace Gecode { namespace Search {
class GECODE_SEARCH_EXPORT Stop : public HeapAllocated {
public:
Stop(void);
virtual bool stop(const Statistics& s, const Options& o) = 0;
virtual ~Stop(void);
static Stop* node(unsigned long int l);
static Stop* fail(unsigned long int l);
static Stop* time(unsigned long int l);
};
class GECODE_SEARCH_EXPORT NodeStop : public Stop {
protected:
unsigned long int l;
public:
NodeStop(unsigned long int l);
unsigned long int limit(void) const;
void limit(unsigned long int l);
virtual bool stop(const Statistics& s, const Options& o);
};
class GECODE_SEARCH_EXPORT FailStop : public Stop {
protected:
unsigned long int l;
public:
FailStop(unsigned long int l);
unsigned long int limit(void) const;
void limit(unsigned long int l);
virtual bool stop(const Statistics& s, const Options& o);
};
class GECODE_SEARCH_EXPORT TimeStop : public Stop {
protected:
Support::Timer t;
unsigned long int l;
public:
TimeStop(unsigned long int l);
unsigned long int limit(void) const;
void limit(unsigned long int l);
void reset(void);
virtual bool stop(const Statistics& s, const Options& o);
};
}}
#include <gecode/search/stop.hpp>
namespace Gecode { namespace Search {
class GECODE_SEARCH_EXPORT Engine : public HeapAllocated {
public:
virtual Space* next(void) = 0;
virtual Statistics statistics(void) const = 0;
virtual bool stopped(void) const = 0;
virtual void constrain(const Space& b);
virtual void reset(Space* s);
virtual NoGoods& nogoods(void);
virtual ~Engine(void);
};
}}
#include <gecode/search/engine.hpp>
namespace Gecode { namespace Search {
template<class T>
class Base : public HeapAllocated {
template<class, class>
friend Engine* build(Space*, const Options&);
template<class, template<class> class>
friend Engine* build(Space*, const Options&);
protected:
Engine* e;
Base(Engine* e = NULL);
public:
virtual T* next(void);
virtual Statistics statistics(void) const;
virtual bool stopped(void) const;
virtual ~Base(void);
private:
Base(const Base&);
Base& operator =(const Base&);
};
}}
#include <gecode/search/base.hpp>
namespace Gecode { namespace Search {
template<class T, class E>
Engine* build(Space* s, const Options& opt);
template<class T, template<class> class E>
Engine* build(Space* s, const Options& opt);
class GECODE_SEARCH_EXPORT Builder : public HeapAllocated {
protected:
Options opt;
const bool b;
public:
Builder(const Options& opt, bool best);
Options& options(void);
const Options& options(void) const;
bool best(void) const;
virtual Engine* operator() (Space* s) const = 0;
virtual ~Builder(void);
};
}}
#include <gecode/search/build.hpp>
namespace Gecode {
typedef Search::Builder* SEB;
}
#include <gecode/search/traits.hpp>
namespace Gecode {
class SEBs : public ArgArray<SEB> {
public:
SEBs(void);
explicit SEBs(int n);
SEBs(const std::vector<SEB>& x);
SEBs(std::initializer_list<SEB> x);
template<class InputIterator>
SEBs(InputIterator first, InputIterator last);
SEBs(const ArgArray<SEB>& a);
};
}
#include <gecode/search/sebs.hpp>
namespace Gecode {
template<class T>
class DFS : public Search::Base<T> {
public:
DFS(T* s, const Search::Options& o=Search::Options::def);
static const bool best = false;
};
template<class T>
T* dfs(T* s, const Search::Options& o=Search::Options::def);
template<class T>
SEB dfs(const Search::Options& o=Search::Options::def);
}
#include <gecode/search/dfs.hpp>
namespace Gecode {
template<class T>
class BAB : public Search::Base<T> {
public:
BAB(T* s, const Search::Options& o=Search::Options::def);
static const bool best = true;
};
template<class T>
T* bab(T* s, const Search::Options& o=Search::Options::def);
template<class T>
SEB bab(const Search::Options& o=Search::Options::def);
}
#include <gecode/search/bab.hpp>
namespace Gecode {
template<class T>
class LDS : public Search::Base<T> {
public:
LDS(T* s, const Search::Options& o=Search::Options::def);
static const bool best = false;
};
template<class T>
T* lds(T* s, const Search::Options& o=Search::Options::def);
template<class T>
SEB lds(const Search::Options& o=Search::Options::def);
}
#include <gecode/search/lds.hpp>
namespace Gecode {
template<class T, template<class> class E = DFS>
class RBS : public Search::Base<T> {
using Search::Base<T>::e;
public:
RBS(T* s, const Search::Options& o);
static const bool best = E<T>::best;
};
template<class T, template<class> class E>
T* rbs(T* s, const Search::Options& o);
template<class T, template<class> class E>
SEB rbs(const Search::Options& o);
}
#include <gecode/search/rbs.hpp>
namespace Gecode { namespace Search { namespace Meta {
template<class T, template<class> class E>
Engine* sequential(T* master, const Search::Statistics& stat, Options& opt);
template<class T, template<class> class E>
Engine* sequential(T* master, SEBs& sebs,
const Search::Statistics& stat, Options& opt, bool best);
#ifdef GECODE_HAS_THREADS
template<class T, template<class> class E>
Engine* parallel(T* master, const Search::Statistics& stat, Options& opt);
template<class T, template<class> class E>
Engine* parallel(T* master, SEBs& sebs,
const Search::Statistics& stat, Options& opt, bool best);
#endif
}}}
namespace Gecode {
template<class T, template<class> class E = DFS>
class PBS : public Search::Base<T> {
using Search::Base<T>::e;
protected:
void build(T* s, SEBs& sebs, const Search::Options& o);
public:
PBS(T* s, const Search::Options& o=Search::Options::def);
PBS(T* s, SEBs& sebs, const Search::Options& o=Search::Options::def);
static const bool best = E<T>::best;
};
template<class T, template<class> class E>
T* pbs(T* s, const Search::Options& o=Search::Options::def);
template<class T>
SEB pbs(const Search::Options& o=Search::Options::def);
}
#include <gecode/search/pbs.hpp>
#endif
// STATISTICS: search-other
auto-link.hpp
bab.hpp
build.hpp
Gecode::ArgArrayBase< SEB >::a
SEB * a
Definition array.hpp:544
Gecode::ArgArrayBase< SEB >::n
int n
Definition array.hpp:540
Gecode::ArgArray< SEB >::ArgArray
ArgArray(void)
Definition array.hpp:1750
Gecode::BAB::BAB
BAB(T *s, const Search::Options &o=Search::Options::def)
Initialize engine for space s and options o.
Definition bab.hpp:72
Gecode::BAB::best
static const bool best
Whether engine does best solution search.
Definition search.hh:1075
Gecode::CPProfilerSearchTracer::GetInfo
Class to send solution information to CPProfiler.
Definition search.hh:423
Gecode::CPProfilerSearchTracer::GetInfo::GetInfo
GetInfo(void)
Initialize.
Definition tracer.cpp:49
Gecode::CPProfilerSearchTracer::GetInfo::getInfo
virtual std::string getInfo(const Space &home) const =0
Return info for a space.
Gecode::CPProfilerSearchTracer::node
virtual void node(const EdgeInfo &ei, const NodeInfo &ni)
The engine creates a new node with information ei and ni.
Definition tracer.cpp:99
Gecode::CPProfilerSearchTracer::init
virtual void init(void)
The search engine initializes.
Definition tracer.cpp:62
Gecode::CPProfilerSearchTracer::skip
virtual void skip(const EdgeInfo &ei)
The engine skips an edge.
Definition tracer.cpp:77
Gecode::CPProfilerSearchTracer::round
virtual void round(unsigned int eid)
The engine with id eid goes to a next round (restart or next iteration in LDS).
Definition tracer.cpp:71
Gecode::CPProfilerSearchTracer::done
virtual void done(void)
All workers are done.
Definition tracer.cpp:148
Gecode::CPProfilerSearchTracer::CPProfilerSearchTracer
CPProfilerSearchTracer(int eid, std::string name, unsigned int port=Search::Config::cpprofiler_port, const GetInfo *pgi=nullptr)
Initialize.
Definition tracer.cpp:54
Gecode::CPProfiler::Connector
Definition connector.hpp:100
Gecode::Choice
Choice for performing commit
Definition core.hpp:1412
Gecode::DFS::DFS
DFS(T *s, const Search::Options &o=Search::Options::def)
Initialize search engine for space s with options o.
Definition dfs.hpp:68
Gecode::DFS::best
static const bool best
Whether engine does best solution search.
Definition search.hh:1041
Gecode::HeapAllocated
Base class for heap allocated objects.
Definition heap.hpp:340
Gecode::LDS::best
static const bool best
Whether engine does best solution search.
Definition search.hh:1113
Gecode::LDS::LDS
LDS(T *s, const Search::Options &o=Search::Options::def)
Initialize engine for space s and options o.
Definition lds.hpp:69
Gecode::NoGoods
No-goods recorded from restarts.
Definition core.hpp:1588
Gecode::PBS::build
void build(T *s, SEBs &sebs, const Search::Options &o)
The actual build function.
Definition pbs.hpp:262
Gecode::PBS::PBS
PBS(T *s, const Search::Options &o=Search::Options::def)
Initialize with engines running copies of s with options o.
Definition pbs.hpp:221
Gecode::PBS::best
static const bool best
Whether engine does best solution search.
Definition search.hh:1247
Gecode::RBS::best
static const bool best
Whether engine does best solution search.
Definition search.hh:1158
Gecode::RBS::RBS
RBS(T *s, const Search::Options &o)
Initialize engine for space s and options o.
Definition rbs.hpp:83
Gecode::SEBs
Passing search engine builder arguments.
Definition search.hh:1002
Gecode::SEBs::SEBs
SEBs(void)
Allocate empty array.
Definition sebs.hpp:37
Gecode::SearchTracer::EdgeInfo
Edge information.
Definition search.hh:242
Gecode::SearchTracer::EdgeInfo::invalidate
void invalidate(void)
Invalidate edge information (for stealing).
Definition tracer.hpp:102
Gecode::SearchTracer::EdgeInfo::alternative
unsigned int alternative(void) const
Return number of alternative.
Definition tracer.hpp:148
Gecode::SearchTracer::EdgeInfo::_a
unsigned int _a
Number of alternative.
Definition search.hh:249
Gecode::SearchTracer::EdgeInfo::_nid
unsigned int _nid
The parent node id.
Definition search.hh:247
Gecode::SearchTracer::EdgeInfo::wid
unsigned int wid(void) const
Return parent worker id.
Definition tracer.hpp:136
Gecode::SearchTracer::EdgeInfo::string
std::string string(void) const
Return string for alternative.
Definition tracer.hpp:154
Gecode::SearchTracer::EdgeInfo::nid
unsigned int nid(void) const
Return parent node id.
Definition tracer.hpp:142
Gecode::SearchTracer::EdgeInfo::EdgeInfo
EdgeInfo(void)
Initialize as non existing.
Definition tracer.hpp:127
Gecode::SearchTracer::EdgeInfo::_wid
unsigned int _wid
The parent worker id (edge does not exist if UINT_MAX).
Definition search.hh:245
Gecode::SearchTracer::EdgeInfo::_s
std::string _s
String corresponding to alternative.
Definition search.hh:251
Gecode::SearchTracer::EngineInfo
Information about an engine.
Definition search.hh:202
Gecode::SearchTracer::EngineInfo::meta
bool meta(void) const
Return whether engine is a meta engine.
Definition tracer.hpp:56
Gecode::SearchTracer::EngineInfo::wfst
unsigned int wfst(void) const
Return id of first worker.
Definition tracer.hpp:61
Gecode::SearchTracer::EngineInfo::_lst
unsigned int _lst
Last worker or engine.
Definition search.hh:209
Gecode::SearchTracer::EngineInfo::EngineInfo
EngineInfo(void)
Do not initialize.
Definition tracer.hpp:43
Gecode::SearchTracer::EngineInfo::workers
unsigned int workers(void) const
Return number of workers.
Definition tracer.hpp:75
Gecode::SearchTracer::EngineInfo::_type
EngineType _type
The engine type.
Definition search.hh:205
Gecode::SearchTracer::EngineInfo::type
EngineType type(void) const
Return engine type.
Definition tracer.hpp:51
Gecode::SearchTracer::EngineInfo::efst
unsigned int efst(void) const
Return id of first engine.
Definition tracer.hpp:80
Gecode::SearchTracer::EngineInfo::engines
unsigned int engines(void) const
Return number of engines.
Definition tracer.hpp:92
Gecode::SearchTracer::EngineInfo::_fst
unsigned int _fst
First worker or engine.
Definition search.hh:207
Gecode::SearchTracer::EngineInfo::elst
unsigned int elst(void) const
Return id of last engine.
Definition tracer.hpp:86
Gecode::SearchTracer::EngineInfo::wlst
unsigned int wlst(void) const
Return id of last worker plus one.
Definition tracer.hpp:68
Gecode::SearchTracer::NodeInfo
Node information.
Definition search.hh:282
Gecode::SearchTracer::NodeInfo::_wid
unsigned int _wid
The worker id.
Definition search.hh:287
Gecode::SearchTracer::NodeInfo::_c
const Choice * _c
The corresponding choice (nullptr if type is not BRANCH).
Definition search.hh:293
Gecode::SearchTracer::NodeInfo::_nt
NodeType _nt
The node type.
Definition search.hh:285
Gecode::SearchTracer::NodeInfo::type
NodeType type(void) const
Return node type.
Definition tracer.hpp:171
Gecode::SearchTracer::NodeInfo::choice
const Choice & choice(void) const
Return corresponding choice.
Definition tracer.hpp:191
Gecode::SearchTracer::NodeInfo::nid
unsigned int nid(void) const
Return node id.
Definition tracer.hpp:181
Gecode::SearchTracer::NodeInfo::wid
unsigned int wid(void) const
Return worker id.
Definition tracer.hpp:176
Gecode::SearchTracer::NodeInfo::space
const Space & space(void) const
Return corresponding space.
Definition tracer.hpp:186
Gecode::SearchTracer::NodeInfo::_nid
unsigned int _nid
The node id.
Definition search.hh:289
Gecode::SearchTracer::NodeInfo::_s
const Space & _s
The corresponding space.
Definition search.hh:291
Gecode::SearchTracer::NodeInfo::NodeInfo
NodeInfo(NodeType nt, unsigned int wid, unsigned int nid, const Space &s, const Choice *c=nullptr)
Initialize node info.
Definition tracer.hpp:165
Gecode::SearchTracer
Support for tracing search.
Definition search.hh:187
Gecode::SearchTracer::eid
unsigned int eid(unsigned int wid) const
Return the engine id of a worker with id wid.
Definition tracer.hpp:278
Gecode::SearchTracer::NodeType
NodeType
Node type.
Definition search.hh:276
Gecode::SearchTracer::FAILED
@ FAILED
A solution node.
Definition search.hh:278
Gecode::SearchTracer::BRANCH
@ BRANCH
A failed node.
Definition search.hh:279
Gecode::SearchTracer::SOLVED
@ SOLVED
Definition search.hh:277
Gecode::SearchTracer::init
virtual void init(void)=0
The search engine initializes.
Gecode::SearchTracer::EngineType
EngineType
Which type of engine.
Definition search.hh:193
Gecode::SearchTracer::BAB
@ BAB
Engine is a BAB engine.
Definition search.hh:195
Gecode::SearchTracer::DFS
@ DFS
Engine is a DFS engine.
Definition search.hh:194
Gecode::SearchTracer::AOE
@ AOE
Unspecified engine (any other engine).
Definition search.hh:199
Gecode::SearchTracer::PBS
@ PBS
Engine is a PBS engine.
Definition search.hh:198
Gecode::SearchTracer::RBS
@ RBS
Engine is a RBS engine.
Definition search.hh:197
Gecode::SearchTracer::LDS
@ LDS
Engine is a LDS engine.
Definition search.hh:196
Gecode::SearchTracer::engines
unsigned int engines(void) const
Return number of engines.
Definition tracer.hpp:266
Gecode::SearchTracer::~SearchTracer
virtual ~SearchTracer(void)
Delete.
Definition tracer.hpp:284
Gecode::SearchTracer::node
virtual void node(const EdgeInfo &ei, const NodeInfo &ni)=0
The engine creates a new node with information ei and ni.
Gecode::SearchTracer::round
virtual void round(unsigned int eid)=0
The engine with id eid goes to a next round (restart or next iteration in LDS).
Gecode::SearchTracer::workers
unsigned int workers(void) const
Return number of workers.
Definition tracer.hpp:261
Gecode::SearchTracer::skip
virtual void skip(const EdgeInfo &ei)=0
The engine skips an edge.
Gecode::SearchTracer::SearchTracer
SearchTracer(void)
Initialize.
Definition tracer.hpp:220
Gecode::SearchTracer::done
virtual void done(void)=0
All workers are done.
Gecode::Search::Base
Base-class for search engines.
Definition search.hh:925
Gecode::Search::Base::Base
Base(Engine *e=NULL)
Constructor.
Definition base.hpp:42
Gecode::Search::Base::stopped
virtual bool stopped(void) const
Check whether engine has been stopped.
Definition base.hpp:56
Gecode::Search::Base::next
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped).
Definition base.hpp:46
Gecode::Search::Base::statistics
virtual Statistics statistics(void) const
Return statistics.
Definition base.hpp:51
Gecode::Search::Base::~Base
virtual ~Base(void)
Destructor.
Definition base.hpp:61
Gecode::Search::Base::build
friend Engine * build(Space *, const Options &)
Build an engine of type E for a script T.
Definition build.hpp:58
Gecode::Search::Base::e
Engine * e
The actual search engine.
Definition search.hh:932
Gecode::Search::Builder
A class for building search engines.
Definition search.hh:965
Gecode::Search::Builder::b
const bool b
Whether engine to be built is a best solution search engine.
Definition search.hh:970
Gecode::Search::Builder::opt
Options opt
Stored and already expanded options.
Definition search.hh:968
Gecode::Search::Builder::Builder
Builder(const Options &opt, bool best)
Initialize with options opt and best solution search support.
Definition build.hpp:37
Gecode::Search::Builder::best
bool best(void) const
Whether engine is a best solution search engine.
Definition build.hpp:48
Gecode::Search::Builder::options
Options & options(void)
Provide access to options.
Definition build.hpp:40
Gecode::Search::CutoffAppend::n
unsigned long int n
How many number to take from the first.
Definition search.hh:643
Gecode::Search::CutoffAppend::c1
Cutoff * c1
First cutoff generators.
Definition search.hh:639
Gecode::Search::CutoffAppend::c2
Cutoff * c2
Second cutoff generators.
Definition search.hh:641
Gecode::Search::CutoffAppend::CutoffAppend
CutoffAppend(Cutoff *c1, unsigned long int n, Cutoff *c2)
Constructor.
Definition cutoff.hpp:100
Gecode::Search::CutoffConstant::c
unsigned long int c
Constant.
Definition search.hh:528
Gecode::Search::CutoffConstant::CutoffConstant
CutoffConstant(unsigned long int c)
Constructor.
Definition cutoff.hpp:47
Gecode::Search::CutoffGeometric::n
double n
Current cutoff value.
Definition search.hh:591
Gecode::Search::CutoffGeometric::CutoffGeometric
CutoffGeometric(unsigned long int scale, double base)
Constructor.
Definition cutoff.hpp:83
Gecode::Search::CutoffGeometric::base
double base
Base.
Definition search.hh:595
Gecode::Search::CutoffGeometric::scale
double scale
Scale factor.
Definition search.hh:593
Gecode::Search::CutoffLinear::n
unsigned long int n
Next number in sequence.
Definition search.hh:547
Gecode::Search::CutoffLinear::CutoffLinear
CutoffLinear(unsigned long int scale)
Constructor.
Definition cutoff.hpp:52
Gecode::Search::CutoffLinear::scale
unsigned long int scale
Scale factor.
Definition search.hh:545
Gecode::Search::CutoffLuby::luby
static unsigned long int luby(unsigned long int i)
Compute Luby number for step i.
Definition cutoff.hpp:68
Gecode::Search::CutoffLuby::n_start
static const unsigned long int n_start
Number of pre-computed luby values.
Definition search.hh:568
Gecode::Search::CutoffLuby::CutoffLuby
CutoffLuby(unsigned long int scale)
Constructor.
Definition cutoff.hpp:57
Gecode::Search::CutoffLuby::log
static unsigned long int log(unsigned long int i)
Compute binary logarithm of i.
Definition cutoff.hpp:60
Gecode::Search::CutoffLuby::scale
unsigned long int scale
Scale factor.
Definition search.hh:566
Gecode::Search::CutoffLuby::i
unsigned long int i
Iteration number.
Definition search.hh:564
Gecode::Search::CutoffLuby::start
static unsigned long int start[n_start]
Precomputed luby-values.
Definition search.hh:570
Gecode::Search::CutoffMerge::c1
Cutoff * c1
First cutoff generator.
Definition search.hh:662
Gecode::Search::CutoffMerge::c2
Cutoff * c2
Second cutoff generator.
Definition search.hh:664
Gecode::Search::CutoffMerge::CutoffMerge
CutoffMerge(Cutoff *c1, Cutoff *c2)
Constructor.
Definition cutoff.hpp:109
Gecode::Search::CutoffRandom::step
unsigned long int step
Step size.
Definition search.hh:618
Gecode::Search::CutoffRandom::cur
unsigned long int cur
Current value.
Definition search.hh:620
Gecode::Search::CutoffRandom::CutoffRandom
CutoffRandom(unsigned int seed, unsigned long int min, unsigned long int max, unsigned long int n)
Constructor.
Definition cutoff.hpp:88
Gecode::Search::CutoffRandom::n
unsigned long int n
Random values.
Definition search.hh:616
Gecode::Search::CutoffRandom::rnd
Support::RandomGenerator rnd
Random number generator.
Definition search.hh:612
Gecode::Search::CutoffRandom::min
unsigned long int min
Minimum cutoff value.
Definition search.hh:614
Gecode::Search::CutoffRepeat::CutoffRepeat
CutoffRepeat(Cutoff *c, unsigned long int n)
Constructor.
Definition cutoff.hpp:118
Gecode::Search::CutoffRepeat::c
Cutoff * c
Actual cutoff generator.
Definition search.hh:683
Gecode::Search::CutoffRepeat::n
unsigned long int n
Definition search.hh:689
Gecode::Search::CutoffRepeat::cutoff
unsigned int cutoff
Definition search.hh:685
Gecode::Search::CutoffRepeat::i
unsigned long int i
Definition search.hh:687
Gecode::Search::Cutoff
Base class for cutoff generators for restart-based meta engine.
Definition search.hh:472
Gecode::Search::Cutoff::rnd
static Cutoff * rnd(unsigned int seed, unsigned long int min, unsigned long int max, unsigned long int n)
Definition cutoff.cpp:164
Gecode::Search::Cutoff::merge
static Cutoff * merge(Cutoff *c1, Cutoff *c2)
Merge cutoff values from c1 with values from c2.
Definition cutoff.cpp:175
Gecode::Search::Cutoff::linear
static Cutoff * linear(unsigned long int scale=Config::slice)
Create generator for linear sequence scaled by scale.
Definition cutoff.cpp:152
Gecode::Search::Cutoff::geometric
static Cutoff * geometric(unsigned long int scale=Config::slice, double base=Config::base)
Definition cutoff.cpp:160
Gecode::Search::Cutoff::constant
static Cutoff * constant(unsigned long int scale=Config::slice)
Create generator for constant sequence with constant s.
Definition cutoff.cpp:148
Gecode::Search::Cutoff::Cutoff
Cutoff(void)
Default constructor.
Definition cutoff.hpp:41
Gecode::Search::Cutoff::luby
static Cutoff * luby(unsigned long int scale=Config::slice)
Create generator for luby sequence with scale-factor scale.
Definition cutoff.cpp:156
Gecode::Search::Cutoff::append
static Cutoff * append(Cutoff *c1, unsigned long int n, Cutoff *c2)
Append cutoff values from c2 after n values from c1.
Definition cutoff.cpp:171
Gecode::Search::Cutoff::repeat
static Cutoff * repeat(Cutoff *c, unsigned long int n)
Create generator that repeats n times each cutoff value from c.
Definition cutoff.cpp:179
Gecode::Search::EdgeTraceRecorder
Recorder for a search tracer with edge information.
Definition trace-recorder.hpp:93
Gecode::Search::Engine
Search engine implementation interface
Definition search.hh:899
Gecode::Search::Engine::constrain
virtual void constrain(const Space &b)
Constrain future solutions to be better than b (raises exception).
Definition engine.cpp:39
Gecode::Search::Engine::statistics
virtual Statistics statistics(void) const =0
Return statistics.
Gecode::Search::Engine::next
virtual Space * next(void)=0
Return next solution (NULL, if none exists or search has been stopped).
Gecode::Search::Engine::reset
virtual void reset(Space *s)
Reset engine to restart at space s (does nothing).
Definition engine.cpp:44
Gecode::Search::Engine::stopped
virtual bool stopped(void) const =0
Check whether engine has been stopped.
Gecode::Search::Engine::nogoods
virtual NoGoods & nogoods(void)
Return no-goods (the no-goods are empty).
Definition engine.cpp:48
Gecode::Search::FailStop::l
unsigned long int l
Failure limit.
Definition search.hh:855
Gecode::Search::FailStop::FailStop
FailStop(unsigned long int l)
Stop if failure limit l is exceeded.
Definition stop.hpp:71
Gecode::Search::FailStop::limit
unsigned long int limit(void) const
Return current limit.
Definition stop.hpp:74
Gecode::Search::FailStop::stop
virtual bool stop(const Statistics &s, const Options &o)
Return true if failure limit is exceeded.
Definition stop.cpp:71
Gecode::Search::NodeStop::limit
unsigned long int limit(void) const
Return current limit.
Definition stop.hpp:55
Gecode::Search::NodeStop::NodeStop
NodeStop(unsigned long int l)
Stop if node limit l is exceeded.
Definition stop.hpp:52
Gecode::Search::NodeStop::l
unsigned long int l
Node limit.
Definition search.hh:832
Gecode::Search::NodeStop::stop
virtual bool stop(const Statistics &s, const Options &o)
Return true if node limit is exceeded.
Definition stop.cpp:61
Gecode::Search::Options
Search engine options
Definition search.hh:746
Gecode::Search::Options::def
static const Options def
Default options.
Definition search.hh:771
Gecode::Search::Options::c_d
unsigned int c_d
Create a clone after every c_d commits (commit distance).
Definition search.hh:753
Gecode::Search::Options::clone
bool clone
Whether engines create a clone when being initialized.
Definition search.hh:749
Gecode::Search::Options::Options
Options(void)
Initialize with default values.
Definition options.hpp:37
Gecode::Search::Options::d_l
unsigned int d_l
Discrepancy limit (for LDS).
Definition search.hh:757
Gecode::Search::Options::cutoff
Cutoff * cutoff
Cutoff for restart-based search.
Definition search.hh:767
Gecode::Search::Options::expand
Options expand(void) const
Expand with real number of threads.
Definition options.cpp:43
Gecode::Search::Options::a_d
unsigned int a_d
Create a clone during recomputation if distance is greater than a_d (adaptive distance).
Definition search.hh:755
Gecode::Search::Options::stop
Stop * stop
Stop object for stopping search.
Definition search.hh:765
Gecode::Search::Options::tracer
SearchTracer * tracer
Tracer object for tracing search.
Definition search.hh:769
Gecode::Search::Options::assets
unsigned int assets
Number of assets (engines) in a portfolio.
Definition search.hh:759
Gecode::Search::Options::slice
unsigned int slice
Size of a slice in a portfolio (in number of failures).
Definition search.hh:761
Gecode::Search::Options::nogoods_limit
unsigned int nogoods_limit
Depth limit for extraction of no-goods.
Definition search.hh:763
Gecode::Search::Options::threads
double threads
Number of threads to use.
Definition search.hh:751
Gecode::Search::Statistics
Search engine statistics
Definition search.hh:147
Gecode::Search::Statistics::reset
void reset(void)
Reset.
Definition statistics.hpp:39
Gecode::Search::Statistics::Statistics
Statistics(void)
Initialize.
Definition statistics.hpp:45
Gecode::Search::Statistics::restart
unsigned long int restart
Number of restarts.
Definition search.hh:156
Gecode::Search::Statistics::operator+=
Statistics & operator+=(const Statistics &s)
Increment by statistics s.
Definition statistics.hpp:50
Gecode::Search::Statistics::depth
unsigned long int depth
Maximum depth of search stack.
Definition search.hh:154
Gecode::Search::Statistics::fail
unsigned long int fail
Number of failed nodes in search tree.
Definition search.hh:150
Gecode::Search::Statistics::node
unsigned long int node
Number of nodes expanded.
Definition search.hh:152
Gecode::Search::Statistics::operator+
Statistics operator+(const Statistics &s)
Return sum with s.
Definition statistics.hpp:61
Gecode::Search::Statistics::nogood
unsigned long int nogood
Number of no-goods posted.
Definition search.hh:158
Gecode::Search::Stop
Base-class for Stop-object.
Definition search.hh:799
Gecode::Search::Stop::Stop
Stop(void)
Default constructor.
Definition stop.hpp:41
Gecode::Search::Stop::node
static Stop * node(unsigned long int l)
Stop if node limit l has been exceeded.
Definition stop.cpp:43
Gecode::Search::Stop::time
static Stop * time(unsigned long int l)
Stop if time limit l (in milliseconds) has been exceeded.
Definition stop.cpp:51
Gecode::Search::Stop::stop
virtual bool stop(const Statistics &s, const Options &o)=0
Stop search, if returns true.
Gecode::Search::Stop::fail
static Stop * fail(unsigned long int l)
Stop if failure limit l has been exceeded.
Definition stop.cpp:47
Gecode::Search::TimeStop::stop
virtual bool stop(const Statistics &s, const Options &o)
Return true if time limit is exceeded.
Definition stop.cpp:81
Gecode::Search::TimeStop::limit
unsigned long int limit(void) const
Return current limit in milliseconds.
Definition stop.hpp:96
Gecode::Search::TimeStop::TimeStop
TimeStop(unsigned long int l)
Stop if search exceeds l milliseconds (from creation of this object).
Definition stop.hpp:90
Gecode::Search::TimeStop::t
Support::Timer t
Time when execution should stop.
Definition search.hh:874
Gecode::Search::TimeStop::l
unsigned long int l
Current limit in milliseconds.
Definition search.hh:876
Gecode::Search::TimeStop::reset
void reset(void)
Reset time to zero.
Definition stop.hpp:106
Gecode::Search::TraceRecorder
Simple recorder for a search tracer.
Definition trace-recorder.hpp:45
Gecode::Search::WrapTraceRecorder
Recorder for engine events (for access control).
Definition trace-recorder.hpp:37
Gecode::Space
Computation spaces.
Definition core.hpp:1742
Gecode::StatusStatistics::StatusStatistics
StatusStatistics(void)
Initialize.
Definition core.hpp:4694
Gecode::StdSearchTracer::t2s
static const char * t2s[EngineType::AOE+1]
Map engine type to string.
Definition search.hh:376
Gecode::StdSearchTracer::StdSearchTracer
StdSearchTracer(std::ostream &os=std::cerr)
Initialize with output stream os.
Definition tracer.cpp:45
Gecode::StdSearchTracer::done
virtual void done(void)
All workers are done.
Definition tracer.cpp:113
Gecode::StdSearchTracer::init
virtual void init(void)
The search engine initializes.
Definition tracer.cpp:49
Gecode::StdSearchTracer::node
virtual void node(const EdgeInfo &ei, const NodeInfo &ni)
The engine creates a new node with information ei and ni.
Definition tracer.cpp:82
Gecode::StdSearchTracer::def
static StdSearchTracer def
Default tracer (printing to std::cerr).
Definition search.hh:393
Gecode::StdSearchTracer::round
virtual void round(unsigned int eid)
The engine with id eid goes to a next round (restart or next iteration in LDS).
Definition tracer.cpp:70
Gecode::StdSearchTracer::os
std::ostream & os
Output stream to use.
Definition search.hh:374
Gecode::StdSearchTracer::skip
virtual void skip(const EdgeInfo &ei)
The engine skips an edge.
Definition tracer.cpp:75
Gecode::Support::DynamicArray
Array with arbitrary number of elements.
Definition dynamic-array.hpp:44
Gecode::Support::Mutex
A mutex for mutual exclausion among several threads.
Definition thread.hpp:96
Gecode::Support::Timer
Timer
Definition timer.hpp:51
cutoff.hpp
dfs.hpp
engine.hpp
Gecode::Support::RandomGenerator
LinearCongruentialGenerator< 2147483647, 48271, 44488, 3399 > RandomGenerator
Default values for linear congruential generator.
Definition random.hpp:120
Gecode::pbs
T * pbs(T *s, const Search::Options &o=Search::Options::def)
Run a portfolio of search engines.
Definition pbs.hpp:309
Gecode::bab
T * bab(T *s, const Search::Options &o=Search::Options::def)
Perform depth-first branch-and-bound search for subclass T of space s and options o.
Definition bab.hpp:77
Gecode::lds
T * lds(T *s, const Search::Options &o=Search::Options::def)
Invoke limited-discrepancy search for s as root node and optionso.
Definition lds.hpp:74
Gecode::rbs
T * rbs(T *s, const Search::Options &o)
Perform restart-based search.
Definition rbs.hpp:111
kernel.hh
lds.hpp
Gecode::CPProfiler
Code that is specific to the CPProfiler.
Definition search.hh:406
Gecode::Search::Config
Search configuration
Definition search.hh:106
Gecode::Search::Config::initial_delay
const unsigned int initial_delay
Initial delay in milliseconds for all but first worker thread.
Definition search.hh:120
Gecode::Search::Config::d_l
const unsigned int d_l
Default discrepancy limit for LDS.
Definition search.hh:123
Gecode::Search::Config::a_d
const unsigned int a_d
Create a clone during recomputation if distance is greater than a_d (adaptive distance).
Definition search.hh:115
Gecode::Search::Config::base
const double base
Base for geometric restart sequence.
Definition search.hh:126
Gecode::Search::Config::c_d
const unsigned int c_d
Create a clone after every c_d commits (commit distance).
Definition search.hh:113
Gecode::Search::Config::slice
const unsigned int slice
Size of a slice in a portfolio and scale factor for restarts(in number of failures).
Definition search.hh:128
Gecode::Search::Config::cpprofiler_port
const unsigned int cpprofiler_port
Default port for CPProfiler.
Definition search.hh:134
Gecode::Search::Config::nogoods_limit
const unsigned int nogoods_limit
Depth limit for no-good generation during search.
Definition search.hh:131
Gecode::Search::Config::steal_limit
const unsigned int steal_limit
Minimal number of open nodes for stealing.
Definition search.hh:118
Gecode::Search::Config::threads
const double threads
Number of threads to use.
Definition search.hh:110
Gecode::Search::Config::clone
const bool clone
Whether engines create a clone when being initialized.
Definition search.hh:108
Gecode::Search::Meta::Parallel
Parallel meta search engine implementations
Definition search.hh:96
Gecode::Search::Meta::Sequential
Sequential meta search engine implementations
Definition search.hh:93
Gecode::Search::Meta
Meta search engine implementations
Definition search.hh:88
Gecode::Search::Meta::sequential
Engine * sequential(T *master, const Search::Statistics &stat, Options &opt)
Build a sequential engine.
Gecode::Search::Meta::parallel
Engine * parallel(T *master, const Search::Statistics &stat, Options &opt)
Build a parallel engine.
Gecode::Search::Parallel
Parallel search engine implementations
Definition search.hh:85
Gecode::Search::Sequential
Sequential search engine implementations
Definition search.hh:82
Gecode::Search::build
Engine * build(Space *s, const Options &opt)
Build an engine of type E for a script T.
Definition build.hpp:58
Gecode
Gecode toplevel namespace
Gecode::SEB
Search::Builder * SEB
Type for a search engine builder.
Definition search.hh:993
Gecode::min
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Definition arithmetic.cpp:67
Gecode::dfs
T * dfs(T *s, const Search::Options &o=Search::Options::def)
Invoke depth-first search engine for subclass T of space s with options o.
Definition dfs.hpp:73
Gecode::max
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Definition arithmetic.cpp:49
pbs.hpp
rbs.hpp
base.hpp
exception.hpp
options.hpp
tracer.hpp
traits.hpp
GECODE_SEARCH_EXPORT
#define GECODE_SEARCH_EXPORT
Definition search.hh:67
sebs.hpp
statistics.hpp
stop.hpp
trace-recorder.hpp