Assign One Dimensional Parameter to Two Dimensional Parameter

Hello!

I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,
Set i /13/;
Alias (i, j);
Set k /1
9/;
Table A(i, j)
1 2 3
1 0.5 1.2 3.9
2 2.2 0.8 5.2
3 2.3 5.0 7.3 ;
Parameter B(k);
Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);
I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.

Regards,
Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Helene



Here my solution after two glasses of fine Italian Barolo:



Parameter

B(k),

counter,

sumloop;



counter =0;



loop(i,

loop(j,

sumloop= ord(i) + counter*2+ (ord(j) -1);

loop(k$(ord(k) = sumloop),

b(k) = a(i,j);

);

);

counter = counter + 1);

display b;



There might be a more straight forward solution. Perhaps somebody else feels obliged.



Renger


\


Modelworks

Gewerbestrasse 16

3600 Thun – Switzerland

+41 79 818 53 73

Info@modelworks.ch







From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Helene Eriksson
Sent: Wednesday, April 3, 2013 7:33 PM
To: gamsworld@googlegroups.com
Subject: Assign One Dimensional Parameter to Two Dimensional Parameter



Hello!



I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,

Set i /1*3/;

Alias (i, j);

Set k /1*9/;

Table A(i, j)

1 2 3

1 0.5 1.2 3.9

2 2.2 0.8 5.2

3 2.3 5.0 7.3 ;

Parameter B(k);

Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);

I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.



Regards,

Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

This is a perfect example for the not so well known GAMS Matching operator (see e.g. Release Notes for 22.7 at http://www.gams.com/docs/release/release.htm#22.7):

Set i /13/;
Alias (i, j);
Set k /1
9/;

  • GAMS Matching Operator introduced in GAMS 22.7 (May 2008)
    set kij(k,i,j) /#k:(#i.#j)/;
    display kij;

Table A(i,j)
1 2 3
1 0.5 1.2 3.9
2 2.2 0.8 5.2
3 2.3 5.0 7.3;

Parameter B(k);
B(k) = sum(kij(k,i,j), A(i,j));
display A, B;

Michael Bussieck - GAMSWorld Coordinator


On Wednesday, April 3, 2013 3:41:29 PM UTC-4, Renger van Nieuwkoop wrote:

Hi Helene



Here my solution after two glasses of fine Italian Barolo:



Parameter

B(k),

counter,

sumloop;



counter =0;



loop(i,

loop(j,

sumloop= ord(i) + counter*2+ (ord(j) -1);

loop(k$(ord(k) = sumloop),

b(k) = a(i,j);

);

);

counter = counter + 1);

display b;



There might be a more straight forward solution. Perhaps somebody else feels obliged.



Renger


\


Modelworks

Gewerbestrasse 16

3600 Thun – Switzerland

+41 79 818 53 73

Info@modelworks.ch







From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Helene Eriksson
Sent: Wednesday, April 3, 2013 7:33 PM
To: gams...@googlegroups.com
Subject: Assign One Dimensional Parameter to Two Dimensional Parameter



Hello!



I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,

Set i /1*3/;

Alias (i, j);

Set k /1*9/;

Table A(i, j)

1 2 3

1 0.5 1.2 3.9

2 2.2 0.8 5.2

3 2.3 5.0 7.3 ;

Parameter B(k);

Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);

I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.



Regards,

Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




On Wednesday, April 3, 2013 3:41:29 PM UTC-4, Renger van Nieuwkoop wrote:

Hi Helene



Here my solution after two glasses of fine Italian Barolo:



Parameter

B(k),

counter,

sumloop;



counter =0;



loop(i,

loop(j,

sumloop= ord(i) + counter*2+ (ord(j) -1);

loop(k$(ord(k) = sumloop),

b(k) = a(i,j);

);

);

counter = counter + 1);

display b;



There might be a more straight forward solution. Perhaps somebody else feels obliged.



Renger


\


Modelworks

Gewerbestrasse 16

3600 Thun – Switzerland

+41 79 818 53 73

Info@modelworks.ch







From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Helene Eriksson
Sent: Wednesday, April 3, 2013 7:33 PM
To: gams...@googlegroups.com
Subject: Assign One Dimensional Parameter to Two Dimensional Parameter



Hello!



I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,

Set i /1*3/;

Alias (i, j);

Set k /1*9/;

Table A(i, j)

1 2 3

1 0.5 1.2 3.9

2 2.2 0.8 5.2

3 2.3 5.0 7.3 ;

Parameter B(k);

Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);

I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.



Regards,

Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Renger and Michael,

Thank you for giving nice replies, it solves my question perfectly.

Best regards,
Helene

On Wednesday, April 3, 2013 7:33:23 PM UTC+2, Helene Eriksson wrote:

Hello!

I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,
Set i /13/;
Alias (i, j);
Set k /1
9/;
Table A(i, j)
1 2 3
1 0.5 1.2 3.9
2 2.2 0.8 5.2
3 2.3 5.0 7.3 ;
Parameter B(k);
Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);
I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.

Regards,
Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hello Michael,

I am a new GAMS user and I have quick question about very similar problem. I want to obtain a kronecker product of one of my variable.
Is it possible to use Matching Operator to do that or is there any way to write it without using a loop? According to your post I wrote the following :

Set i / 13/;
Alias(i,j);
Set k / 1
9/;

Variables
w(i)
krow(k) kronecker product of w(i);Equations
obj objective function
kron kronecker product of s;
kron… krow(k) =e= sum(kij(k,i,j), w(i)*w(j));
obj… omega =e= (sum(i, w(i)*sum(j,q(i,k)*krow(k))));

But it doesn’t work. Any help will be appreciated.

Thank you very much in advance,

Umit


On Wednesday, April 3, 2013 4:34:14 PM UTC-4, Michael Bussieck wrote:

This is a perfect example for the not so well known GAMS Matching operator (see e.g. Release Notes for 22.7 at http://www.gams.com/docs/release/release.htm#22.7):

Set i /13/;
Alias (i, j);
Set k /1
9/;

  • GAMS Matching Operator introduced in GAMS 22.7 (May 2008)
    set kij(k,i,j) /#k:(#i.#j)/;
    display kij;

Table A(i,j)
1 2 3
1 0.5 1.2 3.9
2 2.2 0.8 5.2
3 2.3 5.0 7.3;

Parameter B(k);
B(k) = sum(kij(k,i,j), A(i,j));
display A, B;

Michael Bussieck - GAMSWorld Coordinator


On Wednesday, April 3, 2013 3:41:29 PM UTC-4, Renger van Nieuwkoop wrote:

Hi Helene



Here my solution after two glasses of fine Italian Barolo:



Parameter

B(k),

counter,

sumloop;



counter =0;



loop(i,

loop(j,

sumloop= ord(i) + counter*2+ (ord(j) -1);

loop(k$(ord(k) = sumloop),

b(k) = a(i,j);

);

);

counter = counter + 1);

display b;



There might be a more straight forward solution. Perhaps somebody else feels obliged.



Renger


\


Modelworks

Gewerbestrasse 16

3600 Thun – Switzerland

+41 79 818 53 73

Info@modelworks.ch







From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Helene Eriksson
Sent: Wednesday, April 3, 2013 7:33 PM
To: gams...@googlegroups.com
Subject: Assign One Dimensional Parameter to Two Dimensional Parameter



Hello!



I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,

Set i /1*3/;

Alias (i, j);

Set k /1*9/;

Table A(i, j)

1 2 3

1 0.5 1.2 3.9

2 2.2 0.8 5.2

3 2.3 5.0 7.3 ;

Parameter B(k);

Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);

I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.



Regards,

Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




On Wednesday, April 3, 2013 3:41:29 PM UTC-4, Renger van Nieuwkoop wrote:

Hi Helene



Here my solution after two glasses of fine Italian Barolo:



Parameter

B(k),

counter,

sumloop;



counter =0;



loop(i,

loop(j,

sumloop= ord(i) + counter*2+ (ord(j) -1);

loop(k$(ord(k) = sumloop),

b(k) = a(i,j);

);

);

counter = counter + 1);

display b;



There might be a more straight forward solution. Perhaps somebody else feels obliged.



Renger


\


Modelworks

Gewerbestrasse 16

3600 Thun – Switzerland

+41 79 818 53 73

Info@modelworks.ch







From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Helene Eriksson
Sent: Wednesday, April 3, 2013 7:33 PM
To: gams...@googlegroups.com
Subject: Assign One Dimensional Parameter to Two Dimensional Parameter



Hello!



I have a question regarding the way to assign a two dimensional parameter to an one dimensional parameter. For instance,

Set i /1*3/;

Alias (i, j);

Set k /1*9/;

Table A(i, j)

1 2 3

1 0.5 1.2 3.9

2 2.2 0.8 5.2

3 2.3 5.0 7.3 ;

Parameter B(k);

Now I want B(1)=A(1,1); B(2)=A(1,2); … B(9)=B(3,3);

I tried some methods like loop assignment but seemed not work, do you have any idea to achieve this? Thank you.



Regards,

Helene


To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\