Hi,

I'm not sure why you're assigning the vectors from s to the vectors from this.  
You should instead create new vectors with the same capacity, probably somewhat 
like this:

listVarMachines = vector<IntVarArgs>(s.listVarMachines.size());

Otherwise you're updating into the same data structures.

Cheers,
Guido

On 22/04/2013, at 12:43 PM, Holmes Giovanny Salazar Osorio 
<hgsoso...@gmail.com> wrote:

> addin the list to the loop...
> 
> ---------- Forwarded message ----------
> From: Holmes Giovanny Salazar Osorio <hgsoso...@gmail.com>
> Date: 2013/4/21
> Subject: Re: [gecode-users] Updating Variables stored in a STL-Vector
> To: cschu...@kth.se
> 
> 
> Hello, I've changed some things in my code, and now, the program finishes 
> unexpectedly when it is trying to update the variables stored in the 
> STL-Vector.
> 
> now, I have the update function in this way:
> 
> MyClass(bool share, MyClasss) : MaximizeScript(share, s) {
> 
>     listVarMachines = s.listVarMachines;
>     listVarTStarts = s.listVarTStarts;
>     listVarTEnds = s.listVarTEnds;
>     listDuration = s.listDuration;
>     listResources = s.listResources;
>     listMachinesCapacity = s.listMachinesCapacity;
> 
>     for( int i=0; i < size; i++)
>     {
>         listVarMachines[i].update(*this, share,  s.listVarMachines[i])
> ;
>         listVarTStarts[i].update(*this, share,  s.listVarTStarts[i]);
>         listVarTEnds[i].update(*this, share,  s.listVarTEnds[i]);
>         listDuration[i] = s.listDuration[i];
>         listResources[i] = s.listResources[i];
>         listMachinesCapacity[i] = s.listMachinesCapacity[i];
>     }
> }
> 
> Debugging with eclipse, I could find that when Gecode is updating the first 
> vector:
> 
> listVarMachines[i].update(*this, share,  s.listVarMachines[i]);
> 
> It finishes unexpectedly, exactly when Gecode is executing this code:
> 
>   template<class Var>
>   forceinline void
>   VarArray<Var>::update(Space& home, bool share, VarArray<Var>& a) {
>     n = a.n;
>     if (n > 0) {
>       x = home.alloc<Var>(n);
>       for (int i = n; i--;)
>         x[i].update(home, share, a.x[i]);
>     } else {
>       x = NULL;
>     }
>   }
> 
> in the file array.hpp (more or less between the lines 1052 and 1063).
> 
> Thanks in advice for your help. Best regards,
> 
> Holmes
> 
> 
> 2013/4/17 Christian Schulte <cschu...@kth.se>
> I can’t really see the error. What happens if you just use a single machine?
> 
>  
> 
> Do you really have to use cumulatives? Would cumulative work instead?
> 
>  
> 
> Christian
> 
>  
> 
> --
> 
> Christian Schulte, www.ict.kth.se/~cschulte/
> 
>  
> 
> From: Holmes Giovanny Salazar Osorio [mailto:hgsoso...@gmail.com] 
> Sent: Wednesday, April 17, 2013 3:26 PM
> To: cschu...@kth.se
> Cc: users@gecode.org
> Subject: Re: [gecode-users] Updating Variables stored in a STL-Vector
> 
>  
> 
> Hello Christian,
> 
> I wrote bad the code in the mail, but in my class I update the variables in 
> this way,
> 
> listVarMachines[i].update(*this, share,  s.listVarMachines[i]); 
> 
> I'm initializing the stl-vectors that contain IntArgs in this way:
> 
> listResources.push_back(IntArgs(size, anIntegerArray));
> 
> And the stl-vectors that contain IntVarArray in this way:
> 
> for the machines:
> 
> listaVarMachines.push_back(IntVarArray(*this, size, anIntSet));
> 
> for the times of the tasks:
> 
> listVarTStart.push_back(IntVarArray(*this, size, 0, MAX-MAKESPAN));
> 
> MAX-MAKESPAN is an int. Take values > 500, it depends of the problem to solve.
> 
> Thanks a lot for helping me. Best regards,
> 
> Holmes
> 
> 
> 2013/4/17 Christian Schulte <cschu...@kth.se>
> 
> Yes, the update is definitely wrong, the code you sent should not even 
> compile, it must be:
> 
>                listVarMachines[i].update(*this, share,  s.listVarMachines[i]);
> 
> instead of
> 
>                listVarMachines.update(*this, share,  s.listVarMachines[i]);
> 
> and so on.
> 
>  
> 
> Then, do you initialize the variable and integer arrays properly?
> 
>  
> 
> Christian
> 
>  
> 
> --
> 
> Christian Schulte, Professor of Computer Science, KTH,  
> www.ict.kth.se/~cschulte/
> 
>  
> 
>  
> 
> From: users-boun...@gecode.org [mailto:users-boun...@gecode.org] On Behalf Of 
> Holmes Giovanny Salazar Osorio
> Sent: Wednesday, April 17, 2013 6:06 AM
> To: users@gecode.org
> Subject: [gecode-users] Updating Variables stored in a STL-Vector
> 
>  
> 
> Hello all,
> 
> I have Gecode 3.7.3 on Ubuntu. I'm working in a scheduling problem with 
> optmization, therefore, I'm using MaximizeScript and the cumulatives 
> constraint.
> 
> Right now, I'm having problems with the cumulatives constraint, because, It 
> doesn't works properly. I have something like 
> 
> take into account that: size = listVarMachines.size = listVarTStarts = 
> listVarTEnds = listDuration = listResources = listMachinesCapacity
> 
> for(int i = 0; i < size; i++){
>     cumulatives(
>         *this,
>         listVarMachines[i],
>         listVarTStarts[i],
>         listDuration[i],
>         listVarTEnds[i],
>         listResources[i],
>         listMachinesCapacity[i],
>         true,
>         ICL_BND);
> }
> 
> where listVarMachines, listVarTStarts, listVarTEnds are declared in this way 
> -> vector<IntVarArray> listVar...
> 
> And listDuration, listResources and listMachinesCapacity are declared in this 
> way -> vector<IntArgs> list...
> 
> When I force the elements in the vector listMachinesCapacity to take a value 
> of 1. The program assign more than 1 task at the same time. This is wrong, 
> because with the Limit of resource equals to 1, the cumulatives constraint 
> should assign one and only one task in the same unit of time.
> 
> I think that the problems is that the cumulatives constraint isn't being 
> propagated for any reason. And I have doubts with the way in that the 
> variables are being updated. 
> 
> In the update function I have something like this:
> 
> MyClass(bool share, MyClasss) : MaximizeScript(share, s) {
> 
>     listVarMachines = s.listVarMachines;
>     listVarTStarts = s.listVarTStarts;
>     listVarTEnds = s.listVarTEnds;
>     for( int i=0; i < size; i++)
>     {
>         listVarMachines.update(*this, share,  s.listVarMachines[i]);
>         listVarTStarts.update(*this, share,  s.listVarTStarts[i]);
>         listVarTEnds .update(*this, share,  s.listVarTEnds[i]);
>     }
> }
> 
> Dou you think that the problem can be the way of I'm updating the variables, 
> or do you have another idea?
> 
> 
> Thank you in advance!. Best regards,
> 
> Holmes
> 
> --
> 
> "El secreto del éxito, está en la disciplina"
> 
> Holmes Giovanny Salazar Osorio
> 
> Ingeniería de Sistemas
> 
> Estudiante 10mo Semestre
> 
> Universidad del Valle - Sede Tuluá
> 
> 
> 
> 
> --
> 
> "El secreto del éxito, está en la disciplina"
> 
> Holmes Giovanny Salazar Osorio
> 
> Ingeniería de Sistemas
> 
> Estudiante 10mo Semestre
> 
> Universidad del Valle - Sede Tuluá
> 
> 
> 
> 
> -- 
> "El secreto del éxito, está en la disciplina"
> Holmes Giovanny Salazar Osorio
> Ingeniería de Sistemas
> Estudiante 10mo Semestre
> Universidad del Valle - Sede Tuluá
> 
> 
> 
> -- 
> "El secreto del éxito, está en la disciplina"
> Holmes Giovanny Salazar Osorio
> Ingeniería de Sistemas
> Estudiante 10mo Semestre
> Universidad del Valle - Sede Tuluá
> _______________________________________________
> Gecode users mailing list
> users@gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users

_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to