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()) {
110 :
Super(home,share,
p), running(false) {
111 co.update(home, share,
p.co);
133 (void) Super::dispose(home);
134 return sizeof(*this);
147 if (zeros.size() > 0) {
152 if (ones.size() > 0) {
159 if (delta.glbMin() != 1 || delta.glbMax() != 0) {
160 if (!delta.glbAny()) {
161 for (
int i=delta.glbMin();
i<=delta.glbMax();
i++)
170 if (delta.lubMin() != 1 || delta.lubMax() != 0) {
171 if (!delta.lubAny()) {
172 for (
int i=delta.lubMin();
i<=delta.lubMax();
i++)
177 for (; cur < lub.min(); cur++) {
182 for (; cur <
x.size(); cur++) {
197 const SetDelta&
d = static_cast<const SetDelta&>(
_d);
200 int index =
a.index();
201 if ( (running && index == -1 && me !=
ME_SET_VAL)
207 if (
x[index].zero()) {
209 zeros.include(home, index, index,
dummy);
211 assert(
x[index].
one());
213 ones.include(home, index, index,
dummy);
221 SetDelta(2,0, delta.lubMin(), delta.lubMax());
223 if (delta.glbMin() == 1 && delta.glbMax() == 0) {
226 delta.lubMin(), delta.lubMax());
228 if (delta.glbMin() != 2 || delta.glbMax() != 0) {
229 if ((delta.glbMin() <=
d.glbMin() && delta.glbMax() >=
d.glbMin())
231 (delta.glbMin() <=
d.glbMax() && delta.glbMax() >=
d.glbMax())
236 delta.lubMin(), delta.lubMax());
239 SetDelta(2, 0, delta.lubMin(), delta.lubMax());
248 SetDelta(delta.glbMin(), delta.glbMax(), 2,0);
250 if (delta.lubMin() == 1 && delta.lubMax() == 0) {
252 SetDelta(delta.glbMin(), delta.glbMax(),
253 d.lubMin(),
d.lubMax());
255 if (delta.lubMin() != 2 || delta.lubMax() != 0) {
256 if ((delta.lubMin() <=
d.lubMin() && delta.lubMax() >=
d.lubMin())
258 (delta.lubMin() <=
d.lubMax() && delta.lubMax() >=
d.lubMax())
261 SetDelta(delta.lubMin(), delta.lubMax(),
267 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.
void dummy(Space &home)
A dummy function for branching.
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.
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
#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.
struct Gecode::@511::NNF::@54::@56 a
For atomic nodes.
bool testSetEventLB(ModEvent me0, ModEvent me1, ModEvent me2)
Node * x
Pointer to corresponding Boolean expression node.
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.
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)
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.
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable)
Finite set delta information for advisors.