[gecode-users] Not all solutions, BAB vs. DFS

Martin Kreißig martin.kreissig at lss.uni-stuttgart.de
Fri Sep 4 15:28:52 CEST 2009


Alright. Thanks. But that is not the reason in my original code. I
missed it when writing the example.

How come you get 3 solutions? I get the following output (which are the
correct solution inserted):
{{-2,1}, {-1,5}, [2..3], {-4,3}, {-2,2}}
{-2, -1, 3, -4, 2}
{1, 5, 2, 3, -2}

best
Martin

On Fri, 2009-09-04 at 15:12 +0200, Guido Tack wrote:

> Your copy constructor lacks a call to the Space copy constructor:
> 
> CSP( bool share, CSP& s ) : Space(share, s) {
> 	v.update(*this, share, s.v);
> }
> 
> Then it should work (I get three solutions).
> 
> Cheers,
> 	Guido
> 
> Martin Kreißig wrote:
> 
> > Hi again,
> >
> > I tried my best to create a small example, but then I got stuck during
> > debugging at creating the DFS engine. (I was lead to core.hpp line  
> > 3165
> > (gecode 3.1.0)).
> > So I don't know yet if this example produces the problem I have.
> >
> > The algorithm creates an array with different sets (here 5 sets with 2
> > values each) and these sets are constrained by some equations (two in
> > this case) that result in 0.
> >
> > Here is the code:
> >
> > #include <gecode/int.hh>
> > #include <gecode/driver.hh>
> > #include <iostream>
> >
> > using namespace Gecode;
> >
> > class CSP : public Space {
> > 	protected:
> > 	IntVarArray v;
> > 	
> > 	public:
> > 	CSP( int arr[5][2] ) {
> >
> > 	// create array with different sets
> > 	int tmp[2];
> >
> > 	for (int i=0; i<5; i++){
> > 		tmp[0] = arr[i][0]; tmp[1] = arr[i][1];
> > 		IntVar i(*this, IntSet( tmp, 2));
> > 		v.add( *this, i );
> > 	}
> >
> > 	// formulate equations coefficients
> > 	IntArgs ia(5,0,-1,1,1,0);
> > 	IntArgs ib(5,-1,1,-1,0,1);
> >
> > 	// constraints
> > 	linear (*this,ia,v,IRT_EQ, 0, ICL_DEF );
> > 	linear (*this,ib,v,IRT_EQ, 0, ICL_DEF );
> >
> > 	branch ( *this,v,INT_VAR_SIZE_MAX,INT_VAL_MIN );
> >
> > }
> >
> > CSP( bool share, CSP& s ) {
> > 	v.update(*this, share, s.v);
> > }
> >
> > virtual Space* copy( bool share ) {
> > 	return new CSP(share,*this);
> > }
> >
> > void print( void ) {
> > 	std::cout << v << std::endl;
> > }};
> >
> > int main( void ) {
> > 	int arr[5][2] = {{-2,1},{-1,5},{3,2},{-4,3},{2,-2}};
> > 	CSP* c = new CSP(arr);
> > 	c->print();
> > 	DFS<CSP> dfs(c);
> > 	delete c;
> > 	CSP* cc;
> >
> > 	while ( cc=dfs.next() ) {
> > 		cc->print();
> > 		delete cc;
> > 	}
> > 	
> > 	return 0;
> > }
> >
> > best
> > Martin
> >
> >
> > On Fri, 2009-09-04 at 10:34 +0200, Guido Tack wrote:
> >> Martin Kreißig wrote:
> >>>> You can use opt.solutions(0) with DFS, too.
> >>>
> >>> Alright, but how do I pass opt to my CSP object?
> >>
> >> You don't.  The Options class is for use with the driver
> >> infrastructure.  So either you use the driver, and Script::run, or  
> >> you
> >> don't use options.  There's a different options class controlling the
> >> search itself (it's documented).
> >>
> >>> The problem is: When testing I insert - lets say 3 - specific
> >>> combination of variables that fulfil the constraints. Then every
> >>> variable gets its set (of size 3). So the output should be (at
> >>> least) 3 combinations. What I get is some of my original solutions,
> >>> some mixed solutions, but some of the originals are skipped.
> >>>
> >>> Can it be that some values are deleted? but that shouldnt be the  
> >>> case.
> >>
> >> That's impossible to answer without seeing the actual problem.  Maybe
> >> you can post a simple, small example.
> >>
> >> Cheers,
> >> 	Guido
> > -- 
> > Martin Kreißig <martin.kreissig at lss.uni-stuttgart.de>
> >
> >
> > _______________________________________________
> > Gecode users mailing list
> > users at gecode.org
> > https://www.gecode.org/mailman/listinfo/gecode-users
> 

-- 
Martin Kreißig <martin.kreissig at lss.uni-stuttgart.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20090904/86a8f562/attachment.htm>


More information about the gecode-users mailing list