Ever nearer to success. Below is the result of the work on asymmetric matchup generation. It turned out to be a bit of a pain implementing the logic I'd already tested on paper, but we got there.
Note that this version of the schedule generator, when finished, will automatically tweak the number of games required to attain better balance. The settings were 50/30/20, but ended up being 60/30/24. (The logic calculates the number of matchups required to fit into a given structure, then looks for the first number of games at or above the requested game count that is evenly divided by all the matchup numbers.) Note also the uneven subleague pools, e.g. [T13, T16, T19]. Each team plays 30 games in that pool, but only T13 plays 30 non-divisional games (15 against each opponent). T16 and T19 must play 15 games against each other to make up the shortfall.
The scheduling parameters are getting simpler, too, in favor of increased auto-generation logic. Now, you don't need to plug in very much more than the desired number of games per opponent type, the desired length of series per opponent type, and the league structure.
Code:
DIVISIONAL pool: [T1, T2]
T1 60 games
T2 60 games
DIVISIONAL pool: [T3, T4, T5]
T3 60 games
T4 60 games
T5 60 games
DIVISIONAL pool: [T6, T7, T8, T9, T10]
T6 60 games
T7 60 games
T8 60 games
T9 60 games
T10 60 games
DIVISIONAL pool: [T11, T12]
T11 60 games
T12 60 games
DIVISIONAL pool: [T13, T14, T15]
T13 60 games
T14 60 games
T15 60 games
DIVISIONAL pool: [T16, T17, T18, T19, T20]
T16 60 games
T17 60 games
T18 60 games
T19 60 games
T20 60 games
SUBLEAGUE pool: [T1, T4, T6, T8]
T1 30 games
T4 30 games
T6 30 games
T8 30 games
SUBLEAGUE pool: [T2, T3, T9]
T2 30 games
T3 30 games
T9 30 games
SUBLEAGUE pool: [T5, T10, T7]
T5 30 games
T10 30 games
T7 30 games
SUBLEAGUE pool: [T11, T14, T18, T20]
T11 30 games
T14 30 games
T18 30 games
T20 30 games
SUBLEAGUE pool: [T12, T15, T17]
T12 30 games
T15 30 games
T17 30 games
SUBLEAGUE pool: [T13, T16, T19]
T13 30 games
T16 30 games
T19 30 games
INTERLEAGUE pool: [T8, T9, T13, T12]
T8 24 games
T9 24 games
T13 24 games
T12 24 games
INTERLEAGUE pool: [T3, T10, T11, T17]
T3 24 games
T10 24 games
T11 24 games
T17 24 games
INTERLEAGUE pool: [T4, T5, T14, T20]
T4 24 games
T5 24 games
T14 24 games
T20 24 games
INTERLEAGUE pool: [T2, T6, T16, T18]
T2 24 games
T6 24 games
T16 24 games
T18 24 games
INTERLEAGUE pool: [T7, T1, T19, T15]
T7 24 games
T1 24 games
T19 24 games
T15 24 games
Below is Hageneezz's structure. I see that thehip41 is working on that request already, and I suspect he'll beat me to the punch, but we'll see.
Code:
DIVISIONAL pool: [T1, T2, T3, T4, T5]
T1 64 games
T2 64 games
T3 64 games
T4 64 games
T5 64 games
DIVISIONAL pool: [T6, T7, T8, T9, T10]
T6 64 games
T7 64 games
T8 64 games
T9 64 games
T10 64 games
DIVISIONAL pool: [T11, T12, T13, T14, T15]
T11 64 games
T12 64 games
T13 64 games
T14 64 games
T15 64 games
DIVISIONAL pool: [T16, T17, T18, T19, T20]
T16 64 games
T17 64 games
T18 64 games
T19 64 games
T20 64 games
SUBLEAGUE pool: [T4, T5, T1, T3, T2, T6, T8, T7, T9, T10, T15, T11, T12, T13, T14, T20, T19, T16, T17, T18]
T4 30 games
T5 30 games
T1 30 games
T3 30 games
T2 30 games
T6 30 games
T8 30 games
T7 30 games
T9 30 games
T10 30 games
T15 30 games
T11 30 games
T12 30 games
T13 30 games
T14 30 games
T20 30 games
T19 30 games
T16 30 games
T17 30 games
T18 30 games
The only thing left to do is the final scheduling, although I say that with some reservation. Slotting games into a calendar is the hardest part, and undoubtedly it'll take some time to get right.