Go to the documentation of this file.
40 namespace Gecode {
namespace Int {
namespace Linear {
50 :
Propagator(home), co(home),
x(x0), n_as(n_s), n_hs(n_s),
c(c0) {
62 for (
int i=n_hs;
i--; )
64 x[
i]=
x[--n_hs];
x[n_hs]=
x[--n_x];
72 for (
int i=n_x-1;
i>=n_hs;
i--)
75 }
else if (
x[
i].zero()) {
102 for (
int i=0;
i<n_hs;
i++)
106 return sizeof(*this);
142 for (
int i =
x.size()-1;
i>=n_hs;
i--)
145 x[n_hs++].subscribe(home,
a);
148 }
else if (
x[
i].
one()) {
152 assert(n_hs <=
x.size());
161 int n =
x.size()-n_hs+n_as;
162 if ((
n <
c) && !disabled())
164 if ((
c <= 0) || (
c ==
n))
173 int n =
x.size()-n_hs+n_as;
174 if ((
c <= 0) || (
c >=
n))
182 if (
x.size() - n_hs + n_as <
c)
185 assert((n_as ==
c) && (
x.size() == n_hs));
189 for (
int i=0;
i<n_hs;
i++)
201 for (
int i=n_x;
i--; )
204 }
else if (
x[
i].
one()) {
205 x[
i] =
x[--n_x];
c--;
219 for (
int i=0;
i<n_x;
i++)
261 if ((
c+1 < n_as) && (
x.size()-n_hs <
c))
264 for (
int i =
x.size()-1;
i>=n_hs;
i--)
267 x[n_hs++].subscribe(home,
a);
270 }
else if (
x[
i].
one()) {
278 int n =
x.size()-n_hs+n_as;
279 if (((
c < 0) || (
c >
n)) && !disabled())
281 if ((
c == 0) || (
c ==
n))
290 int n =
x.size()-n_hs+n_as;
291 if ((
c <= 0) || (
c >=
n))
299 if ((
c < 0) || (
c >
x.size()-n_hs+n_as))
302 assert(
x.size() == n_hs);
307 for (
int i=0;
i<n_hs;
i++)
312 for (
int i=0;
i<n_hs;
i++)
324 for (
int i=n_x;
i--; )
327 }
else if (
x[
i].
one()) {
328 x[
i] =
x[--n_x];
c--;
332 if ((
c < 0) || (
c > n_x))
336 for (
int i=0;
i<n_x;
i++)
342 for (
int i=0;
i<n_x;
i++)
362 assert(
x.
size() >= 2);
370 return sizeof(*this);
383 }
else if (
p.x[
i].one()) {
399 }
else if (
x[
i].zero()) {
403 if ((
n <
c) || (
c < 0))
440 }
else if (
x[
i].zero()) {
444 assert(!
x[
i].zero() && !
x[
i].
one());
460 if (x0.zero() || x0.one())
463 if (x1.zero() || x1.one())
465 int n =
x.size() + s0 + s1;
466 if ((
n <
c) || (
c < 0))
494 template<
class VX,
class VB>
503 template<
class VX,
class VB>
506 if (n_s !=
x.size()) {
508 for (
int i=n_x;
i--; )
512 assert(
x.size() == n_s);
516 template<
class VX,
class VB>
521 co.update(home,
p.co);
526 template<
class VX,
class VB>
534 return sizeof(*this);
537 template<
class VX,
class VB>
572 template<
class VX,
class VB, ReifyMode rm>
577 template<
class VX,
class VB, ReifyMode rm>
582 template<
class VX,
class VB, ReifyMode rm>
588 template<
class VX,
class VB, ReifyMode rm>
594 if ((n_s <
c) || (
c <= 0))
600 template<
class VX,
class VB, ReifyMode rm>
604 if ((n_s <
c) || (
c <= 0))
608 template<
class VX,
class VB, ReifyMode rm>
627 for (
int i=0;
i<
x.size();
i++)
630 ::
post(home(*
this),nx,
x.size()-
c+1));
637 template<
class VX,
class VB, ReifyMode rm>
640 assert(!
b.assigned());
644 for (
int i=n_x;
i--; )
647 }
else if (
x[
i].
one()) {
648 x[
i] =
x[--n_x];
c--;
659 }
else if ((
c == 1) && (rm ==
RM_EQV)) {
662 }
else if ((
c == n_x) && (rm ==
RM_EQV)) {
665 for (
int i=0;
i<n_x;
i++)
681 template<
class VX,
class VB, ReifyMode rm>
686 template<
class VX,
class VB, ReifyMode rm>
691 template<
class VX,
class VB, ReifyMode rm>
697 template<
class VX,
class VB, ReifyMode rm>
704 if ((
c < 0) || (
c > n_s) || (n_s == 0))
710 template<
class VX,
class VB, ReifyMode rm>
714 if ((
c < 0) || (
c > n_s) || (n_s == 0))
718 template<
class VX,
class VB, ReifyMode rm>
722 if ((
c == 0) && (n_s == 0)) {
742 template<
class VX,
class VB, ReifyMode rm>
745 assert(!
b.assigned());
749 for (
int i=n_x;
i--; )
752 }
else if (
x[
i].
one()) {
753 x[
i] =
x[--n_x];
c--;
756 if ((n_x <
c) || (
c < 0)) {
760 }
else if ((
c == 0) && (n_x == 0)) {
764 }
else if ((
c == 0) && (rm ==
RM_EQV)) {
768 }
else if ((
c == n_x) && (rm ==
RM_EQV)) {
771 for (
int i=0;
i<n_x;
i++)
Post propagator for SetVar x
Propagator for reified integer equal to Boolean sum (cardinality)
Baseclass for integer Boolean sum.
const Gecode::PropCond PC_BOOL_VAL
Propagate when a view becomes assigned (single value)
Post propagator for SetVar SetOpType SetVar y
Propagator for integer disequal to Boolean sum (cardinality)
Propagator for reified integer less or equal to Boolean sum (cardinality)
@ RM_PMI
Inverse implication for reification.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
virtual Actor * copy(Space &home)
Create copy during cloning.
void subscribe(Space &home, Propagator &p, PropCond pc, bool schedule=true)
Subscribe propagator p with propagation condition pc to variable.
ExecStatus ES_SUBSUMED(Propagator &p)
virtual Actor * copy(Space &home)
Copy propagator during cloning.
unsigned int size(I &i)
Size of all ranges of range iterator i.
virtual void reschedule(Space &home)
Schedule function.
Class to iterate over advisors of a council.
@ RM_IMP
Implication for reification.
NegBoolView NegView
The negated view.
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
bool normalize(Term< View > *t, int &n, Term< View > *&t_p, int &n_p, Term< View > *&t_n, int &n_n, int &g)
Normalize linear integer constraints.
Base-class for both propagators and branchers.
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable)
ReLinBoolInt(Space &home, ReLinBoolInt &p)
Constructor for cloning p.
Propagator for integer less or equal to Boolean sum (cardinality)
Propagator for integer equal to Boolean sum (cardinality)
virtual void reschedule(Space &home)
Schedule function.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
ViewArray< VX > x
Boolean views.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
static ExecStatus post(Home home, ViewArray< VX > &x, int c, VB b)
Post propagator for .
static ExecStatus post(Home home, ViewArray< VX > &b, int c)
Post propagator for .
virtual Actor * copy(Space &home)
Create copy during cloning.
Boolean view for Boolean variables.
Gecode toplevel namespace
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Base-class for propagators.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
ExecStatus resubscribe(Space &home, Propagator &p, VX &x0, ViewArray< VX > &x, VY &x1, ViewArray< VY > &y)
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as high unary)
void update(Space &home, ViewArray< View > &a)
Update array to be a clone of array a.
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
Traits for Boolean negation view.
LinBoolInt(Space &home, LinBoolInt &p)
Constructor for cloning p.
Generic domain change information to be supplied to advisors.
BoolView NegView
The negated view.
@ RM_EQV
Equivalence for reification (default)
virtual Actor * copy(Space &home)
Create copy during cloning.
Home class for posting propagators
Boolean n-ary disjunction propagator.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as low linear)
static PropCost unary(PropCost::Mod m)
Single variable for modifier pcm.
IntRelType swap(IntRelType irt)
Return swapped relation type of irt.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
bool one(const Gecode::FloatValArgs &a)
Check whether has only one coefficients.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
Baseclass for reified integer Boolean sum.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
NqBoolInt(Home home, ViewArray< VX > &b, int c)
Constructor for posting.
static BoolView neg(NegBoolView x)
Return negated View.
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
void normalize(void)
Normalize by removing unused views.
static NegBoolView neg(BoolView x)
Return negated View.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
void normalize(void)
Normalize by removing unused views.
int n_as
Number of active subscriptions.
GqBoolInt(Space &home, GqBoolInt &p)
Constructor for cloning p.
void cancel(Space &home, Propagator &p, IntSet &y)
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
EqBoolInt(Space &home, EqBoolInt &p)
Constructor for cloning p.
const Gecode::PropCond PC_INT_VAL
Propagate when a view becomes assigned (single value)
@ ES_FIX
Propagation has computed fixpoint.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
int size(void) const
Return size of array (number of elements)
ReEqBoolInt(Space &home, ReEqBoolInt &p)
Constructor for cloning p.
void check(const FloatVal &n, const char *l)
Check whether float n is a valid number, otherwise throw out of limits exception with information l.
bool resubscribe(Space &home, VX &y)
Update subscription.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as high unary)
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
Council< Advisor > co
Council for single advisor.
void post(Home home, Term< BoolView > *t, int n, IntRelType irt, IntView x, int c, IntPropLevel)
Post propagator for linear constraint over Booleans.
virtual size_t dispose(Space &home)
Delete actor and return its size.
Gecode::FloatVal c(-8, 8)
A & advisor(void) const
Return advisor.
void subscribe(Space &home, Propagator &p, IntSet &y)
int n
Number of negative literals for node type.
@ ES_FAILED
Execution has resulted in failure.
int ModEventDelta
Modification event deltas.
@ ES_NOFIX
Propagation has not computed fixpoint.
Gecode::IntArgs i({1, 2, 3, 4})
Council< Advisor > co
Council for managing single advisor.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
@ ES_OK
Execution is okay.
int p
Number of positive literals for node type.
static ExecStatus post(Home home, ViewArray< VX > &x, int c, VB b)
Post propagator for .
ViewArray< VX > x
Views not yet subscribed to.
virtual void reschedule(Space &home)
Schedule function.
static ExecStatus post(Home home, ViewArray< VX > &x, VY y)
Post propagator .
virtual Actor * copy(Space &home)
Create copy during cloning.
virtual void reschedule(Space &home)
Schedule function.
static ExecStatus post(Home home, ViewArray< BV > &b)
Post propagator .
ReGqBoolInt(Space &home, ReGqBoolInt &p)
Constructor for cloning p.