[gecode-users] Problem with FlatzincSpace deep copy

Mohamed Rezgui kyo.alone at gmail.com
Fri Feb 22 10:26:17 CET 2013


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20130222/5ee2a7de/attachment.html>


More information about the users mailing list