[gecode-users] (no subject)

Christian Schulte cschulte at kth.se
Wed May 16 14:51:48 CEST 2007


The easiest is to design your container class such that it registers with
the CSPsubset class: then invoking update, for example, on the CSPclass
could call an appropriate member function on all registered container
classes.

But this is not really Gecode specific but rather software design.

Christian

--
Christian Schulte, http://www.imit.kth.se/~schulte/ 

-----Original Message-----
From: Sébastien Mouthuy [mailto:smouthuy at gmail.com] 
Sent: Wednesday, May 16, 2007 12:21 PM
To: cschulte at kth.se
Cc: 'Guido Tack'; users at gecode.org
Subject: RE: [gecode-users] (no subject)



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