[gecode-users] Reified Constraints do not propagate

Christian Schulte cschulte at kth.se
Tue Apr 10 13:19:58 CEST 2012


Maybe, not so clear yet. We will change reification for the next major
release and might at that time also think how to fix passing the consistency
level.

 

For the time being you should stick to what Guido has suggested.

 

Christian

 

--

Christian Schulte, www.ict.kth.se/~cschulte/

 

From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Max Ostrowski
Sent: Tuesday, April 10, 2012 12:42 PM
To: Guido Tack
Cc: users at gecode.org
Subject: Re: [gecode-users] Reified Constraints do not propagate

 

Thank you very much for the insight.
Unfortunately this could be a problem,
as i have to change my data structures.

Will this be fixed in future versions?

Best,
Max

On 04/10/2012 12:32 PM, Guido Tack wrote: 

This is a current shortcoming of the minimodel library.  For some linear
constraints (such as x==5 in this case) the IntConLevel is ignored.  To get
the full propagation, you have to post the constraint directly, like this: 

 

Gecode::rel(*test, test->x_[1], IRT_EQ, 5, test->b_[1], ICL_DOM);

 

Cheers,

Guido

 

On 10 Apr 2012, at 19:20, Max Ostrowski wrote:





I have a small example where i do not understand why no propagation takes
place.

test is a pointer to the space instance
x_ is an array of 10 IntVars(0,10)
b_ is an array of 2 BoolVars(0,1)


    LinRel rel1(test->x_[0],IRT_EQ,5);
    rel1.post(*test,true,ICL_DEF);

    Gecode::distinct(*test,test->x_,ICL_DEF);

    LinRel rel2(test->x_[1],IRT_EQ,5);
    Gecode::rel(*test, rel2 == test->b_[1],ICL_DEF);

    test->status();
    if (test->failed())
        std::cout << "Failed" << std::endl;
    std::cout << test->x_ << std::endl;
    std::cout << test->b_ << std::endl;


So i post das one of my elements x_[0] is 5, and all elements are distinct.
Now i have a reified constraint that x_[1] == 5.
The distinct constraint removes 5 from he domain of x_[1],
 but the propagator does not fire.
The result is:

{5, {0..4,6..10}, {0..4,6..10}, {0..4,6..10}, {0..4,6..10}, {0..4,6..10},
{0..4,6..10}, {0..4,6..10}, {0..4,6..10}, {0..4,6..10}}

{[0..1], [0..1]}


Even with ICL_DOM the boolean variable is not touched if values are removed
from the domain.
Also i think this could be easily done with "Advisors" ?
I have no experience with this, so my question:
Is this behavior the desired one?
Can this be changed if i have reifications like mine where i compare to
constants?

Thanks a lot,

Max 

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

 

-- 

Guido Tack,

http://www.csse.monash.edu/~guidot/ <http://www.csse.monash.edu/%7Eguidot/> 

 

 

 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20120410/0546bd47/attachment-0001.htm>


More information about the users mailing list