[Gecode-bugs] New bug: Missing propagation in domain-consistent \"dom\" constraint

Gecode Bug Tracker bugs at gecode.org
Sun Oct 16 23:13:07 CEST 2016


New bug report for Gecode from Roberto Castañeda Lozano (rcas at sics.se).

Summary: Missing propagation in domain-consistent \"dom\" constraint

Gecode version: svn trunk
Platform: Linux

Details:
Hi,

The website documentation explains that
Gecode::dom (Home home, IntVar x, int l, int m, Reify r, IntConLevel icl=ICL_DEF)
performs domain-consistent propagation. Accordingly, propagating the following:

D(x) = {1, 4}
D(y) = {0, 1}
dom(x, 2, 3, y)

should yield D(y) = {0}. However, after a propagation loop the D(y) remains {0,1}.

Here is a minimal program to reproduce the problem:

#include <gecode/int.hh>
#include <gecode/search.hh>

using namespace Gecode;

class Foo : public Space {
public:
  IntVar x;
  BoolVar y;
  Foo(void) : x(*this, 1, 4), y(*this, 0, 1) {
    IntArgs xdom;
    xdom << 1 << 4;
    dom(*this, x, IntSet(IntArgs(xdom)));
    dom(*this, x, 2, 3, y, IPL_DOM);
  }
  Foo(bool share, Foo& s) : Space(share, s) {
    x.update(*this, share, s.x);
    y.update(*this, share, s.y);
  }
  virtual Space* copy(bool share) {
    return new Foo(share, *this);
  }
  void print(void) const {
    std::cout << \"x: \" << x << std::endl;
    std::cout << \"y: \" << y << std::endl;
  }
};

int main(int, char**) {
  Foo* m = new Foo;
  m->status();
  m->print();
  assert(m->y.assigned() && !m->y.val());
  return 0;
}

Good luck :)



More information about the bugs mailing list