Scheduling a tournament with $N$ teams I want to make a "good" schedule for a tournament between $N$ teams. Using memories from my (long gone) student days, I expressed it as a binary integer program. With the current set of constraints, and $N=10$, the resulting program has about $11,000$ variables and $20,000$ constraints. Is this considered large nowadays? The GLPK solver finds an optimal solution in about $20$ minutes, which is great.
But now I wonder if I could speed things up a bit. In particular, if I try to add some constraints, the solver sometimes takes much, much more time.
What tools or techniques can I use?
I can give a detailed description of the problem (or even show code), if that helps.
 A: It would be interesting to see your code. I think you may have too many variables.
An IP is a good way to solve this problem.
Let there be $N$ teams and $M$ rounds.
I would choose my variables to take the form $PLAY_{ijk}$ for $1\le i \le N$, $1\le j \le N$ and $1\le k \le M$.
$PLAY_{ijk}=1$ if team $i$ plays team $j$ in round $k$ and $PLAY_{ijk}=0$ otherwise.
The number of these variables is $N^2M$.
Constraints are:
$PLAY_{iik}=0$ (never play against yourself): $N$ constraints 
$\Sigma_{j} PLAY_{ijk}\le 1$ (never play more than one other team in any given round): $NM$ constraints
$\Sigma_{i} PLAY_{ijk}\le 1$ (never play more than one other team in any given round): $NM$ constraints
$\Sigma_{k} PLAY_{ijk}\le 1$ (once a pair of teams have played each other they can never meet in a later round): $N^2$ constraints
Use the variables $ROUNDPLAYED_k$ for $1 \le k \le M$ to see if any games are played in a particular round.
$ROUNDPLAYED_k=1$ if some games have been played in round $k$ and $ROUNDPLAYED_k=0$ otherwise.
The number of these variables is $M$.
Constraints:
$ROUNDPLAYED_k \ge \frac{\Sigma_{ij} PLAY_{ijk}}{N^2}$
(this forces $ROUNDPLAYED_k$ to be larger than $0$ if even one match is played in the $k$th round, but keeps the value less than $1$. Because this is an IP, that sets $ROUNDPLAYED_k$ to 1).
You want to play as few rounds as possible, so the objective function is given by:
Minimise $\Sigma_k ROUNDPLAYED_k$
