Hi,

I am new to gecode and I have a simple question.

I am trying to find one possible solution for the following system:

1A + 1B >  0
1A + 0B >  0
1A + 1B >  0
0A + 0B <= 0

Obviously, there are many solutions. For instance, A=1 and B=1.

My code is the following:

class SolverSpace : public Gecode::Space
{
  IntVarArray s;

public:
  SolverSpace() :
s(*this, 2, -1000000, 1000000) // lots of possible values, to be on the safe side
  {
    { // 1A + 1B >  0
      IntArgs coeffs(2); coeffs[0] = 1;  coeffs[1] = 1;
      linear(*this, coeffs, s, IRT_GT, int(0));
    }
    { // 1A + 0B >  0
      IntArgs coeffs(2); coeffs[0] = 1;  coeffs[1] = 0;
      linear(*this, coeffs, s, IRT_GT, int(0));
    }
    { // 1A + 1B >  0
      IntArgs coeffs(2); coeffs[0] = 0;  coeffs[1] = 1;
      linear(*this, coeffs, s, IRT_GT, int(0));
    }
    { // 0A + 0B <= 0
      IntArgs coeffs(2); coeffs[0] = 0;  coeffs[1] = 0;
      linear(*this, coeffs, s, IRT_LE, int(0));
    }

    branch(*this, s, INT_VAR_SIZE_MIN(), INT_VAL_MIN());
  }

  SolverSpace(bool share, SolverSpace& e) :
    Gecode::Space(share, e)
  {
    s.update(*this, share, e.s);
  }

  virtual Space *copy(bool share)
  {
    return new SolverSpace(share, *this);
  }

  void print()
  {
    for (int i = 0; i < 2; i++)
      std::cout << s[i] << ", ";
    std::cout << std::endl;
  }
}

Calling code:

SolverSpace*m = new SolverSpace();
DFS<SolverSpace> e(m);
delete m;
if (SolverSpace *s = e.next()) {
  s->print(); delete s;
}

To my surprise, no solution is found. What am I doing wrong?

Thank you,

Fred


_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to