[gecode-users] Problem with FlatzincSpace deep copy

Guido Tack tack at gecode.org
Fri Feb 22 10:29:09 CET 2013


As I said, using copy won't work, in fact it's likely that this causes the problem.  Simply call status() on the space before calling clone(), that will get rid of the exception (SpaceNotStable has nothing to do with whether there are any branchers).

Cheers,
Guido

On 22/02/2013, at 20:26 , Mohamed Rezgui <kyo.alone at gmail.com> wrote:

> and the clone() method throw en exeption Gecode::SpaceNotStable because there are no branchers
> and this is why I used copy()
> 
> Best regards,
> Mohamed REZGUI
> 
> 2013/2/22 Mohamed Rezgui <kyo.alone at gmail.com>
> OK thank you I change it but the bug is still here :S
> 
> Best Regards
> Moahmed REZGUI
> 
> 
> 2013/2/22 Guido Tack <tack at gecode.org>
> Hi,
> 
> you're using several classes not in the way they were designed.
> 
> First of all, you have to call clone on fs instead of copy.
> 
> Secondly, you're not supposed to create the Engine* like that.  Try the following code:
> 
> BAB<FlatZincSpace> bab(s_copy, opt);
> FlatZincSpace* solution = bab.next();
> 
> Please have a look at the tutorial documentation, these things are explained there.
> 
> Cheers,
> Guido
> 
> On 22/02/2013, at 20:04 , Mohamed Rezgui <kyo.alone at gmail.com> wrote:
> 
>> Hi everybody, 
>> 
>> I have a bug to copy (deep copy) a FlatzincSpace without branhing (no Branchers) 
>> when I would like to start a branch and bound in only two decision variables.
>> 
>> <code>
>> Printer p;
>> FlatZincSpace* fs = FlatZincSpace::parse(......); 
>> 
>> FlatZincSpace* s_copy = fs->copy(false);
>> s_copy->shrinkArrays(p);
>> 
>> 
>> SearchOptions opt = o;
>> opt.threads = 1.0; //MonoThread
>> opt.expand();
>> 
>> Gecode::IntVarArgs vars(2);
>> vars[0] = s_copy->iv[0];
>> vars[1] = s_copy->iv[1];
>> 
>>         	
>> Gecode::branch(*s_copy, vars, Gecode::INT_VAR_NONE(), Gecode::INT_VAL_MIN());
>> 		
>> Gecode::Search::Engine* bab = Gecode::Search::bab(s_copy, 1.0, opt); 
>>         
>> FlatZincSpace* solution = NULL;
>> solution = static_cast<FlatZincSpace*>(bab->next()) ;//<----------------------- Bug here
>> </code>
>> 
>> the bug is declared in this instruction line 85 
>> file search/sequential/bab.hh
>> <code>
>> forceinline 
>>   BAB::BAB(Space* s, size_t sz, const Options& o)
>>     : Worker(sz), opt(o), d(0), mark(0), best(NULL) {
>>     current(s); //<----------------------- Bug here
>> </code>
>> 
>> Precisely when there is an allocation of an actorlink in s->allocated() 
>> file search/worker.hh  line 162
>> <code>
>> forceinline void
>>   Worker::current(const Space* s) {
>>     if (s == NULL) {
>>       mem_total -= mem_cur;
>>       mem_cur = 0;
>>     } else {
>>       mem_cur = mem_space + s->allocated(); //<----------------------- Bug here
>>       mem_total += mem_cur;
>>       if (mem_total > memory)
>>         memory = mem_total;
>>     }
>>   }
>> 
>> With Gecode rev13367
>> 
>> Can you help me please ?
>> 
>> Best Regards,
>> Mohammed REZGUI
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org
>> https://www.gecode.org/mailman/listinfo/gecode-users
> 
> -- 
> Guido Tack,
> http://www.csse.monash.edu/~guidot/
> 
> 
> 
> 
> 
> 
> -- 
> Cordialement,
> Mohamed REZGUI
> 
> 
> 
> -- 
> Cordialement,
> Mohamed REZGUI
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users

-- 
Guido Tack,
http://www.csse.monash.edu/~guidot/



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20130222/c8872d20/attachment-0001.html>


More information about the users mailing list