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--; )
219 for (
int i=n_dis;
i--; )
235 for (
int i=0;
true;
i++)
241 int di = re[
i].
view, dj = j.val();
242 if (!ovl.get(di,dj)) {
244 ovl_i[di][deg[di]++] = dj;
245 ovl_i[dj][deg[dj]++] = di;
248 cur.
set(static_cast<unsigned int>(re[
i].view));
251 cur.
clear(static_cast<unsigned int>(re[
i].view));
263 for (
int i=n_dis;
i--; ) {
264 assert(deg[dis[
i]] < n_dis);
265 n_ovl_i[dis[
i]] = deg[dis[
i]];
269 int* ind =
r.alloc<
int>(n_dis);
274 int d_min = deg[dis[i_min]];
275 unsigned int s_min =
x[dis[i_min]].size();
278 for (
int i=n_dis-1;
i--; )
279 if ((d_min > deg[dis[
i]]) ||
280 ((d_min == deg[dis[
i]]) && (s_min >
x[dis[
i]].
size()))) {
283 s_min =
x[dis[
i]].size();
287 ind[n_ind++] = dis[i_min]; dis[i_min] = dis[--n_dis];
290 for (
int i=n_dis;
i--; )
291 if (ovl.get(dis[
i],ind[n_ind-1])) {
293 for (
int j=n_ovl_i[dis[
i]]; j--; )
294 deg[ovl_i[dis[
i]][j]]--;
296 dis[
i] = dis[--n_dis];
303 if (vs.size() + n_ind == y.max()) {
306 for (
int i=n_ind;
i--; )
311 for (
int i=
x.size();
i--; ) {
329 if (y.min() == g.
size()) {
331 if (vs.size() +
x.size() == g.
size()) {
333 for (
int i=
x.size();
i--; ) {
ExecStatus prune_lower(Space &home, int *dis, int n_dis)
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
Event for range-based overlap analysis.
void add(Space &home)
Add values of assigned views to value set.
bool initialized(void) const
Test whether graph has been initialized.
static PropCost quadratic(PropCost::Mod m, unsigned int n)
Quadratic complexity for modifier m and size measure n.
virtual PropCost cost(const Space &, const ModEventDelta &) const
Cost function.
ExecStatus ES_SUBSUMED(Propagator &p)
void clear(unsigned int i)
Clear bit i.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Mixed (n+1)-ary propagator.
First is subset of second iterator.
Domain consistent distinct propagator.
int size(Space &home) const
Return a size estimate based on the union of all values.
int val
The value for the range (first or last value, depending on type)
void eliminate(Space &home)
Eliminate subsumed views (all values included in the value set vs)
Range iterator for integer variable views
Value iterator for values in a bitset.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
ExecStatus all_in_valset(Space &home)
Propagate that all views must take values from value set.
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
void quicksort(Type *l, Type *r, Less &less)
Standard quick sort.
int n
Number of negative literals for node type.
void reset(void)
Reset iterator to start.
Execution has resulted in failure.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
IntBase(Home home, ValSet &vs, ViewArray< IntView > &x, VY y)
Constructor for posting.
ExecStatus prune_upper(Space &home, Graph &g)
Range iterator for union of iterators.
int view
Which view does this range belong to.
unsigned int size(I &i)
Size of all ranges of range iterator i.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
void purge(void)
Purge graph if necessary (reset information to avoid overflow)
View-value graph for propagation of upper bound.
void set(unsigned int i)
Set bit i.
ValSet vs
Value set storing the values of already assigned views.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
void sync(Space &home)
Synchronize graph with new view domains.
void disjoint(Space &home, Region &r, int *&dis, int &n_dis)
Integer view for integer variables.
const int infinity
Infinity for integers.
RangeEventType ret
The event type.
Node * x
Pointer to corresponding Boolean expression node.
union Gecode::@511::NNF::@54 u
Union depending on nodetype t.
Range iterator for intersection of iterators.
Symmetric diagonal bit matrix.
bool assigned(View x, int v)
Whether x is assigned to value v.
int size(void) const
Return size of maximal matching (excluding assigned views)
Class for storing values of already assigned views.
Gecode toplevel namespace
void update(Space &home, bool share, ValSet &vs)
Update value set during cloning.
Number of values propagator for integer views base class.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
#define GECODE_NEVER
Assert that this command is never executed.
void init(Space &home, const ValSet &vs, const ViewArray< IntView > &x)
Initialize graph including values in vs.
ExecStatus prune(Space &home)
Prune all values corresponding to unused edges.