[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