I have three parameters each depending on a different set, for example:
Parameter par1(i)
/ 1 100
2 100 / ;
Parameter par2(j)
/ 1 100
2 100 / ;
Parameter par3(k)
/ 1 100
2 100 / ;
Now I would like to have all of the parameter values depending on a single set n. In other words, I would like to create a list of all combinations of the parameters. With the three example parameters above, that set would need 2^3 = 8 elements.
My problem: I can use the loop command over my sets i, j and k to create all of the combinations. However, I do not know how to assign the results to the set n. As far as I can see, I can only assign a parameter value using a set but not with a scalar which could count the iterations of the loop.
Any suggestions?
Create all combinations of multiple parameters
Re: Create all combinations of multiple parameters
I have really no idea what you try to do and if you explain why you want to do such thing in the first place we might give more useful advice, but you can advance a single element within a set (nn(n) = nn(n-1);), so you can accomplish what you try to do with the following code. Since I have no idea why you want to do all this I could not do something more useful that multiplying the individual parameters:
-Michael
Code: Select all
set i /1*2/; alias (i,j,k);
$eval sizeN power(card(i),3)
set n /1*%sizeN%/;
singleton set nn(n);
Parameter par1(i)
/ 1 100
2 100 / ;
Parameter par2(j)
/ 1 100
2 100 / ;
Parameter par3(k)
/ 1 100
2 100 / ;
parameter parn(n), par(i,j,k);
nn('1')=yes;
loop((i,j,k),
parn(nn) = par1(i)*par2(j)*par3(k);
par(i,j,k) = nn.val;
nn(n) = nn(n-1);
);
display parn, par;
Re: Create all combinations of multiple parameters
Hello Michael,
thank you so much for your answer, this is exactly what I was looking for. I just did not know how to go through the indexing set. For instance, I was not aware that I could do this: nn('1')=yes;
What I am trying to do with this is rearranging and aggregating some scenarios which are used in a model.
Besides, I did not know that it is possible to create sets with a calculated size using $eval. That is very good to know, thanks a lot for your example!
Best regards,
Luis
thank you so much for your answer, this is exactly what I was looking for. I just did not know how to go through the indexing set. For instance, I was not aware that I could do this: nn('1')=yes;
What I am trying to do with this is rearranging and aggregating some scenarios which are used in a model.
Besides, I did not know that it is possible to create sets with a calculated size using $eval. That is very good to know, thanks a lot for your example!
Best regards,
Luis
Re: Create all combinations of multiple parameters
Luis,
Looks like you found what you need, but another way to do this that is also helpful is to use a map. In the example below, the mapping set matches each element of n with a different i,j,k tuple. It sometimes help to dump the entire thing to GDX and browse it in the IDE: that really helps to see it.
Looks like you found what you need, but another way to do this that is also helpful is to use a map. In the example below, the mapping set matches each element of n with a different i,j,k tuple. It sometimes help to dump the entire thing to GDX and browse it in the IDE: that really helps to see it.
Code: Select all
set i /1*2/; alias (i,j,k);
$eval sizeN power(card(i),3)
sets
n /n1 * n%sizeN%/
map(n,i,j,k) / (#n):((#i).(#j).(#k)) /
;
Parameter par1(i)
/ 1 100
2 100 / ;
Parameter par2(j)
/ 1 100
2 100 / ;
Parameter par3(k)
/ 1 100
2 100 / ;
parameter parn(n), par(i,j,k);
par(i,j,k) = par1(i)*par2(j)*par3(k);
parn(n) = sum{map(n,i,j,k), par(i,j,k)};
Re: Create all combinations of multiple parameters
dirkse,
Thank you very much for the additional information! Mapping sets was actually my first idea, but I failed with the implementation and decided that a loop would be easier.
Thank you very much for the additional information! Mapping sets was actually my first idea, but I failed with the implementation and decided that a loop would be easier.