[gecode-users] Linear constraint on propagation level ILC_DOM infinite loop

David Rijsman davidrijsman at gmail.com
Mon Dec 10 18:09:50 CET 2007


Hi Christian,

that seems to be the case, should have read more carefully, 10080^3
pretty much felt like an infinite loop,

thanks,

David

On Dec 10, 2007 5:34 PM, Christian Schulte <cschulte at kth.se> wrote:
> Hi David,
>
> To quote from the doc:
>        "Domain-consistent linear equations have exponential complexity, so
> use with care!"
>
> Maybe we should be even more explicit: never use it for anything that has
> more than four values per variable ;-( The cost of enforcing domain
> consistency is O(d^n) for n variables with maximal domain size d, where the
> worst case is the average case if the linear equation has unit coefficients.
>
>
> Given that the domains you are using are large and you have unit
> coefficients, you are just stuck in a slow finite loop! The implementation
> in Gecode is kind of naïve, but there is little one can do given that
> propagation is NP complete.
>
> I am always tempted to remove domain-consistent linear as it is so
> misleading.
>
> Cheers
> Christian
>
> --
> Christian Schulte, www.ict.kth.se/~cschulte/
>
>
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of David Rijsman
> Sent: Monday, December 10, 2007 5:15 PM
> To: users at gecode.org
> Subject: [gecode-users] Linear constraint on propagation level ILC_DOM
> infinite loop
>
> In Gecode 2.0.0  the following code seems to get stuck in an infinite loop:
>
> template <class Val, class View>  ExecStatus
> DomEq<Val,View>::propagate(Space* home)
>
> Am I missing something or doing something wrong, other propagation
> levels seem to work correct.
>
> ---------------------------------------------------------
>
> #include "gecode/minimodel.hh"
>
> class TestCase : public Gecode::Space {
> protected:
>  const int n;
>  Gecode::IntVarArray x;
> public:
>
>  /// Actual model
>  TestCase()
>    : n(3),
>      x(this,n)
>  {
>    x[0].init( this, 0, 7*60*24 );
>    x[1].init( this, 0, 7*60*24 );
>    x[2].init( this, 0, 7*60*24 );
>
>    Gecode::IntVarArgs variables( 3 );
>    variables[0] = x[0];
>    variables[1] = x[1];
>    variables[2] = x[2];
>
>    Gecode::IntArgs arguments( 3 );
>
>    arguments[0] =  1;
>    arguments[1] = -1;
>    arguments[2] = -1;
>
>    Gecode::linear( this, arguments, x, Gecode::IntRelType::IRT_EQ, 0,
> Gecode::ICL_DOM);
>
>
>    this->status();
>  }
>
>  TestCase(bool share, TestCase& s):
>    Space(share,s), n(s.n)
>  {
>    x.update(this, share, s.x);
>  }
>
>  /// Perform copying during cloning
>  virtual Space* copy(bool share)
>  {
>    return new TestCase(share,*this);
>  }
>
> };
>
> int main(int argc, char** argv)
> {
>  TestCase();
>  return 0;
> }
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>




More information about the gecode-users mailing list