Hello,
I'm trying to generate a sports league schedule with GAMS. I want to minimise the distance travelled on certain match days (for example in winter) while also limiting the carryover effect given from one team to another.
My problem is that my minimisation only returns a result if the solution is 0, otherwise it says the problem is integer infeasible. I don't understand why my model requires the solution of 0 for "dis". The way it is written, I thought it would model the pairings i,j with the lowest distance for k<3 and pairings with larger distance for k>=3 and then return a solution that is greater than 0.
If I modify the data in the table with to more 0s, so that all pairings with k<3 can be made with a distance of 0, the problem is solved and returns a usable schedule.
What can I change so it allows a solution greater than 0?
MIP minimisation too restrictive
MIP minimisation too restrictive
 Attachments

 LeagueSchedule.gms
 (2.35 KiB) Downloaded 9 times
Re: MIP minimisation too restrictive
The variable in my Model that I would like to minimise is "dis" calculated as follows:
d(i,j) is a table that I put under Parameters and y(k,i,j) is a binary variable that is 1 if a game takes place and 0 if there is no game. There is no other interaction in the Model between y(k,i,j) and d(i,j) and as far as I can tell, the contents of d(i,j) influence wether the model is integer infeasible or not. If I construct the Table in a way that the sum of y(k,i,j)*(d,j) can be zero for the allowed k, I get the solution of zero, otherwise it is integer infeasible.
If I use a different minimisation that does not include a table (and uses a different solver, MINLP) the Model works. For reference, the other optimisation would be:
I have attached a more streamlined version of the model, with only the most basic restrictions.
Code: Select all
Distance(i,j)$(ord(i) lt ord(j)).. dis =e= sum(k$(ord(k)<3), y(k, i, j)*d( i, j))
If I use a different minimisation that does not include a table (and uses a different solver, MINLP) the Model works. For reference, the other optimisation would be:
Code: Select all
Carryover.. coe =e= sum((i, j), ((sum((l, k), y(k, l, i)*y(k+1, l, j)))**2))
 Attachments

 League4.gms
 (1.49 KiB) Downloaded 7 times