44 namespace Gecode {
namespace Int {
namespace GCC {
87 for (
int i = n;
i--; ) {
110 for (
int i = 1;
i < m;
i++) {
112 c_min += rv[
i - 1].
maxb;
117 for (
int i = m-1;
i--; ) {
119 c_max += rv[
i + 1].
minb;
122 for (
int i = m;
i--; ) {
123 int reachable = x.
size() - rv[
i].
le - rv[
i].
gr;
129 if ((rv[
i].
eq > k[
i].
max()) || (k[
i].
max() > reachable))
146 for (
int i = k.
size();
i--; ) {
151 return (smin <= x.
size()) && (x.
size() <= smax);
189 operator ()(
const int i,
const int j) {
190 return x[
i].max() < x[j].max();
212 operator ()(
const int i,
const int j) {
213 return x[
i].min() < x[j].min();
229 operator ()(
const Card&
x,
const Card&
y) {
230 return x.card() < y.card();
259 operator bool(
void)
const;
263 int sumup(
int from,
int to)
const;
266 int minValue(
void)
const;
268 int maxValue(
void)
const;
270 int skipNonNullElementsRight(
int v)
const;
272 int skipNonNullElementsLeft(
int v)
const;
313 for (i = 1; i < elements.
size(); i++) {
314 if (elements[i].
card() != elements[i-1].card() + 1)
315 holes += elements[i].
card()-elements[i-1].card()-1;
319 size = elements.
size() + holes + 5;
323 sum = home.
alloc<
int>(2*size);
325 int* ds = &sum[size];
327 int first = elements[0].card();
339 int prevCard = elements[0].card()-1;
341 for (j = 2; j < elements.
size() + holes + 2; j++) {
342 if (elements[i].
card() != prevCard + 1) {
345 sum[j + 1] = sum[j] + elements[
i].max();
348 sum[j + 1] = sum[j] + elements[
i].min();
353 sum[j + 1] = sum[j] + 1;
354 sum[j + 2] = sum[j + 1] + 1;
357 i = elements.
size() + holes + 3;
360 while(sum[i] == sum[i - 1]) {
409 int* ds = &sum[size];
410 return (ds[value] < value ? value : ds[value]) +
firstValue;
416 int* ds = &sum[size];
417 return (ds[value] > value ? ds[ds[value]] : value) +
firstValue;
424 for (
int i = 3;
i < size - 2;
i++) {
428 if ((sum[
i] - sum[
i - 1]) != max)
438 for (
int i = 3;
i < size - 2;
i++) {
442 if ((sum[
i] - sum[
i - 1]) != min)
513 for (l=start; (k=
l) != end; hall[k].
ps=to) {
521 for (l=start; (k=
l) != end; hall[k].
s=to) {
529 for (l=start; (k=
l) != end; hall[k].
t=to) {
537 for (l=start; (k=
l) != end; hall[k].
h=to) {
554 while (hall[i].h < i)
561 while (hall[i].
t < i)
577 while (hall[i].h > i)
584 while (hall[i].
t > i) {
592 while (hall[i].s > i)
599 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...
Gecode::IntArgs i(4, 1, 2, 3, 4)
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...
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.