43 namespace Gecode {
namespace Int {
namespace Linear {
65 d -= t[
i].
a; t[
i]=t[--
n];
66 }
else if (t[
i].
x.zero()) {
95 for (
int i=n_p;
i--; )
104 for (
int i=n_p;
i--; )
107 ::
post(home,x,y,c)));
113 for (
int i=n_p;
i--; )
116 ::
post(home,x,y,c)));
122 for (
int i=n_p;
i--; )
126 ::
post(home,x,z,n_p-c)));
141 for (
int i=n_p;
i--; )
149 for (
int i=n_p;
i--; )
157 for (
int i=n_p;
i--; )
165 for (
int i=n_p;
i--; )
183 for (
int i=n_p;
i--; )
205 for (
int i=n_p;
i--; )
228 for (
int i=n_p;
i--; )
250 for (
int i=n_p;
i--; )
281 for (
int i=n_n;
i--; )
285 ::
post(home,x,z,-c)));
291 for (
int i=n_n;
i--; )
295 ::
post(home,x,z,-c)));
301 for (
int i=n_n;
i--; )
304 ::
post(home,x,y,n_n+c)));
310 for (
int i=n_n;
i--; )
314 ::
post(home,x,z,-c)));
329 for (
int i=n_n;
i--; )
337 for (
int i=n_n;
i--; )
345 for (
int i=n_n;
i--; )
353 for (
int i=n_n;
i--; )
371 for (
int i=n_n;
i--; )
393 for (
int i=n_n;
i--; )
399 post(home,x,-c,nb)));
403 post(home,x,-c,nb)));
407 post(home,x,-c,nb)));
416 for (
int i=n_n;
i--; )
438 for (
int i=n_n;
i--; )
469 for (
int i=n_p;
i--; ) {
476 for (
int i=n_n;
i--; ) {
483 ::
post(home,b_p,b_n,y,c)));
487 ::
post(home,b_p,b_n,y,c)));
491 ::
post(home,b_p,b_n,y,c)));
497 ::
post(home,b_n,b_p,m,-c)));
514 for (
int i=n_p;
i--; ) {
521 for (
int i=n_n;
i--; ) {
529 ::
post(home,b_p,b_n,y,c)));
534 ::
post(home,b_p,b_n,y,c)));
539 ::
post(home,b_p,b_n,y,c)));
544 ::
post(home,b_n,b_p,y,-c)));
565 bool unit = normalize<BoolView>(
t,
n,t_p,n_p,t_n,n_n,
gcd);
569 c =
static_cast<int>(
d);
584 long long int sl =
static_cast<long long int>(x.max())+c;
585 long long int su =
static_cast<long long int>(x.min())+c;
586 for (
int i=n_p;
i--; )
588 for (
int i=n_n;
i--; )
594 if (unit && (n_n == 0)) {
597 }
else if (unit && (n_p == 0)) {
630 rel(home,z,irt,x,r,icl);
640 post(home,t,n,irt,c,icl);
657 bool unit = normalize<BoolView>(
t,
n,t_p,n_p,t_n,n_n,
gcd);
665 if ((d % gcd) != 0) {
673 if ((d % gcd) == 0) {
684 d =
ceil_div_xp(d,static_cast<long long int>(gcd));
690 c =
static_cast<int>(
d);
695 case IRT_EQ: fail = (0 !=
c);
break;
696 case IRT_NQ: fail = (0 ==
c);
break;
697 case IRT_GQ: fail = (0 <
c);
break;
698 case IRT_LQ: fail = (0 >
c);
break;
713 long long int sl =
c;
714 long long int su =
c;
715 for (
int i=n_p;
i--; )
717 for (
int i=n_n;
i--; )
723 if (unit && (n_n == 0)) {
726 }
else if (unit && (n_p == 0)) {
735 for (
int i=n_n;
i--; )
736 t_n[
i].
a = -t_n[
i].
a;
743 rel(home,z,irt,c,r,icl);
IntRelType inverse(const IntRelType irt)
Inverse the relation.
Propagator for inequality to Boolean sum with coefficients
void post_neg_unit(Home home, Term< BoolView > *t_n, int n_n, IntRelType irt, IntView y, int c)
IntConLevel
Consistency levels for integer propagators.
Inverse implication for reification.
ReifyMode mode(void) const
Return reification mode.
void eliminate(Term< BoolView > *t, int &n, long long int &d)
Eliminate assigned views.
BoolVar var(void) const
Return Boolean control variable.
bool one(const Gecode::FloatValArgs &a)
Check whether has only one coefficients.
void post(Home home, Term< BoolView > *t, int n, IntRelType irt, IntView x, int c, IntConLevel)
Post propagator for linear constraint over Booleans.
bool zero(void) const
Test whether domain is zero.
Propagator for integer disequal to Boolean sum (cardinality)
Propagator for equality to Boolean sum (cardinality)
Propagator for equality to Boolean sum with coefficients
Gecode::FloatVal c(-8, 8)
Propagator for greater or equal to Boolean sum (cardinality)
Exception: Unknown relation passed as argument
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
IntRelType
Relation types for integers.
Propagator for integer less or equal to Boolean sum (cardinality)
Propagator for integer equal to Boolean sum (cardinality)
int gcd(int a, int b)
Compute the greatest common divisor of a and b.
bool one(void) const
Test whether domain is one.
ScaleBool * fst(void) const
Return pointer to first element.
Reification specification.
void post_all(Home home, Term< BoolView > *t, int n, IntRelType irt, View x, int c)
void rewrite(IntRelType &r, long long int &d)
Rewrite non-strict relations.
IntType floor_div_xp(IntType x, IntType y)
Compute where y is non-negative.
IntType ceil_div_xp(IntType x, IntType y)
Compute where y is non-negative.
Propagator for reified integer less or equal to Boolean sum (cardinality)
Propagator for reified integer equal to Boolean sum (cardinality)
Propagator for disequality to Boolean sum with coefficients
union Gecode::@518::NNF::@57 u
Union depending on nodetype t.
Integer view for integer variables.
Array of scale Boolean views.
Node * x
Pointer to corresponding Boolean expression node.
void estimate(Term< View > *t, int n, int c, int &l, int &u)
Estimate lower and upper bounds.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Coefficient and Boolean view.
#define GECODE_ME_FAIL(me)
Check whether modification event me is failed, and fail space home.
Class for describing linear term .
void post_mixed(Home home, Term< BoolView > *t_p, int n_p, Term< BoolView > *t_n, int n_n, IntRelType irt, IntView y, int c)
Gecode toplevel namespace
Implication for reification.
Propagator for disequality to Boolean sum (cardinality)
int a
Integer coefficient.
void check(int n, const char *l)
Check whether n is in range, otherwise throw out of limits with information l.
Home class for posting propagators
#define GECODE_ES_FAIL(es)
Check whether execution status es is failed, and fail space home.
#define GECODE_NEVER
Assert that this command is never executed.
struct Gecode::@518::NNF::@57::@59 a
For atomic nodes.
void post_pos_unit(Home home, Term< BoolView > *t_p, int n_p, IntRelType irt, IntView y, int c)
Equivalence for reification (default)
Boolean view for Boolean variables.