[gecode-users] Reification of the extensional constraint

Amina Kemmar kemmar.amina at gmail.com
Fri Jun 20 10:09:17 CEST 2014


Hi everybody,

Thanks for the explanation. I need just a half reification of the 
extensional constraint. For that, i implement a class named "reg" 
allowing to specify a control variable "b" as follow:

template <class View>
   class reg : public Propagator{
   protected:
         ViewArray<View> x;
         DFA dfa;
         Int::BoolView b;
     /// Constructor for posting
     reg(Space& home, ViewArray<View>& x0, Int::BoolView b0);
     /// Constructor for cloning \a p
     reg(Space& home, bool share, reg& p);
   public:
     /// Copy propagator during cloning
     virtual Actor*     copy(Space& home, bool share);
     /// Perform propagation
     virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
     virtual size_t dispose(Space& home);
     /// Post propagator for view array \a x
     static ExecStatus post(Space& home, const IntVarArgs& x0, const 
DFA& dfa, Int::BoolView b0);
   };

the constructor:

template <class View>
   forceinline
   reg<View>::reg(Space& home, ViewArray<View>& x0, Int::BoolView b0)
     : Propagator(home), x(x0), b(b0) {
             x.subscribe(home,*this,PC_INT_VAL);
             b.subscribe(home,*this,PC_BOOL_VAL);
     }

The post function:

   template <class View>
   ExecStatus
   reg<View>::post_amina(Space& home,  const IntVarArgs& x0, const DFA& 
dfa, Int::BoolView b){

      ViewArray<IntView> xv(home,x0);
*(void) new (home) reg<View>(home,xv,b);*
     return ES_OK;
   }

After compilation, I obtained the following error:

regular.hpp:115:5: error: cannot allocate an object of abstract type 
'myprop::reg<Gecode::Int::IntView>'
regular.hpp:41:9: note:   because the following virtual functions are 
pure within 'myprop::reg<Gecode::Int::IntView>':
/usr/local/include/gecode/kernel/core.hpp:811:22: note: virtual 
Gecode::PropCost Gecode::Propagator::cost(const Gecode::Space&, const 
ModEventDelta&) const

 1. This error is due to the line : *(void) new (home)
    reg<View>(home,xv,b); *if anyone have any idea about this, it will
    be very helpful for me.
 2. In the propagate function I call
    Gecode::Int::Extensional::post_lgp(home,x,dfa); x is of type
    IntVarArgs and not ViewArray, I want to know if it is the right way
    to to this?

Thanks.
---
Amina



On 06/15/2014 04:05 AM, Guido Tack wrote:
> Hi,
>
> you're right that you'd have to implement your own propagator for 
> that.  Before you do that you should check if you actually need full 
> reification (i.e. b <-> c) or if an implication would be enough (b -> 
> c).  In the latter case, you don't need to implement the negation of c 
> (where c is your extensional constraint).
>
> If you implement the full version, negating a DFA is (in principle) 
> easy, just make all accepting states rejecting and all rejecting 
> states accepting.  In the Gecode representation the rejecting states 
> aren't represented directly so you'll have to work around that a bit.
>
> Cheers,
> Guido
>
> -- 
> Guido Tack
> http://www.csse.monash.edu/~guidot/ 
> <http://www.csse.monash.edu/%7Eguidot/>
>
>
>
> On 14 Jun 2014, at 8:35 pm, Amina Kemmar <kemmar.amina at gmail.com 
> <mailto:kemmar.amina at gmail.com>> wrote:
>
>> Hi all,
>>
>> I want to use a reification version of the extensional constraint, 
>> but I think that it is not implemented in Gecode.
>> The chapter 24 explains how to implement a reification version of a 
>> constraint, I understand that we need the negation of the automata 
>> DFA. So, I want to know if there is an easy way to do this with 
>> extensional constraint? If you have any details about this, it will 
>> be very helpful for me.
>>
>> Thanks.
>>
>> Best regards,
>> ---
>> Amina
>>
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org <mailto:users at gecode.org>
>> https://www.gecode.org/mailman/listinfo/gecode-users
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20140620/52bc1029/attachment.html>


More information about the users mailing list