[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