Go to the documentation of this file.
34 namespace Gecode {
namespace Search {
namespace Seq {
40 template<
class Tracer>
44 template<
class Tracer>
47 : _space(
c), _alt(0), _choice(s->choice()), _nid(nid) {}
49 template<
class Tracer>
54 template<
class Tracer>
60 template<
class Tracer>
65 template<
class Tracer>
68 return std::min(_alt,_choice->alternatives()-1);
70 template<
class Tracer>
75 template<
class Tracer>
78 return _alt+1 >= _choice->alternatives();
80 template<
class Tracer>
83 return _alt >= _choice->alternatives();
85 template<
class Tracer>
91 template<
class Tracer>
97 template<
class Tracer>
103 template<
class Tracer>
117 template<
class Tracer>
122 template<
class Tracer>
128 template<
class Tracer>
134 template<
class Tracer>
137 if (!ds.empty() && ds.top().lao()) {
143 stat.
stack_depth(
static_cast<unsigned long int>(ds.entries()));
147 template<
class Tracer>
151 if (ds.top().rightmost()) {
159 template<
class Tracer>
166 template<
class Tracer>
172 template<
class Tracer>
175 const Edge&
n = ds[
i];
179 template<
class Tracer>
182 int l = ds.entries()-1;
183 while (ds[
l].space() == NULL)
188 template<
class Tracer>
194 template<
class Tracer>
197 assert((ds[
l].space() == NULL) || ds[
l].space()->failed());
198 int n = ds.entries();
200 for (
int i=
l;
i<
n;
i++) {
202 unsigned int fa = (
i !=
l) ? top.
alt() + 1 : top.
alt();
210 for (
int i=
l;
i<
n;
i++)
213 assert(ds.entries() ==
l);
216 template<
class Tracer>
223 template<
class Tracer>
232 if ((ds.top().space() != NULL) && ds.top().rightmost()) {
233 Space* s = ds.top().space();
234 s->
commit(*ds.top().choice(),ds.top().alt());
235 assert(ds.entries()-1 == lc());
236 ds.top().space(NULL);
238 if (
static_cast<unsigned int>(ds.entries()) > ngdl())
245 int n = ds.entries();
247 d =
static_cast<unsigned int>(
n -
l);
253 for (
int i=
l;
i<
n;
i++)
256 int m =
l +
static_cast<int>(
d >> 1);
262 for (; (
i<
n) && ds[
i].rightmost();
i++)
280 d =
static_cast<unsigned int>(
n-
i);
289 template<
class Tracer>
299 if ((ds.top().space() != NULL) && ds.top().rightmost()) {
300 Space* s = ds.top().space();
301 s->
commit(*ds.top().choice(),ds.top().alt());
302 assert(ds.entries()-1 == lc());
303 if (
mark > ds.entries()-1) {
304 mark = ds.entries()-1;
307 ds.top().space(NULL);
309 if (
static_cast<unsigned int>(ds.entries()) > ngdl())
316 int n = ds.entries();
318 d =
static_cast<unsigned int>(
n -
l);
344 for (
int i=
l;
i<
n;
i++)
347 int m =
l +
static_cast<int>(
d >> 1);
353 for (; (
i<
n) && ds[
i].rightmost();
i++)
374 d =
static_cast<unsigned int>(
n-
i);
383 template<
class Tracer>
unsigned int nid(void) const
Return node identifier.
unsigned int truealt(void) const
Return true number for alternatives (excluding lao optimization)
bool lao(void) const
Test whether current alternative was LAO.
#define GECODE_ES_FAIL(es)
Check whether execution status es is failed, and fail space home.
Path(unsigned int l)
Initialize with no-good depth limit l.
virtual void constrain(const Space &best)
Constrain function for best solution search.
Edge & top(void) const
Provide access to topmost edge.
unsigned int alternatives(void) const
Return number of alternatives.
unsigned long int fail
Number of failed nodes in search tree.
void post(Home home, Term *t, int n, FloatRelType frt, FloatVal c)
Post propagator for linear constraint over floats.
Depth-first path (stack of edges) supporting recomputation.
Support::DynamicStack< Edge, Heap > ds
Stack to store edge information.
void * mark(void *p)
Return marked pointer for unmarked pointer p.
bool leftmost(void) const
Test whether current alternative is leftmost.
Search tree edge for recomputation
void commit(const Choice &c, unsigned int a, CommitStatistics &stat=unused_commit)
Commit choice c for alternative a.
const FloatNum min
Smallest allowed float value.
bool empty(void) const
Test whether path is empty.
unsigned int alt(void) const
Return number for alternatives.
Gecode toplevel namespace
const Choice * choice(void) const
Return choice.
void next(void)
Move to next alternative.
Space * clone(CloneStatistics &stat=unused_clone) const
Clone space.
unsigned int nid(void) const
Return node identifier.
Search tree edge for recomputation
int entries(void) const
Return number of entries on stack.
bool rightmost(void) const
Test whether current alternative is rightmost.
Space * space(void) const
Return space for edge.
void dispose(void)
Free memory for edge.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
const Choice * choice(void) const
Return choice.
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
Heap heap
The single global heap.
unsigned int _ngdl
Depth limit for no-good generation.
void stack_depth(unsigned long int d)
Record stack depth d.
const unsigned int a_d
Create a clone during recomputation if distance is greater than a_d (adaptive distance)
Gecode::FloatVal c(-8, 8)
int n
Number of negative literals for node type.
Choice for performing commit
unsigned int alt(void) const
Return number for alternatives.
Gecode::IntArgs i({1, 2, 3, 4})
@ SS_FAILED
Space is failed
Edge(void)
Default constructor.