[gecode-users] Adding variables incrementally
Malcolm Ryan
malcolmr at cse.unsw.edu.au
Mon Apr 28 08:40:48 CEST 2008
Yes, this is what I'm currently trying.
Malcolm
On 28/04/2008, at 3:47 PM, Mikael Zayenz Lagerkvist wrote:
> On Fri, Apr 25, 2008 at 5:28 AM, Malcolm Ryan <malcolmr at cse.unsw.edu.au
> > wrote:
>> In order to save memory, I've been trying to turn my planning code
>> into a two stage in which the first stage only creates and constrains
>> a certain critical subset of variables. When all the first-stage
>> variables have been assigned, additional variables are created and a
>> second stage of search occurs. The two stages are not completely
>> independent however, and there may be failures in the second stage
>> which require backtracking into the first. This should save memeory,
>> since the second-stage variables don't have to be carried around
>> during the first-stage search.
>>
>> I was hoping that I could do this simply by adding new variables and
>> constraints in the copy constructor at the appropriate moment, but it
>> seems that this does not work.
> </snip>
>> Is there any other way to do a two-stage search like this?
>
> While the copy-constructor is not the right place to add constraints
> and variables, there is a more fundamental problem with your scheme.
> When all the variables are assigned, all branchings will be finished,
> and thus the Space will be solved (status returns SS_SOLVED). The
> search will therefore stop the search and return the current solution.
>
> You could program you addition of variables and constraints as a
> branching, but since you want to do this when all the original
> variables are assigned, then I would suggest the following scheme.
> FirstStageSpace first = new FirstStageSpace();
> DFSIterator<FirstStageSpace> outerDFS =
> new DFSIterator<FirstStageSpace>(first);
> while (outerDFS.hasNext()) {
> FirstStageSpace firstsolution = outerDFS.next();
> SecondStageSpace second =
> new SecondStageSpace(firstsolution);
> DFSIterator<FirstStageSpace> innerDFS =
> new DFSIterator<SecondStageSpace>(second);
> if (innerDFS.hasNext()) {
> System.out.println(innerDFS.next()); break;
> }
> }
> I've not tested the above code, but I think the idea should be clear.
>
> Cheers,
> Mikael
>
> --
> Mikael Zayenz Lagerkvist, http://www.ict.kth.se/~zayenz/
More information about the gecode-users
mailing list