39 namespace Gecode {
namespace Int {
namespace Linear {
46 d -= t[
i].
a; t[
i]=t[--
n];
47 }
else if (t[
i].
x.zero()) {
76 for (
int i=n_p;
i--; )
85 for (
int i=n_p;
i--; )
94 for (
int i=n_p;
i--; )
103 for (
int i=n_p;
i--; )
107 ::
post(home,x,z,n_p-c)));
122 for (
int i=n_p;
i--; )
130 for (
int i=n_p;
i--; )
138 for (
int i=n_p;
i--; )
146 for (
int i=n_p;
i--; )
164 for (
int i=n_p;
i--; )
186 for (
int i=n_p;
i--; )
209 for (
int i=n_p;
i--; )
231 for (
int i=n_p;
i--; )
262 for (
int i=n_n;
i--; )
266 ::
post(home,x,z,-c)));
272 for (
int i=n_n;
i--; )
276 ::
post(home,x,z,-c)));
282 for (
int i=n_n;
i--; )
285 ::
post(home,x,y,n_n+c)));
291 for (
int i=n_n;
i--; )
295 ::
post(home,x,z,-c)));
310 for (
int i=n_n;
i--; )
318 for (
int i=n_n;
i--; )
326 for (
int i=n_n;
i--; )
334 for (
int i=n_n;
i--; )
352 for (
int i=n_n;
i--; )
374 for (
int 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=n_n;
i--; )
419 for (
int i=n_n;
i--; )
450 for (
int i=n_p;
i--; ) {
457 for (
int i=n_n;
i--; ) {
464 ::
post(home,b_p,b_n,y,c)));
468 ::
post(home,b_p,b_n,y,c)));
472 ::
post(home,b_p,b_n,y,c)));
478 ::
post(home,b_n,b_p,m,-c)));
495 for (
int i=n_p;
i--; ) {
502 for (
int i=n_n;
i--; ) {
510 ::
post(home,b_p,b_n,y,c)));
515 ::
post(home,b_p,b_n,y,c)));
520 ::
post(home,b_p,b_n,y,c)));
525 ::
post(home,b_n,b_p,y,-c)));
546 bool unit = normalize<BoolView>(
t,
n,t_p,n_p,t_n,n_n,
gcd);
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=n_p;
i--; )
569 for (
int i=n_n;
i--; )
575 if (unit && (n_n == 0)) {
578 }
else if (unit && (n_p == 0)) {
611 rel(home,z,irt,x,r,ipl);
621 post(home,t,n,irt,c,ipl);
638 bool unit = normalize<BoolView>(
t,
n,t_p,n_p,t_n,n_n,
gcd);
646 if ((d % gcd) != 0) {
654 if ((d % gcd) == 0) {
665 d =
ceil_div_xp(d,static_cast<long long int>(gcd));
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=n_p;
i--; )
698 for (
int i=n_n;
i--; )
704 if (unit && (n_n == 0)) {
707 }
else if (unit && (n_p == 0)) {
716 for (
int i=n_n;
i--; )
717 t_n[
i].
a = -t_n[
i].
a;
724 rel(home,z,irt,c,r,ipl);
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)
Inverse implication for reification.
void eliminate(Term< BoolView > *t, int &n, long long int &d)
Eliminate assigned views.
ReifyMode mode(void) const
Return reification mode.
bool one(const Gecode::FloatValArgs &a)
Check whether has only one coefficients.
Propagator for integer disequal to Boolean sum (cardinality)
bool one(void) const
Test whether domain is one.
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)
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
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.
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.
union Gecode::@585::NNF::@62 u
Union depending on nodetype t.
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
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
Post propagator for SetVar SetOpType SetVar SetRelType r
IntPropLevel
Propagation levels for integer propagators.
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
Integer view for integer variables.
Post propagator for SetVar SetOpType SetVar y
Array of scale Boolean views.
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
void estimate(Term< View > *t, int n, int c, int &l, int &u)
Estimate lower and upper bounds.
bool zero(void) const
Test whether domain is zero.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
BoolVar var(void) const
Return Boolean control variable.
Coefficient and Boolean view.
Post propagator for SetVar x
#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 post(Home home, Term< BoolView > *t, int n, IntRelType irt, IntView x, int c, IntPropLevel)
Post propagator for linear constraint over Booleans.
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.
ScaleBool * fst(void) const
Return pointer to first element.
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.