how to get any element from a set Topic is solved

Problems with syntax of GAMS
Post Reply
yanzhiping
User
User
Posts: 85
Joined: 2 years ago

how to get any element from a set

Post by yanzhiping » 2 years ago

If I have a set
A/a1,a2/;

How may I get the first or second element from set A?
Is there anyway to get element 'a1'?

Manassaldi
User
User
Posts: 83
Joined: 2 years ago
Location: Rosario - Argentina

Re: how to get any element from a set

Post by Manassaldi » 2 years ago

Hi,
For example, if yours variable is H(A) the first element corresponds to H('a1')
Bye

User avatar
Renger
Posts: 353
Joined: 2 years ago

Re: how to get any element from a set

Post by Renger » 2 years ago

Hi
If you want a specific set element, you can also use the ord and card functions:

Code: Select all

set 
A/a1,a2/;
parameter h(a);

* first element
h("a1")
h(a)$(ord(a) = 1)

* second element
h("a2") 
h(a)$(ord(a) = 2)

* last element
h(a)$(ord(a) eq card(a))

Cheers
Renger
____________________________________
Enjoy modeling even more: The lazy economist

yanzhiping
User
User
Posts: 85
Joined: 2 years ago

Re: how to get any element from a set

Post by yanzhiping » 2 years ago

that works. Thanks!

Does GAMS not distinguish capital and lower letters?

yanzhiping
User
User
Posts: 85
Joined: 2 years ago

Re: how to get any element from a set

Post by yanzhiping » 2 years ago

the way you showed is to grab elements from a parameter.

How about if we want to grab 'a1' from set A?
Is it A$(ord(A)=1) ?
arnyeinstein wrote:Hi
If you want a specific set element, you can also use the ord and card functions:

Code: Select all

set 
A/a1,a2/;
parameter h(a);

* first element
h("a1")
h(a)$(ord(a) = 1)

* second element
h("a2") 
h(a)$(ord(a) = 2)

* last element
h(a)$(ord(a) eq card(a))

Cheers
Renger

cladelpino
User
User
Posts: 108
Joined: 2 years ago

Re: how to get any element from a set

Post by cladelpino » 2 years ago

Does GAMS not distinguish capital and lower letters?
True. It does not.

To "populate" a set:

Code: Select all

set A /a1,a2/;
set B(A);

B(A)=YES$(ord(A)=2);

display B;

cardyn
User
User
Posts: 3
Joined: 3 weeks ago

Re: how to get any element from a set

Post by cardyn » 3 weeks ago

Hi Renger,

when I assign an element of a parameter to a scalar, error happens with "Uncontrolled set entered as constant" and "Set for 'ord' is not controlled"
Set A /a1,a2/;
parameter h(a) /a1*a2 2/;
scalar y /0/;
y=h(a)$(ord(a) = 1);

Could you please tell where the problem is? Thank you.

Best regards,
Yongning
Renger wrote:
2 years ago
Hi
If you want a specific set element, you can also use the ord and card functions:

Code: Select all

set 
A/a1,a2/;
parameter h(a);

* first element
h("a1")
h(a)$(ord(a) = 1)

* second element
h("a2") 
h(a)$(ord(a) = 2)

* last element
h(a)$(ord(a) eq card(a))

Cheers
Renger

User avatar
Renger
Posts: 353
Joined: 2 years ago

Re: how to get any element from a set

Post by Renger » 3 weeks ago

Hi
y is defined as a scalar, so no index. If you write it like you did, Gams expects a set indicator also on the RHS. But this might not what you want, as you set the values for y for all other elements of a to zero:

Code: Select all

parameter y(a);

y(a)$(ord(a) =1) = h(a);
display y(a)
You could keep y as a scalar and write the following

Code: Select all

loop(a, 
y = h(a)$(ord(a) = 1);
);
or

Code: Select all

y = h("a1")
Hope this helps
Cheers
Renger
____________________________________
Enjoy modeling even more: The lazy economist

Post Reply