46 d -= t[i].
a; t[i]=t[--n];
47 }
else if (t[i].
x.zero()) {
76 for (
int i=0; i<n_p; i++)
85 for (
int i=0; i<n_p; i++)
94 for (
int i=0; i<n_p; i++)
103 for (
int i=0; i<n_p; i++)
122 for (
int i=0; i<n_p; i++)
130 for (
int i=0; i<n_p; i++)
138 for (
int i=0; i<n_p; i++)
146 for (
int i=0; i<n_p; i++)
164 for (
int i=0; i<n_p; i++)
186 for (
int i=0; i<n_p; i++)
209 for (
int i=0; i<n_p; i++)
231 for (
int i=0; i<n_p; i++)
236 post(home,
x,n_p-c,
r.var())));
240 post(home,
x,n_p-c,
r.var())));
244 post(home,
x,n_p-c,
r.var())));
262 for (
int i=0; i<n_n; i++)
272 for (
int i=0; i<n_n; i++)
282 for (
int i=0; i<n_n; i++)
291 for (
int i=0; i<n_n; i++)
310 for (
int i=0; i<n_n; i++)
318 for (
int i=0; i<n_n; i++)
326 for (
int i=0; i<n_n; i++)
334 for (
int i=0; i<n_n; i++)
352 for (
int i=0; i<n_n; i++)
357 post(home,
x,-c,
r.var())));
361 post(home,
x,-c,
r.var())));
365 post(home,
x,-c,
r.var())));
374 for (
int i=0; i<n_n; i++)
380 post(home,
x,-c,nb)));
384 post(home,
x,-c,nb)));
388 post(home,
x,-c,nb)));
397 for (
int i=0; i<n_n; i++)
402 post(home,
x,n_n+c,
r.var())));
406 post(home,
x,n_n+c,
r.var())));
410 post(home,
x,n_n+c,
r.var())));
419 for (
int i=0; i<n_n; i++)
424 post(home,
x,-c,
r.var())));
428 post(home,
x,-c,
r.var())));
432 post(home,
x,-c,
r.var())));
450 for (
int i=0; i<n_p; i++) {
451 f[i].x=t_p[i].
x; f[i].a=t_p[i].
a;
457 for (
int i=0; i<n_n; i++) {
458 f[i].x=t_n[i].
x; f[i].a=t_n[i].
a;
478 ::post(home,b_n,b_p,m,-c)));
495 for (
int i=0; i<n_p; i++) {
496 f[i].x=t_p[i].
x; f[i].a=t_p[i].
a;
502 for (
int i=0; i<n_n; i++) {
503 f[i].x=t_n[i].
x; f[i].a=t_n[i].
a;
550 c =
static_cast<int>(d);
565 long long int sl =
static_cast<long long int>(
x.max())+c;
566 long long int su =
static_cast<long long int>(
x.min())+c;
567 for (
int i=0; i<n_p; i++)
569 for (
int i=0; i<n_n; i++)
575 if (unit && (n_n == 0)) {
578 }
else if (unit && (n_p == 0)) {
621 post(home,t,n,irt,c,ipl);
624 if (
r.var().zero()) {
646 if ((d %
gcd) != 0) {
654 if ((d %
gcd) == 0) {
671 c =
static_cast<int>(d);
676 case IRT_EQ: fail = (0 != c);
break;
677 case IRT_NQ: fail = (0 == c);
break;
678 case IRT_GQ: fail = (0 < c);
break;
679 case IRT_LQ: fail = (0 > c);
break;
694 long long int sl = c;
695 long long int su = c;
696 for (
int i=0; i<n_p; i++)
698 for (
int i=0; i<n_n; i++)
704 if (unit && (n_n == 0)) {
707 }
else if (unit && (n_p == 0)) {
716 for (
int i=0; i<n_n; i++)
717 t_n[i].a = -t_n[i].a;
724 rel(home,
z,irt,c,
r,ipl);
Home class for posting propagators
Boolean view for Boolean variables.
bool zero(void) const
Test whether view is assigned to be zero.
bool one(void) const
Test whether view is assigned to be one.
Integer view for integer variables.
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
Propagator for equality to Boolean sum with coefficients
Propagator for equality to Boolean sum (cardinality)
static ExecStatus post(Home home, ViewArray< VX > &x, int c)
Post propagator for .
Propagator for greater or equal to Boolean sum (cardinality)
Propagator for inequality to Boolean sum with coefficients
static ExecStatus post(Home home, ViewArray< VX > &b, int c)
Post propagator for .
Propagator for disequality to Boolean sum with coefficients
Propagator for disequality to Boolean sum (cardinality)
Propagator for reified integer equal to Boolean sum (cardinality)
Propagator for reified integer less or equal to Boolean sum (cardinality)
Array of scale Boolean views.
ScaleBool * fst(void) const
Return pointer to first element.
Coefficient and Boolean view.
Class for describing linear term .
Exception: Unknown relation passed as argument
Reification specification.
void post(Home home, Term< IntView > *t, int n, IntRelType irt, int c, IntPropLevel=IPL_DEF)
Post propagator for linear constraint over integers.
#define GECODE_ES_FAIL(es)
Check whether execution status es is failed, and fail space home.
#define GECODE_ME_FAIL(me)
Check whether modification event me is failed, and fail space home.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
IntRelType
Relation types for integers.
IntPropLevel
Propagation levels for integer propagators.
@ IRT_GQ
Greater or equal ( )
@ IRT_LQ
Less or equal ( )
@ RM_IMP
Implication for reification.
@ RM_PMI
Inverse implication for reification.
@ RM_EQV
Equivalence for reification (default)
void check(int n, const char *l)
Check whether n is in range, otherwise throw out of limits with information l.
void eliminate(Term< BoolView > *t, int &n, long long int &d)
Eliminate assigned views.
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)
void estimate(Term< View > *t, int n, int c, int &l, int &u)
Estimate lower and upper bounds.
void post_neg_unit(Home home, Term< BoolView > *t_n, int n_n, IntRelType irt, IntView y, int c)
void rewrite(IntRelType &r, long long int &d)
Rewrite non-strict relations.
void post_pos_unit(Home home, Term< BoolView > *t_p, int n_p, IntRelType irt, IntView y, int c)
int gcd(int a, int b)
Compute the greatest common divisor of a and b.
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.
void post_all(Home home, Term< BoolView > *t, int n, IntRelType irt, View x, int c)
IntType ceil_div_xp(IntType x, IntType y)
Compute where y is non-negative.
IntType floor_div_xp(IntType x, IntType y)
Compute where y is non-negative.
Gecode toplevel namespace
Post propagator for SetVar SetOpType SetVar SetRelType r
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
Post propagator for SetVar SetOpType SetVar y
Post propagator for SetVar x
#define GECODE_NEVER
Assert that this command is never executed.