Go to the documentation of this file.
40 namespace Gecode {
namespace Int {
namespace NValues {
76 vs.add(home,
x[
i].val());
87 dis =
r.alloc<
int>(
n); n_dis = 0;
91 switch (vs.compare(
x[
i])) {
114 if (vs.subset(
x[
i])) {
126 assert(
x.size() > 0);
130 for (
int i=
x.size()-1;
i--; ) {
137 if (
static_cast<unsigned int>(
x.size()+vs.size()) < s)
138 return x.size() + vs.size();
140 return static_cast<int>(s);
146 for (
int i=
x.size();
i--; ) {
164 if (
y.max() == vs.size() + 1) {
167 for (
int i=n_dis;
i--; )
176 for (
int i=
x.size();
i--; ) {
187 int* deg =
r.alloc<
int>(
x.size());
189 int** ovl_i =
r.alloc<
int*>(
x.size());
191 int* n_ovl_i =
r.alloc<
int>(
x.size());
195 for (
int i=
x.size();
i--; )
199 int* m =
r.alloc<
int>(n_dis*(n_dis-1));
200 for (
int i=n_dis;
i--; ) {
202 ovl_i[dis[
i]] = m; m += n_dis-1;
212 for (
int i=n_dis;
i--; )
220 for (
int i=n_dis;
i--; )
237 for (
int i=0;
true;
i++)
243 int di = re[
i].
view, dj = j.val();
244 if (!ovl.
get(di,dj)) {
246 ovl_i[di][deg[di]++] = dj;
247 ovl_i[dj][deg[dj]++] = di;
250 cur.
set(
static_cast<unsigned int>(re[
i].view));
253 cur.
clear(
static_cast<unsigned int>(re[
i].view));
265 for (
int i=n_dis;
i--; ) {
266 assert(deg[dis[
i]] < n_dis);
267 n_ovl_i[dis[
i]] = deg[dis[
i]];
271 int* ind =
r.alloc<
int>(n_dis);
276 int d_min = deg[dis[i_min]];
277 unsigned int s_min =
x[dis[i_min]].size();
280 for (
int i=n_dis-1;
i--; )
281 if ((d_min > deg[dis[
i]]) ||
282 ((d_min == deg[dis[
i]]) && (s_min >
x[dis[
i]].
size()))) {
285 s_min =
x[dis[
i]].size();
289 ind[n_ind++] = dis[i_min]; dis[i_min] = dis[--n_dis];
292 for (
int i=n_dis;
i--; )
293 if (ovl.
get(dis[
i],ind[n_ind-1])) {
295 for (
int j=n_ovl_i[dis[
i]]; j--; )
296 deg[ovl_i[dis[
i]][j]]--;
298 dis[
i] = dis[--n_dis];
305 if (vs.size() + n_ind ==
y.max()) {
308 for (
int i=n_ind;
i--; )
313 for (
int i=
x.size();
i--; ) {
331 if (
y.min() == g.
size()) {
333 if (vs.size() +
x.size() == g.
size()) {
335 for (
int i=
x.size();
i--; ) {
Post propagator for SetVar x
Post propagator for SetVar SetOpType SetVar y
void set(unsigned int i)
Set bit i.
ExecStatus prune_lower(Space &home, int *dis, int n_dis)
size_t size
The size of the propagator (used during subsumption)
Value iterator for values in a bitset.
ExecStatus ES_SUBSUMED(Propagator &p)
void sync(Space &home)
Synchronize graph with new view domains.
@ CS_NONE
Neither of the above.
virtual PropCost cost(const Space &, const ModEventDelta &) const
Cost function.
Class for storing values of already assigned views.
unsigned int size(I &i)
Size of all ranges of range iterator i.
bool assigned(View x, int v)
Whether x is assigned to value v.
void eliminate(Space &home)
Eliminate subsumed views (all values included in the value set vs)
bool get(int x, int y) const
Is bit at position x, y set?
Gecode::IntArgs i(4, 1, 2, 3, 4)
RangeEventType ret
The event type.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Number of values propagator for integer views base class.
static PropCost quadratic(PropCost::Mod m, unsigned int n)
Quadratic complexity for modifier m and size measure n.
Mixed (n+1)-ary propagator.
union Gecode::@579::NNF::@61 u
Union depending on nodetype t.
@ RET_END
No further events.
ExecStatus all_in_valset(Space &home)
Propagate that all views must take values from value set.
void reset(void)
Reset iterator to start.
void quicksort(Type *l, Type *r, Less &less)
Standard quick sort.
Gecode toplevel namespace
@ CS_SUBSET
First is subset of second iterator.
IntBase(Home home, ValSet &vs, ViewArray< IntView > &x, VY y)
Constructor for posting.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
void clear(unsigned int i)
Clear bit i.
Home class for posting propagators
Symmetric diagonal bit matrix.
View-value graph for propagation of upper bound.
Event for range-based overlap analysis.
void purge(void)
Purge graph if necessary (reset information to avoid overflow)
Post propagator for SetVar SetOpType SetVar SetRelType r
ExecStatus prune_upper(Space &home, Graph &g)
Domain consistent distinct propagator.
Range iterator for union of iterators.
#define GECODE_NEVER
Assert that this command is never executed.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
int view
Which view does this range belong to.
ValSet vs
Value set storing the values of already assigned views.
int val
The value for the range (first or last value, depending on type)
void disjoint(Space &home, Region &r, int *&dis, int &n_dis)
const int infinity
Infinity for integers.
Integer view for integer variables.
int size(void) const
Return size of maximal matching (excluding assigned views)
Range iterator for integer variable views
ExecStatus prune(Space &home)
Prune all values corresponding to unused edges.
Range iterator for intersection of iterators.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
int n
Number of negative literals for node type.
@ ES_FAILED
Execution has resulted in failure.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
int ModEventDelta
Modification event deltas.
void update(Space &home, bool share, ValSet &vs)
Update value set during cloning.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
@ ES_OK
Execution is okay.
int p
Number of positive literals for node type.
void init(Space &home, const ValSet &vs, const ViewArray< IntView > &x)
Initialize graph including values in vs.
void set(int x, int y)
Set bit at position x, y.
@ CS_DISJOINT
Intersection is empty.
void add(Space &home)
Add values of assigned views to value set.