[gecode-users] Strange branching behaviour when using FunctionBrancher

Andrea Peano andrea.peano at unife.it
Tue Sep 23 13:22:49 CEST 2014


Hello,

I've implemented a search strategy by splitting the search into three
levels. I think the code may explain better this strategy.


void MyModel::post(Space& home)
{

static_cast<MyModel&>(home).second_level();

}

void MyModel::second_level()
{

status();

//do something with the partial solution
//print "second level"

branch(*this, BoolBranchDirection, INT_VAL_MIN());

branch(*this, post2);

}

void MyModel::post2(Space& home)
{

static_cast<MyModel&>(home).third_level();

}

void MyModel::third_level()
{

if(BoolBranchDirection.val()==0)
{
//print third level left
//left branch behaviour (install further branches)
}
else
{
//print third level right
//right branch behaviour (install further branches)
}

}

Imagine now we are fixing the partial solution before the "post" calling,
so the solver goes only once into the "post" function (and it's confirmed
by GIST).

The strange fact is that "second_level" is called more than once! Instead I
expect one call for "second_level" and two calls for "third_level", which
executes two different paths of the code.

These are the prints I read:
second level
third level left
second level
third level right
second level
third level right

But I expected:
second level
third level left
third level right

Can you clarify this behaviour please?

Furthermore, I experienced that I need to call "status()" within the second
level, to ground some variables I expected to be already ground. Is this
normal?

I'm using Gecode 4.2.1

Thanks,
Andrea


-- 

Andrea Peano - PhD student
Department of Engineering - University of Ferrara
Tel: +39 0532 97 4827
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20140923/35f7c7f6/attachment.html>


More information about the users mailing list