Page 1 of 1
A more complex parameter to set - matching problem
Posted: Thu May 28, 2020 4:21 pm
by aileen
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.
Re: A more complex parameter to set - matching problem
Posted: Thu May 28, 2020 4:26 pm
by aileen
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.
Code: Select all
set i /i1*i10/, k /0*9/; alias (i,j);
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) = k.val;
option ijk:0:2:1; display ij, ijk;
binary variable x(i,j); variable z;
parameter a(k); a(k) = uniform(-10,10);
equation e; e.. z =e= sum(ijk(ij,k), a(k)*x(ij));
model m /all/;
solve m max z using mip;
Code: Select all
---- 5 SET ij
i1 i2 i3 i4 i5 i6 i7 i8 i9
i1 YES
i3 YES YES YES
i4 YES YES
i5 YES YES YES YES YES
i6 YES YES YES
i7 YES YES YES YES
i8 YES YES YES YES YES YES
i9 YES YES YES YES YES YES YES YES YES
i10 YES YES YES YES YES
---- 5 SET ijk
0 1 2 3 4 5 6 7 8
i1 .i1 YES
i3 .i1 YES
i3 .i2 YES
i3 .i3 YES
i4 .i1 YES
i4 .i3 YES
i5 .i1 YES
i5 .i2 YES
i5 .i3 YES
i5 .i4 YES
i5 .i5 YES
i6 .i4 YES
i6 .i5 YES
i6 .i6 YES
i7 .i1 YES
i7 .i2 YES
i7 .i5 YES
i7 .i6 YES
i8 .i1 YES
i8 .i2 YES
i8 .i3 YES
i8 .i5 YES
i8 .i7 YES
i8 .i8 YES
i9 .i1 YES
i9 .i2 YES
i9 .i3 YES
i9 .i4 YES
i9 .i5 YES
i9 .i6 YES
i9 .i7 YES
i9 .i8 YES
i9 .i9 YES
i10.i2 YES
i10.i3 YES
i10.i5 YES
i10.i7 YES
i10.i9 YES