Go to the documentation of this file.
40 namespace Gecode {
namespace Int {
namespace GCC {
70 k(k0), vvg(NULL), card_fixed(cf){
80 :
Propagator(home,
p), vvg(NULL), card_fixed(
p.card_fixed) {
119 int*
count =
r.alloc<
int>(k.size());
120 for (
int i = k.
size();
i--; )
125 for (
int i =
y.size();
i--; )
132 if (Card::propagate && (k[idx].
max() == 0))
136 if (noa ==
y.size()) {
138 for (
int i = k.
size();
i--; ) {
149 if (Card::propagate) {
151 for (
int i = k.
size();
i--; )
158 if (!card_consistent<Card>(
y,k))
163 for (
int j = k.size(); j--; )
164 if ((k[j].
min() > k[j].counter()) || (k[j].max() < k[j].counter()))
167 }
else if ((
x.size() == 1) && (
x[0].
assigned())) {
172 for (
int j = k.size(); j--; )
173 if ((k[j].
min() > k[j].counter()) || (k[j].max() < k[j].counter()))
181 for (
int i=k.
size();
i--; )
182 if (k[
i].counter() > k[
i].max() ) {
185 smax += (k[
i].max() - k[
i].counter());
186 if (k[
i].counter() < k[
i].min())
187 smin += (k[
i].
min() - k[
i].counter());
190 if ((
x.size() < smin) || (smax <
x.size()))
202 vvg->template free_alternating_paths<UBC>();
203 vvg->template strongly_connected_components<UBC>();
211 vvg->template free_alternating_paths<LBC>();
212 vvg->template strongly_connected_components<LBC>();
218 bool card_assigned =
true;
219 if (Card::propagate) {
221 card_assigned = k.assigned();
226 for (
int j=k.size(); j--; )
227 if ((k[j].
min() > k[j].counter()) ||
228 (k[j].max() < k[j].counter()))
231 }
else if ((
x.size() == 1) &&
x[0].
assigned()) {
237 for (
int j = k.size(); j--; )
238 if ((k[j].
min() > k[j].counter()) ||
239 (k[j].max() < k[j].counter()))
246 for (
int i = k.
size();
i--; )
249 bool all_assigned =
true;
251 for (
int i =
y.size();
i--; )
257 if (Card::propagate && (k[idx].
max() == 0))
260 all_assigned =
false;
267 for (
int i = k.
size();
i--; ) {
277 if (Card::propagate) {
278 int ysmax =
y.size();
279 for (
int i=k.
size();
i--; )
282 bool card_ass =
true;
283 for (
int i = k.
size();
i--; ) {
290 if (card_ass && (smax !=
y.size()))
303 if (isDistinct<Card>(
x,k))
307 for (
int i = k.
size();
i--; )
309 cardfix =
false;
break;
312 (void)
new (home)
Dom<Card>(home,
x,k,cardfix);
Post propagator for SetVar x
ViewArray< IntView > y
Views used to channel information between x and k ( ).
Post propagator for SetVar SetOpType SetVar y
Domain consistent global cardinality propagator.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
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 void reschedule(Space &home)
Schedule function.
static ExecStatus post(Home home, ViewArray< View > &x)
Post propagator for views x.
bool assigned(View x, int v)
Whether x is assigned to value v.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Base-class for both propagators and branchers.
bool lookupValue(T &a, int v, int &i)
Return index of v in array a.
Gecode toplevel namespace
Base-class for propagators.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
void update(Space &home, ViewArray< View > &a)
Update array to be a clone of array a.
static ExecStatus post(Home home, ViewArray< IntView > &x, ViewArray< Card > &k)
Post propagator for views x and cardinalities k.
Home class for posting propagators
static PropCost cubic(PropCost::Mod m, unsigned int n)
Cubic complexity for modifier m and size measure n.
Variable-value-graph used during propagation.
Post propagator for SetVar SetOpType SetVar SetRelType r
virtual size_t dispose(Space &home)
Destructor.
Dom(Space &home, Dom< Card > &p)
Constructor for cloning p.
ViewArray< IntView > x
Views on which to perform domain-propagation.
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntPropLevel)
Post propagator for .
ViewArray< Card > k
Array containing either fixed cardinalities or CardViews.
int size(void) const
Return size of array (number of elements)
Propagation has computed fixpoint.
int size(void) const
Return size of array (number of elements)
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
virtual size_t dispose(Space &home)
Delete actor and return its size.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Execution has resulted in failure.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
int ModEventDelta
Modification event deltas.
Propagation has not computed fixpoint.
Gecode::IntArgs i({1, 2, 3, 4})
int p
Number of positive literals for node type.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.