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

Guido Tack tack at ps.uni-sb.de
Fri Sep 4 15:12:12 CEST 2009


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





More information about the gecode-users mailing list