Hello,
I started to use cplex opl a few months ago. Now I have a problem which I can´t solve by myself.
It is a scheduling problem with l=1..4 Lines; i,j=1..25 Blocks and s=1..20 MicroPeriods.
Because every block is assigned to a line it should be possible to reduce the amount of possible combinations for the decisionvariable z_lijs. z_lijs is 1 if there is a changeover from block i to block j on line l and in microperiod s/ 0 otherwise. The objective function is to minimize: z_lijs * c_lij (c_lij are setup costs).
range Line =1..4;
range Block=1..25;
range Micro=1..20;
tuple zIndizes{
int Line;
int Block1;
int Block2;
int Micro;
}
{zIndizes} Index = {<l,i,j,s> l in Line: l==1, i in 20..24, j in 20..24, s in 1..20};
{zIndizes} Index = {<l,i,j,s> l in Line: l==2, i in 11..19, j in 11..19, s in 1..20};
{zIndizes} Index = {<l,i,j,s> l in Line: l==3, i in 1..10, j in 1..10, s in 1..20};
{zIndizes} Index = {<l,i,j,s> l in Line: l==4, i in Block: i==25, j in Block: j==25, s in 1..20};
float cLineBlockBlock=…;
dvar float+ zIndex;
minimize
sum (l in Line, i in Block1, j in Block2, s in Micro)
c[l][i][j]*z[<l,i,j,s>};
I know that it is wrong to define 4 types of “Index” but my intention was to show what the problem is about.
If it is possible I would like the setupcostvariable to stay like c[l][i][j] and not be changed to c<l,i,j>.
Maybe there is a possibility to use IFconstraints in the definition of the tuple or to use subtuples? I tried different things but it didn’t work out well.
It would be really nice if somebody could help me.
Thanks,
Kind regards,
MP_10
Topic

Re: Restrict combinations of indices for decision variable to reduce runtime.
20130301T17:08:42ZThis is the accepted answer. This is the accepted answer.Finally, I solved the problem by creating a new array LILineBlock where LI[l][i]=1 if Block i is produced on line l.
{zIndizes} Index = {<l,i,j,s> l in Line, i in Block1, j in Block2, s in Micro: LI[l][i]==1 && LI[l][j]==1};
But now there is a little problem with a constraint in the model.
In the constraint, I would like to refer to the i and j from the tuple.
So I tried this but it doesn´t work:
forall(l in Line, d in Macro2)
sum (idx in Index: idx.i==i)sum(idx in Index: idx.j==j) sum(s in S[d])
stb[l][i][j]*z<l,i,j,s>....
Can anybody tell how the sum i and sum j have to be formulated so that the i,j are taken from tuple "Index"?
Thanks,
regards
MP_10 
Re: Restrict combinations of indices for decision variable to reduce runtime.
20130301T19:39:31ZThis is the accepted answer. This is the accepted answer. SystemAdmin
 20130301T17:08:42Z
Finally, I solved the problem by creating a new array LILineBlock where LI[l][i]=1 if Block i is produced on line l.
{zIndizes} Index = {<l,i,j,s> l in Line, i in Block1, j in Block2, s in Micro: LI[l][i]==1 && LI[l][j]==1};
But now there is a little problem with a constraint in the model.
In the constraint, I would like to refer to the i and j from the tuple.
So I tried this but it doesn´t work:
forall(l in Line, d in Macro2)
sum (idx in Index: idx.i==i)sum(idx in Index: idx.j==j) sum(s in S[d])
stb[l][i][j]*z<l,i,j,s>....
Can anybody tell how the sum i and sum j have to be formulated so that the i,j are taken from tuple "Index"?
Thanks,
regards
MP_10
Paul
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. (Goethe) 
Re: Restrict combinations of indices for decision variable to reduce runtime.
20130307T11:10:52ZThis is the accepted answer. This is the accepted answer. SystemAdmin
 20130301T19:39:31Z
I cannot read your code, since you did not surround it with code tags, but I suspect that what you need to do its create a set of valid tuples and then index the constraint over all tuples in the set. I'm pretty sure the OPL documentation explains this and provides examples.
Paul
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. (Goethe)
can you post your code with code tags and add your dat file?
regards 
Re: Restrict combinations of indices for decision variable to reduce runtime.
20130317T15:50:43ZThis is the accepted answer. This is the accepted answer. AlexFleischer
 20130307T11:10:52Z
Hi,
can you post your code with code tags and add your dat file?
regards
Finally I solved the problem. I initially didn´t understand how the tuples work.
{forall(l in Line, d in Macro2)
sum (idx in zIndex: idx.l==l && idx.s in S[d])
stbhttp://idx.lhttp://idx.ihttp://idx.j*zidx ...}
Regards,
MP10 
Re: Restrict combinations of indices for decision variable to reduce runtime.
20130317T15:55:40ZThis is the accepted answer. This is the accepted answer. SystemAdmin
 20130317T15:50:43Z
Thank you for your responses.
Finally I solved the problem. I initially didn´t understand how the tuples work.
{forall(l in Line, d in Macro2)
sum (idx in zIndex: idx.l==l && idx.s in S[d])
stbhttp://idx.lhttp://idx.ihttp://idx.j*zidx ...}
Regards,
MP10
forall(l in Line, d in Macro2) sum (idx in zIndex: idx.l==l && idx.s in S[d]) stb[idx.l][idx.i][idx.j]*z[idx] ...