Page **1** of **1**

### how to get any element from a set

Posted: **Tue Apr 04, 2017 4:16 pm**

by **yanzhiping**

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'?

### Re: how to get any element from a set

Posted: **Tue Apr 04, 2017 5:54 pm**

by **Manassaldi**

Hi,

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

Bye

### Re: how to get any element from a set

Posted: **Wed Apr 05, 2017 9:10 am**

by **Renger**

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

### Re: how to get any element from a set

Posted: **Wed Apr 05, 2017 5:35 pm**

by **yanzhiping**

that works. Thanks!

Does GAMS not distinguish capital and lower letters?

### Re: how to get any element from a set

Posted: **Wed Apr 05, 2017 5:43 pm**

by **yanzhiping**

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

### Re: how to get any element from a set

Posted: **Wed Apr 05, 2017 7:53 pm**

by **cladelpino**

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;
```

### Re: how to get any element from a set

Posted: **Tue Jul 23, 2019 5:51 pm**

by **cardyn**

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

### Re: how to get any element from a set

Posted: **Wed Jul 24, 2019 7:50 am**

by **Renger**

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

or

Hope this helps

Cheers

Renger