[gecode-users] Remapping of BoolVar propagation conditions

Vincent Barichard Vincent.Barichard at univ-angers.fr
Tue Dec 1 18:21:37 CET 2009


Hi Guido,

That was my first thought. But I didn't understand why this remapping  
was there. Christian said in a previous mail that removing the mapping  
will break all propagators that are used for integer as well as for  
boolean variables! If I pass the pc unchanged, will it break something  
in Gecode ? I don't want to break something, I would like to add  
safely my piece of code.

If removing it doesn't break anything, will this mapping be still  
there in the future versions ?

Thank you again, I really appreciate the time you spent to answer my  
questions :)

Cheers,
Vincent

Le 1 déc. 09 à 16:30, Guido Tack a écrit :

> Hi Vincent,
>
> the rewriting is currently done in int/var-imp/bool.hpp.  Just  
> remove the rewriting there and pass the pc unchanged, add rewriting  
> to all the normal Gecode BoolView classes, and then add your own  
> BoolView class that doesn't rewrite.
>
> Cheers,
> 	Guido
>
> Vincent Barichard wrote:
>
>> Dear Christian,
>>
>> Thank you very much for your mail. I'm sorry, I don't understand  
>> your answer. Why having other BoolView classes will
>> help me ? I added member functions in the BoolViews classes. I  
>> didn't change the existing ones,
>> I only added member functions which notify the ME_BOOL_SAME event.
>>
>> In my own propagator (let's call it M) I call the recently added  
>> functions in the BoolViews. So the ME_BOOL_SAME
>> event is sent.
>>
>> I also modified one propagator of Gecode (let's call it P') and  
>> make it subscribe to the PC_BOOL_SAME propagation condition (I only  
>> added "x1.subscribe(home, *this, PC_BOOL_SAME)" in constructor).
>> In the "propagate" function of P' I added instructions which are  
>> only relevant if a ME_BOOL_SAME event has been sent before.
>>
>> So when M is woke up (because it subscribe to PC_BOOL_VAL  
>> propagation condition) it may call the new member functions in the  
>> BoolViews classes which sent the ME_BOOL_SAME event. I would like  
>> that propagators which subscribe to the PC_BOOL_SAME propagation  
>> condition and only these ones, be scheduled to wake up (for example  
>> P' will be scheduled if it shares a variable with M). As no  
>> assignment has been made by the M propagator, I don't want that  
>> other propagators wake up except if a ME_BOOL_VAL event has been  
>> sent from elsewhere.
>>
>> Unfortunately, as all propagation condition subscribings for  
>> Boleans variables are remapped to PC_BOOL_VAL, P' will not awake if  
>> a ME_BOOL_SAME event is sent.
>>
>> May have I another choice but to use the ME_BOOL_VAL event instead  
>> of ME_BOOL_SAME in my new member functions of the BoolView  
>> classes ? As a result, all propagators will be awaken even if they  
>> can't propagate removal, indeed no assignment has been made.
>>
>> Don't hesitate to ask me if I'm not clear enough.
>>
>> Cheers,
>> Vincent
>>
>> Le 30 nov. 09 à 16:35, Christian Schulte a écrit :
>>
>>> Actually what you have to do is the following: you define two  
>>> classes for
>>> Boolean views, one that rewrites its propagation conditions and  
>>> the other
>>> one that does not. Then your propagators can use the views without  
>>> rewriting
>>> while the other propagators can use the variables with rewriting.
>>>
>>> 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 Vincent Barichard
>>> Sent: Monday, November 30, 2009 9:33 AM
>>> To: Christian Schulte
>>> Cc: 'Guido Tack'; 'gecode list'
>>> Subject: Re: [gecode-users] Remapping of BoolVar propagation  
>>> conditions
>>>
>>> Hi,
>>>
>>> Thank you both for your answers. As I don't want to break all  
>>> propagators
>>> that are used for integer as well as boolean variables, I see no  
>>> choice but
>>> to use PC_BOOL_VAL.
>>>
>>> Maybe one of you may see another way ? I make new functions on  
>>> Boolean
>>> variables (and associated views) which don't set domain to 1 or 0  
>>> (I copied
>>> "ModEvent  BoolVarImp::one_none(Space& home)" and removed the  
>>> unwanted
>>> instructions). These functions notify new events (called  
>>> ME_BOOL_SAME in
>>> bool.vis file (see attached file)). I mapped this new event to the
>>> PC_BOOL_SAME propagation condition.
>>>
>>> Now I change an existing propagator (like the "Or" propagator),  
>>> and I want
>>> it to be awaken when ME_BOOL_SAME is emitted. As the variable is  
>>> not yet
>>> assigned, I didn't want to emit the ME_BOOL_VAL event because I  
>>> didn't want
>>> to wake up propagators which only subscribed to the PC_BOOL_VAL  
>>> condition.
>>>
>>> So during propagation, I call my new functions on Boolean  
>>> variables, the
>>> ME_BOOL_SAME event is sent and propagators which subscribe to the
>>> PC_BOOL_SAME condition are wake up. Other propagators are not  
>>> awaken (except
>>> if a ME_BOOL_VAL event has also been sent). Is it possible ?
>>> Should I use ME_BOOL_VAL ? If I use ME_BOOL_VAL other propagators  
>>> will be
>>> awaken for nothing.
>>>
>>> Thanks for your help.
>>>
>>> Cheers,
>>> Vincent
>>
>> Vincent Barichard         Université d'Angers (LERIA)
>> Tel: 02 41 73 52 06      Département Informatique
>> Fax: 02 41 73 50 73     H203
>>

Vincent Barichard         Université d'Angers (LERIA)
Tel: 02 41 73 52 06      Département Informatique
Fax: 02 41 73 50 73     H203




More information about the users mailing list