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

### Question about replacing two sets

Posted: **Mon Mar 04, 2019 4:23 am**

by **TsungHaoHu**

Hi all,

I have a question I would like to ask.

How to have a simplified conversion of DATA in two different Sets?

For example, the GAMS codes as following:

Code: Select all

```
set
i /i1 * i12/
j /j1 * j3/
;
parameter
Data_1(i)
/
i1 5
i2 3
i3 0
i4 6
i5 7
i6 9
i7 0
i8 12
i9 0
i10 2
i11 8
i12 1
/
Data_2(j)
;
Data_2("j1") = Data_1("i1");
Data_2("j2") = Data_1("i5");
Data_2("j3") = Data_1("i9");
Data_2(j) = Data_2(j) + eps;
display Data_1,Data_2;
execute_unload "Out.gdx"
```

Thanks.

### Re: Question about replacing two sets

Posted: **Fri Mar 08, 2019 2:36 pm**

by **Manassaldi**

I do not know if I understood correctly.

Your goal is to express Data_2 in a simpler or more compact way?

I hope this can help you

Code: Select all

```
set
i /i1 * i12/
j /j1 * j3/
DATA(j,i) /j1.i1,j2.i5,j3.i9/
;
parameter
Data_1(i)
/
i1 5
i2 3
i3 0
i4 6
i5 7
i6 9
i7 0
i8 12
i9 0
i10 2
i11 8
i12 1
/
Data_2(j)
;
Data_2(j) = sum(i$DATA(j,i),Data_1(i));
Data_2(j) = Data_2(j) + eps;
display Data_1,Data_2;
```

### Re: Question about replacing two sets

Posted: **Mon Mar 11, 2019 2:25 am**

by **TsungHaoHu**

Sorry, I didn't describe the problem very well. My goal is to express Data_2 in a simpler way. The code "Data_2(j) = sum(i$DATA(j,i),Data_1(i))" is more simplified than "Data_2("j1") = Data_1("i1"),...etc".

But the set DATA(j,i) need to set one by one. Is there a more simplified way to express it if ?

Thanks.

### Re: Question about replacing two sets

Posted: **Mon Mar 11, 2019 8:39 am**

by **bussieck**

What's the "algorithm" behind setting DATA? I just see the result: map j1.i1,j2.i5,j3.i9. Do you want to map jk to il with l = (k-1)*4+1? You need to be more explicit in your questions.

-Michael

### Re: Question about replacing two sets

Posted: **Tue Mar 12, 2019 4:34 pm**

by **TsungHaoHu**

Yes, I need to map Data1(i) to Data2(j). The relationship between i and j are j=(i-1)*4-1.

In fact, if the Data1 will sample 15 minutes in a day (it will have 96 points).

The Data2 will take hourly data from Data1 (it will have 24 points).

So, if I don't have the simple way to write code, It will become Ex1 or Ex2 as following:

Code: Select all

```
Ex1:
Data_2("j1") = Data_1("i1");
Data_2("j2") = Data_1("i5");
Data_2("j3") = Data_1("i9");
Data_2("j4") = Data_1("i13");
Data_2("j5") = Data_1("i17");
...
Data_2("j24") = Data_1("i91");
```

Code: Select all

```
Ex2:
[code]i /i1 * i96/
j /j1 * j24/
DATA(j,i) /j1.i1,j2.i5,j3.i9,...,j24.i91/
...
Data_2(j) = sum(i$DATA(j,i),Data_1(i));
```

[/code]

Is there a more simplified way to write the code ?

Thanks.

### Re: Question about replacing two sets

Posted: **Tue Mar 12, 2019 5:38 pm**

by **bussieck**

Okay, I get it. This is actually not so difficult:

Code: Select all

```
set q /i1 * i96/, h /j1 * j24/, hq(h,q);
hq(h,q) = (h.pos-1)*4+1 = q.pos;
option hq:0:0:1; display hq;
```

-Michael

### Re: Question about replacing two sets

Posted: **Wed Mar 13, 2019 2:19 am**

by **TsungHaoHu**

Thank you for help.

It successfully solved my problem.