[gecode-users] (no subject)
Sébastien Mouthuy
smouthuy at gmail.com
Wed May 16 12:21:00 CEST 2007
Well here is exactly what I want to do:
I have a class inheriting Space
class CSPSubset : Space{
SetVar S;
IntVar C;
CSPSubset(...) {
post some constraints on S and C
}
CSPSubset(bool share, CSPSubset& csps)
: Space(share,csps)
{
S.update(this, share, csps.S);
C.update(this, share, csps.C);
}
Actor* copy(..)...
...
};
The fact is that this CSP is only partial. I want to let an external
user to specify more constraints on S and C. Of course, I could ask the
user to extend CSPSubset, but I have several classes like CSPSubset
using SetVar S that I must constrain as the user wants. And I don't want
to ask the user to write one class extending each CSP I wrote.
Thus what I would like, is that the user would write a class like
class SVconstrainer {
//eventually some IntVar and SetVar
SetVar S1, S2;
IntVar Tmp;
constrain( Space *home, SetVar S, IntVar C){
// post of some propagators
cardinality(home, S , 1 , 3);
rel(home, S1, SRT_NEQ, S);
weight(home, .., .., S, C);
...
}
SVConstrainer (Space *home, bool share, SVconstrainer& svc){
S1.update(home, share, svc.S1);
S2.update(home, share, svc.S2;
Tmp.update(home, sharfe, svc.Tmp);
}
};
And then CSPSubset would look like as
class CSPSubset : Space{
SetVar S;
IntVar C;
SVconstrainer sv;
CSPSubset(SVconstrainer svc) {
post some constraints on S and C
svc.constrain(this, S, C);
sv = svc;
}
CSPSubset(bool share, CSPSubset& csps)
: Space(share,csps), sv(this, share, csps.sv)
{
S.update(this, share, csps.S);
C.update(this, share, csps.C);
}
Actor* copy(..)...
...
};
Hope this is precise enough. Because I am designing a global constraint,
I need that in order to have a nice interface with the user that will
use it.
Thanks in advance.
Cheers,
sebastien
Le mercredi 16 mai 2007 à 10:28 +0200, Christian Schulte a écrit :
> Still, you need to be more detailled. What is clear, you need to follow a
> structure where your variables are updated, check the examples that tell you
> how to. So, whatever you do, you must inherit from a Space, maintain the
> variables you want to use in that space and update your variables through
> that space.
>
> Christian
>
> --
> Christian Schulte, http://www.imit.kth.se/~schulte/
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of Sébastien Mouthuy
> Sent: Wednesday, May 16, 2007 8:51 AM
> To: Guido Tack
> Cc: users at gecode.org
> Subject: Re: [gecode-users] (no subject)
>
>
>
>
>
>
>
> Le mercredi 16 mai 2007 à 07:57 +0200, Guido Tack a écrit :
> > Hi.
> >
> > Sébastien Mouthuy wrote:
> >
> > > I want to create a class with a static function that could post
> > > propagators on a SetVar. i.e. something like [...]
> > >
> > > I tried this but it seems not to work.
> >
> > What exactly do you mean by "does not work"? Does it crash, or do you
> > simply not get the result you expect?
> I don't get the result I expected, like variables not updated, somethong
> strange...
>
> > What is the context, from where
> > do you call "constrainSetVar"?
>
> I want to write a generic CSP with some SetVar (this is easy). But I want an
> external user to be able to post constraints on these SetVar (this is the
> problem). Thus my generic CSP should be able to call a function (given by
> template or parameter) that will post propagators on some SetVar.
>
> I would also need a way to update SetVar when copying. I cannot simply
> extends the class defining the generic CSP, because I have several generic
> CSP that need to constraint SetVar in the same way (specified by the user).
>
> Thanks in advance,
>
> sebastien
> >
> > Cheers,
> > Guido
> >
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org https://www.gecode.org/mailman/listinfo/gecode-users
>
More information about the gecode-users
mailing list