40 namespace Gecode {
namespace Set {
namespace Channel {
50 p.y.subscribe(home,*
this);
52 p.x[
idx].subscribe(home,*
this);
74 p.y.cancel(home,*
this);
76 p.x[idx].cancel(home,*
this);
93 }
else if (
x[
i].
one()) {
105 if (
y.glbSize()==static_cast<unsigned int>(
y.glbMax()-
y.glbMin()+1)) {
117 :
Super(home,share,
p), running(false) {
118 co.update(home, share,
p.co);
147 (void) Super::dispose(home);
148 return sizeof(*this);
161 if (zeros.size() > 0) {
166 if (ones.size() > 0) {
173 if (delta.glbMin() != 1 || delta.glbMax() != 0) {
174 if (!delta.glbAny()) {
175 for (
int i=delta.glbMin();
i<=delta.glbMax();
i++)
184 if (delta.lubMin() != 1 || delta.lubMax() != 0) {
185 if (!delta.lubAny()) {
186 for (
int i=delta.lubMin();
i<=delta.lubMax();
i++)
191 for (; cur < lub.min(); cur++) {
196 for (; cur <
x.size(); cur++) {
211 const SetDelta&
d = static_cast<const SetDelta&>(
_d);
214 int index =
a.index();
215 if ( (running && index == -1 && me !=
ME_SET_VAL)
221 if (
x[index].zero()) {
223 zeros.include(home, index, index,
dummy);
225 assert(
x[index].
one());
227 ones.include(home, index, index,
dummy);
235 SetDelta(2,0, delta.lubMin(), delta.lubMax());
237 if (delta.glbMin() == 1 && delta.glbMax() == 0) {
240 delta.lubMin(), delta.lubMax());
242 if (delta.glbMin() != 2 || delta.glbMax() != 0) {
243 if ((delta.glbMin() <=
d.glbMin() && delta.glbMax() >=
d.glbMin())
245 (delta.glbMin() <=
d.glbMax() && delta.glbMax() >=
d.glbMax())
250 delta.lubMin(), delta.lubMax());
253 SetDelta(2, 0, delta.lubMin(), delta.lubMax());
262 SetDelta(delta.glbMin(), delta.glbMax(), 2,0);
264 if (delta.lubMin() == 1 && delta.lubMax() == 0) {
266 SetDelta(delta.glbMin(), delta.glbMax(),
267 d.lubMin(),
d.lubMax());
269 if (delta.lubMin() != 2 || delta.lubMax() != 0) {
270 if ((delta.lubMin() <=
d.lubMin() && delta.lubMax() >=
d.lubMin())
272 (delta.lubMin() <=
d.lubMax() && delta.lubMax() >=
d.lubMax())
275 SetDelta(delta.lubMin(), delta.lubMax(),
281 SetDelta(delta.glbMin(), delta.glbMax(), 2, 0);
bool running
Flag whether propagation is currently running.
static PropCost quadratic(PropCost::Mod m, unsigned int n)
Quadratic complexity for modifier m and size measure n.
ExecStatus ES_SUBSUMED(Propagator &p)
const FloatNum max
Largest allowed float value.
bool one(const Gecode::FloatValArgs &a)
Check whether has only one coefficients.
bool assigned(void) const
Test whether view is assigned.
const Gecode::ModEvent ME_SET_BB
Domain operation has changed both greatest lower and least upper bound.
int ModEvent
Type for modification events.
Council< IndexAdvisor > co
Council for managing advisors.
void dispose(Space &home, Council< A > &c)
Delete advisor.
GLBndSet zeros
Accumulated zero Booleans.
ExecStatus ES_NOFIX_DISPOSE(Council< A > &c, A &a)
Advisor a must be disposed and its propagator must be run
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as PC_QUADRATIC_LO)
ViewArray< Gecode::Int::BoolView > x
Array of views.
static ExecStatus post(Home home, ViewArray< Gecode::Int::BoolView > &x, View y)
Post propagator for .
Propagation has computed fixpoint.
Base-class for both propagators and branchers.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
IndexAdvisor(Space &home, ChannelBool< View > &p, Council< A > &c, int index)
Constructor for creation.
struct Gecode::@579::NNF::@61::@63 a
For atomic nodes.
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
Multi _d(Gecode::IntArgs(3, 3, 2, 1))
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Value iterator from range iterator.
Range iterator for integer sets.
Advisor storing a single index
TFE propagator(PropagatorGroup g)
Only propagators (but not post functions) from g are considered.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
virtual void reschedule(Space &home)
Schedule function.
bool testSetEventLB(ModEvent me0, ModEvent me1, ModEvent me2)
Post propagator for SetVar SetOpType SetVar y
Generic domain change information to be supplied to advisors.
int index(void) const
Access index.
void dispose(Space &home, Council< A > &c)
Dispose the advisor.
bool assigned(View x, int v)
Whether x is assigned to value v.
virtual Actor * copy(Space &home, bool)
Copy propagator during cloning.
Post propagator for SetVar x
Propagation has not computed fixpoint.
GLBndSet ones
Accumulated one Booleans.
Propagator for channelling between set variable and its characteristic function
Gecode toplevel namespace
static void schedule(Space &home, Propagator &p, ModEvent me)
Schedule propagator p with modification event me.
bool testSetEventUB(ModEvent me0, ModEvent me1, ModEvent me2)
SetDelta delta
Accumulated delta information.
const Gecode::ModEvent ME_SET_VAL
Domain operation has resulted in a value (assigned variable)
const Gecode::ModEvent ME_SET_CARD
Domain operation has changed the variable cardinality.
int ModEventDelta
Modification event deltas.
int size(void) const
Return size of array (number of elements)
Home class for posting propagators
ChannelBool(Space &home, bool share, ChannelBool &p)
Constructor for cloning p.
bool include(Space &home, int i, int j, SetDelta &d)
Include the set in this set.
void dummy(Space &)
A dummy function for branching.
const Gecode::PropCond PC_BOOL_VAL
Propagate when a view becomes assigned (single value)
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable)
Finite set delta information for advisors.