[gecode-users] Multiple separate searches
Guido Tack
tack at gecode.org
Mon Apr 23 03:45:38 CEST 2012
--
Guido Tack
http://www.csse.monash.edu/~guidot/
On 20/04/2012, at 10:16 PM, Milton Friedman wrote:
> The function code is:
>
> void DoOneDFS(int argc, char* argv[],const char* ModelName){
> SizeOptions optModel(ModelName);
> optModel.iterations(1);
> optModel.size(3);
> optModel.parse(argc,argv);
> ModelB* s = new ModelB(optModel);
> //call once
> DFS<ModelB> e(s);
> bool wasBranch = SS_BRANCH==s->status();
> bool wasSolved = SS_SOLVED==s->status();
> bool wasFailed = SS_FAILED==s->status();
> //loop while wasBranch and not null, wasSolved or wasFailed
> while (wasBranch && s) {
> cout<<"Branch"<<endl;
> s->myprint();
> delete s; //in while loop...deletes space we branched from
> //calls Gecode...then done with this next space
> Packing2DRectTopology* s = e.next();
> wasBranch = SS_BRANCH==s->status();
> wasSolved = SS_SOLVED==s->status();
> wasFailed = SS_FAILED==s->status();
> }
> if (wasSolved){ //record it
> cout<<"Solved"<<endl;
> s->myprint();
> s->mydebugprint();
> system("PAUSE");
> }
> else if (wasFailed){ //ignore it
> //system("PAUSE");
> }
> else { //unexpected
> cout<<"Shouldn't arrive here. status: "<<s->status()<<endl;
> system("PAUSE");
> }
> //delete s; //<<<---Works if commented out; fails otherwise...why?
> }
>
When you construct DFS from a space, DFS takes ownership of that space, unless you give it a search options argument where you set clone to false (see the reference documentation for the DFS class). So here it depends on whether s is still the initial space (in which case you mustn't delete it) or a space returned from e.next (in which case you must delete it).
But that's not the main problem with the code above: a space returned from e.next() is always NULL or SS_SOLVED.
What you probably want to do is to implement your own Brancher that runs a DFS internally. There is code that does more or less that in gecode/flatzinc/flatzinc.cpp in the current svn trunk, it's called "AuxVarBrancher". Perhaps that can help you to get started.
Cheers,
Guido
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20120423/e68c607a/attachment.htm>
More information about the users
mailing list