40 namespace Gecode {
namespace Int {
namespace GCC {
83 for (
int i = n;
i--; ) {
106 for (
int i = 1;
i < m;
i++) {
108 c_min += rv[
i - 1].
maxb;
113 for (
int i = m-1;
i--; ) {
115 c_max += rv[
i + 1].
minb;
118 for (
int i = m;
i--; ) {
119 int reachable = x.
size() - rv[
i].
le - rv[
i].
gr;
125 if ((rv[
i].
eq > k[
i].
max()) || (k[
i].
max() > reachable))
142 for (
int i = k.
size();
i--; ) {
147 return (smin <= x.
size()) && (x.
size() <= smax);
185 operator ()(
const int i,
const int j) {
186 return x[
i].max() < x[j].max();
208 operator ()(
const int i,
const int j) {
209 return x[
i].min() < x[j].min();
225 operator ()(
const Card&
x,
const Card&
y) {
226 return x.card() < y.card();
255 operator bool(
void)
const;
259 int sumup(
int from,
int to)
const;
262 int minValue(
void)
const;
264 int maxValue(
void)
const;
266 int skipNonNullElementsRight(
int v)
const;
268 int skipNonNullElementsLeft(
int v)
const;
309 for (i = 1; i < elements.
size(); i++) {
310 if (elements[i].
card() != elements[i-1].card() + 1)
311 holes += elements[i].
card()-elements[i-1].card()-1;
315 size = elements.
size() + holes + 5;
319 sum = home.
alloc<
int>(2*size);
321 int* ds = &sum[size];
323 int first = elements[0].card();
335 int prevCard = elements[0].card()-1;
337 for (j = 2; j < elements.
size() + holes + 2; j++) {
338 if (elements[i].
card() != prevCard + 1) {
341 sum[j + 1] = sum[j] + elements[
i].max();
344 sum[j + 1] = sum[j] + elements[
i].min();
349 sum[j + 1] = sum[j] + 1;
350 sum[j + 2] = sum[j + 1] + 1;
353 i = elements.
size() + holes + 3;
356 while(sum[i] == sum[i - 1]) {
405 int* ds = &sum[size];
406 return (ds[value] < value ? value : ds[value]) +
firstValue;
412 int* ds = &sum[size];
413 return (ds[value] > value ? ds[ds[value]] : value) +
firstValue;
420 for (
int i = 3;
i < size - 2;
i++) {
424 if ((sum[
i] - sum[
i - 1]) != max)
434 for (
int i = 3;
i < size - 2;
i++) {
438 if ((sum[
i] - sum[
i - 1]) != min)
509 for (l=start; (k=
l) != end; hall[k].
ps=to) {
517 for (l=start; (k=
l) != end; hall[k].
s=to) {
525 for (l=start; (k=
l) != end; hall[k].
t=to) {
533 for (l=start; (k=
l) != end; hall[k].
h=to) {
550 while (hall[i].h < i)
557 while (hall[i].
t < i)
573 while (hall[i].h > i)
580 while (hall[i].
t > i) {
588 while (hall[i].s > i)
595 while (hall[i].ps > i)
int d
Difference between critical capacities.
Container class provding information about the Hall structure of the problem variables.
int skipNonNullElementsLeft(int v) const
Skip neigbouring array entries if their values do not differ.
int gr
Number of greater variables.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
int eq
Number of equal variables.
bool lookupValue(T &a, int v, int &i)
Return index of v in array a.
void pathset_s(HallInfo hall[], int start, int end, int to)
Path compression for stable set structure.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void pathset_h(HallInfo hall[], int start, int end, int to)
Path compression for hall pointer structure.
int minValue(void) const
Return smallest bound of variables.
void reinit(void)
Mark datstructure as requiring reinitialization.
int pathmax_t(const HallInfo hall[], int i)
Path maximum for capacity pointer structure.
int pathmin_h(const HallInfo hall[], int i)
Path minimum for hall pointer structure.
const unsigned int card
Maximum cardinality of an integer set.
int maxb
Number of variables with upper bound.
int pathmin_t(const HallInfo hall[], int i)
Path minimum for capacity pointer structure.
Compares two indices i, j of two views according to the ascending order of the views lower bounds...
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
int pathmax_h(const HallInfo hall[], int i)
Path maximum for hall pointer structure.
bool check_update_min(ViewArray< Card > &k)
Check whether the values in the partial sum structure containting the lower cardinality bounds differ...
int n
Number of negative literals for node type.
int t
Critical capacity pointer t represents a predecessor function where denotes the predecessor of i in ...
Compares two indices i, j of two views according to the ascending order of the views upper bounds...
Gecode::IntArgs i({1, 2, 3, 4})
Execution has resulted in failure.
Class for computing unreachable values in the value GCC propagator.
int pathmax_ps(const HallInfo hall[], int i)
Path maximum for potentially stable set pointer structure.
unsigned int size(I &i)
Size of all ranges of range iterator i.
MaxInc(const ViewArray< View > &x0)
Constructor.
int skipNonNullElementsRight(int v) const
Skip neigbouring array entries if their values do not differ.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
ExecStatus prop_card(Space &home, ViewArray< IntView > &x, ViewArray< Card > &k)
Bounds consistency check for cardinality variables.
PartialSum(void)
Constructor.
int bounds
Represents the union of all lower and upper domain bounds.
void pathset_t(HallInfo hall[], int start, int end, int to)
Path compression for capacity pointer structure.
Post propagator for SetVar SetOpType SetVar SetRelType r
bool card_consistent(ViewArray< IntView > &x, ViewArray< Card > &k)
Consistency check, whether the cardinality values are feasible.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
int newBound
Bound update.
Post propagator for SetVar SetOpType SetVar y
Maps domain bounds to their position in hall[].bounds.
ViewArray< View > x
View array for comparison.
MinInc(const ViewArray< View > &x0)
Constructor.
bool assigned(View x, int v)
Whether x is assigned to value v.
Partial sum structure for constant time computation of the maximal capacity of an interval...
bool check_update_max(ViewArray< Card > &k)
Check whether the values in the partial sum structure containting the upper cardinality bounds differ...
int firstValue
Sentinels indicating whether an end of sum is reached.
int pathmax_s(const HallInfo hall[], int i)
Path maximum for stable set pointer structure.
ViewArray< View > x
View array for comparison.
int maxValue(void) const
Return largest bound of variables.
Post propagator for SetVar x
int ps
Potentially Stable Set pointer.
Gecode toplevel namespace
LinFloatExpr sum(const FloatVarArgs &x)
Construct linear float expression as sum of float variables.
int size(void) const
Return size of array (number of elements)
Compares two cardinality views according to the index.
int sumup(int from, int to) const
Compute the maximum capacity of an interval.
void init(Space &home, ViewArray< Card > &k, bool up)
Initialization.
void pathset_ps(HallInfo hall[], int start, int end, int to)
Path compression for potentially stable set structure.
int minb
Number of variables with lower bound.
int le
Number of smaller variables.