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++)
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
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)
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.
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)
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
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.
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.
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 .
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)
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.
Execution has resulted in failure.
int ModEventDelta
Modification event deltas.
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.
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.