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.kreis...@lss.uni-stuttgart.de> > > > > > > _______________________________________________ > > Gecode users mailing list > > us...@gecode.org > > https://www.gecode.org/mailman/listinfo/gecode-users > -- Martin Kreißig <martin.kreis...@lss.uni-stuttgart.de>
_______________________________________________ Gecode users mailing list us...@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users