GAMS Support Wiki

Site Tools

gams:a_more_complex_parameter_to_set_-_matching_problem

Differences

This shows you the differences between two versions of the page.

 gams:a_more_complex_parameter_to_set_-_matching_problem [2007/08/10 12:30]127.0.0.1 external edit gams:a_more_complex_parameter_to_set_-_matching_problem [2020/05/28 10:52] (current)Michael Bussieck 2020/05/28 10:52 Michael Bussieck 2020/05/28 10:51 Michael Bussieck 2007/08/10 12:30 external edit Next revision Previous revision 2020/05/28 10:52 Michael Bussieck 2020/05/28 10:51 Michael Bussieck 2007/08/10 12:30 external edit Line 3: Line 3: Q: //I want to create a parameter a(k) and multiply a(k)*x(i,j) where x is a variable and k= Ord(i) - Ord(j) with the complication that x(i,j) is not full for all i and j.  I can't seem to get this to work.// Q: //I want to create a parameter a(k) and multiply a(k)*x(i,j) where x is a variable and k= Ord(i) - Ord(j) with the complication that x(i,j) is not full for all i and j.  I can't seem to get this to work.// - I would make a set ''​ijk(i,​j,​k)''​. The elements of this set are the matching tuples. The problem is that k is a set element and not a number. So your k in ''​k=Ord(i)-Ord(j)''​ also needs a function that maps it to a value, like ord. Depending on the range of ''​ord(i)-ord(j)''​ you can either work with ''​ord''​ or (as I did in my example) ​have a parameter with the proper values. Please find the complete example attached. + I would make a set ''​ijk(i,​j,​k)''​. The elements of this set are the matching tuples. The problem is that k is a set element and not a number. So your k in ''​k=Ord(i)-Ord(j)''​ also needs a function that maps it to a value, like ord. Depending on the range of ''​ord(i)-ord(j)''​ you can either work with ''​ord''​ or have a parameter with the proper values ​or (as in the example below) work with ''​k.val''​. Please find the complete example attached. <​code>​ <​code>​ set i /i1*i10/, k /0*9/; alias (i,j); set i /i1*i10/, k /0*9/; alias (i,j); - Parameter nk(k); nk(k) = ord(k)-1; set ij(i,j); ij(i,j) = ord(i)>​=ord(j) and uniform(0,​1)<​0.5;​ set ij(i,j); ij(i,j) = ord(i)>​=ord(j) and uniform(0,​1)<​0.5;​ - set ijk(i,j,k); ijk(ij(i,​j),​k) = ord(i) - ord(j) = nk(k); + set ijk(i,j,k); ijk(ij(i,​j),​k) = ord(i)-ord(j) = k.val; - option ijk:0:0:1; display ​nk, ij, ijk; + option ijk:0:2:1; display ij, ijk; binary variable x(i,j); variable z; binary variable x(i,j); variable z; Line 20: Line 19: ​ <​code>​ <​code>​ - ----      ​6 PARAMETER nk + ----      5 SET ij  ​ - + - 1 1.000, ​   2 2.000, ​   3 3.000, ​   4 4.000, ​   ​5 5.000, ​   6 6.000, ​   7 7.000, ​   8 8.000, ​   9 9.000 + - + - + - ----      6 SET ij  ​ + ​i1 ​         i2          i3          i4          i5          i6          i7          i8          i9 ​i1 ​         i2          i3          i4          i5          i6          i7          i8          i9 Line 40: Line 34: - ----      ​6 SET ijk  ​ + ----      ​5 SET ijk  ​ + + ​0 ​          ​1 ​          ​2 ​          ​3 ​          ​4 ​          ​5 ​          ​6 ​          ​7 ​          8 - i1 .i1.0 + i1 .i1         YES - i3 .i1.2 + i3 .i1                                 YES - i3 .i2.1 + i3 .i2                     YES - i3 .i3.0 + i3 .i3         YES - i4 .i1.3 + i4 .i1                                             YES - i4 .i3.1 + i4 .i3                     YES - i5 .i1.4 + i5 .i1                                                         YES - i5 .i2.3 + i5 .i2                                             YES - i5 .i3.2 + i5 .i3                                 YES - i5 .i4.1 + i5 .i4                     YES - i5 .i5.0 + i5 .i5         YES - i6 .i4.2 + i6 .i4                                 YES - i6 .i5.1 + i6 .i5                     YES - i6 .i6.0 + i6 .i6         YES - i7 .i1.6 + i7 .i1                                                                                 YES - i7 .i2.5 + i7 .i2                                                                     YES - i7 .i5.2 + i7 .i5                                 YES - i7 .i6.1 + i7 .i6                     YES - i8 .i1.7 + i8 .i1                                                                                             YES - i8 .i2.6 + i8 .i2                                                                                 YES - i8 .i3.5 + i8 .i3                                                                     YES - i8 .i5.3 + i8 .i5                                             YES - i8 .i7.1 + i8 .i7                     YES - i8 .i8.0 + i8 .i8         YES - i9 .i1.8 + i9 .i1                                                                                                         YES - i9 .i2.7 + i9 .i2                                                                                             YES - i9 .i3.6 + i9 .i3                                                                                 YES - i9 .i4.5 + i9 .i4                                                                     YES - i9 .i5.4 + i9 .i5                                                         YES - i9 .i6.3 + i9 .i6                                             YES - i9 .i7.2 + i9 .i7                                 YES - i9 .i8.1 + i9 .i8                     YES - i9 .i9.0 + i9 .i9         YES - i10.i2.8 + i10.i2 ​                                                                                                        YES - i10.i3.7 + i10.i3 ​                                                                                            YES - i10.i5.5 + i10.i5 ​                                                                    YES - i10.i7.3 + i10.i7 ​                                            YES - i10.i9.1 + i10.i9 ​                    YES