40 namespace Gecode {
namespace Int {
namespace Linear {
50 :
Propagator(home), co(home),
x(x0), n_as(n_s), n_hs(n_s),
c(c0) {
75 }
else if (
x[
i].zero()) {
106 return sizeof(*this);
148 }
else if (
x[
i].
one()) {
164 if ((
c <= 0) || (
c == n))
174 if ((
c <= 0) || (
c >= n))
201 for (
int i=n_x;
i--; )
204 }
else if (x[
i].
one()) {
205 x[
i] = x[--n_x]; c--;
219 for (
int i=n_x;
i--; )
270 }
else if (
x[
i].
one()) {
281 if ((
c == 0) || (
c == n))
291 if ((
c <= 0) || (
c >= n))
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=n_x;
i--; )
342 for (
int i=n_x;
i--; )
361 b[b.
size()-1]),
x(b),
c(c0) {
362 assert(
x.
size() >= 2);
370 return sizeof(*this);
383 }
else if (p.
x[
i].one()) {
384 n--; p_c--; p.
x[
i]=p.
x[
n];
x[
i]=
x[
n];
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>
508 for (
int i=n_x;
i--; )
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>
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=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=n_x;
i--; )
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
ViewArray< VX > x
Boolean views.
View base(void) const
Return view from which this view is derived.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
Inverse implication for reification.
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
void update(Space &home, ViewArray< View > &a)
Update array to be a clone of array a.
ExecStatus ES_SUBSUMED(Propagator &p)
int n_s
Number of subscriptions.
NqBoolInt(Home home, ViewArray< VX > &b, int c)
Constructor for posting.
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.
void cancel(Space &home, Propagator &p, IntSet &y)
virtual size_t dispose(Space &home)
Delete propagator and return its size.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as high unary)
Baseclass for integer Boolean sum.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
static ExecStatus post(Home home, ViewArray< VX > &x, int c, VB b)
Post propagator for .
static ExecStatus post(Home home, ViewArray< VX > &x, int c, VB b)
Post propagator for .
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
Propagator for integer disequal to Boolean sum (cardinality)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
ReLinBoolInt(Space &home, ReLinBoolInt &p)
Constructor for cloning p.
Base-class for propagators.
virtual void reschedule(Space &home)
Schedule function.
void subscribe(Space &home, Propagator &p, PropCond pc, bool schedule=true)
Subscribe propagator p with propagation condition pc to variable.
virtual void reschedule(Space &home)
Schedule function.
Class to iterate over advisors of a council.
Propagation has computed fixpoint.
static PropCost unary(PropCost::Mod m)
Single variable for modifier pcm.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
virtual Actor * copy(Space &home)
Create copy during cloning.
Base-class for both propagators and branchers.
virtual Actor * copy(Space &home)
Create copy during cloning.
Council< Advisor > co
Council for single advisor.
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
virtual void reschedule(Space &home)
Schedule function.
GqBoolInt(Space &home, GqBoolInt &p)
Constructor for cloning p.
int n
Number of negative literals for node type.
int n_as
Number of active subscriptions.
Execution has resulted in failure.
Propagator for integer less or equal to Boolean sum (cardinality)
Propagator for integer equal to Boolean sum (cardinality)
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
void subscribe(Space &home, Propagator &p, IntSet &y)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
size_t size
The size of the propagator (used during subsumption)
bool disabled(void) const
Whether propagator is currently disabled.
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
bool resubscribe(Space &home, VX &y)
Update subscription.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
void normalize(void)
Normalize by removing unused views.
virtual Actor * copy(Space &home)
Create copy during cloning.
ReEqBoolInt(Space &home, ReEqBoolInt &p)
Constructor for cloning p.
Propagator for reified integer less or equal to Boolean sum (cardinality)
void normalize(void)
Normalize by removing unused views.
void cancel(Space &home, Propagator &p, PropCond pc)
Cancel subscription of propagator p with propagation condition pc to all views.
Propagator for reified integer equal to Boolean sum (cardinality)
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Baseclass for reified integer Boolean sum.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
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...
struct Gecode::@585::NNF::@62::@63 b
For binary nodes (and, or, eqv)
static NegBoolView neg(BoolView x)
Return negated View.
Post propagator for SetVar SetOpType SetVar y
static ExecStatus post(Home home, ViewArray< VX > &b, int c)
Post propagator for .
virtual void reschedule(Space &home)
Schedule function.
ReGqBoolInt(Space &home, ReGqBoolInt &p)
Constructor for cloning p.
NegBoolView NegView
The negated view.
Generic domain change information to be supplied to advisors.
Traits for Boolean negation view.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
virtual size_t dispose(Space &home)
Delete actor and return its size.
BoolView NegView
The negated view.
Boolean n-ary disjunction propagator.
LinBoolInt(Space &home, LinBoolInt &p)
Constructor for cloning p.
Post propagator for SetVar x
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
Propagation has not computed fixpoint.
Council< Advisor > co
Council for managing single advisor.
int n_hs
Number of views that have or had subscriptions.
static ExecStatus post(Home home, ViewArray< BV > &b)
Post propagator .
ViewArray< VX > x
Views not yet subscribed to.
static ExecStatus post(Home home, ViewArray< VX > &x, VY y)
Post propagator .
Gecode toplevel namespace
Implication for reification.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
static BoolView neg(NegBoolView x)
Return negated View.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as high unary)
int ModEventDelta
Modification event deltas.
int size(void) const
Return size of array (number of elements)
Home class for posting propagators
virtual Actor * copy(Space &home)
Create copy during cloning.
A & advisor(void) const
Return advisor.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as low linear)
Equivalence for reification (default)
IntRelType swap(IntRelType irt)
Return swapped relation type of irt.
const Gecode::PropCond PC_INT_VAL
Propagate when a view becomes assigned (single value)
EqBoolInt(Space &home, EqBoolInt &p)
Constructor for cloning p.
const Gecode::PropCond PC_BOOL_VAL
Propagate when a view becomes assigned (single value)
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable)
Boolean view for Boolean variables.