Hi,
> For example, you could say that naming teams with TLAs was a solution to
> the team naming problem -- therefore the spec document should not
> require that teams are named with TLAs.
It doesn't -- the mention of TLAs in this section comes from a comment
about the current output format, rather than an actual requirement.
(Other sections do refer to TLAs because these are are the current
standard short team ids, and it's necessary to use them for display.)
> We know that the solution to the
> bunching problem is to schedule in rounds.
Correction, we know that *a* solution to the bunching problem exists
that involves the use of rounds. It is entirely possible that a
rounded scheduler could still produce bunched output. Consider the
following sample:
Round 1:
ABC | DEF | GHI
JKL | MNO | PQR
RST | UVW | XYZ
Round 2:
ABC | JKL | RST
DEF | MNO | UVW
GHI | PQR XYZ
Note that RST has adjacent matches, and that the presence of rounds
has done nothing to resolve this. I'm not saying that rounds can't
help, just that they're not the magic bullet they're being presented
as.
Having a bunching related requirement *does*, however, resolve this issue.
<*discussion of previous schedulers*>
I remain unconvinced that the _main_ issue with the previous
schedulers was the lack of rounds. A lack of testing, (both of the
logic, and of the output), as well as a lack of tooling with which to
perform said testing was the main issue.
SR2013 is the second competition where I've written schedule checking
scripts at high speed due to a gut feeling that things were wrong.
(I'm thankful this year it occurred before the competition, with
[admittedly barely] time to fix it). I do *not* believe that adding
rounds will make the schedules suddenly massively easier for humans to
check the schedules (I do expect some improvement, though only if the
rounds are marked, e.g. as above).
> So far all I've heard is speculation that there might be another way of
> achieving the same thing that rounds achieve. No-one has actually said
> what this is. I am inclined to believe that there are no other
> reasonable ways.
Reading "the same thing that rounds achieve" as being mostly about
bunching (lack of context in the original..):
This _is_ precisely what BlueFlame does. It avoids bunching by
scheduling matches for teams that haven't had a match recently. While
there isn't anything to actually prevent the bunching in the internal
logic, IIRC tests on the output put a minimum match proximity around 5
[1] before we've even started looking at improving it. I think this is
pretty solid evidence that this is another viable route.
> Blueflame does not result in a schedule that can be easily truncated by
> us -- which is the thing that Jeremy brought up in this thread earlier.
> It's also a requirement in the spec as it stands.
BlueFlame was not written with this requirement in mind -- it was
intended as an experiment to resolve the spacing issue, with some
handling of the even-opponents constraint.
> By including the round requirement in the spec, the spec becomes
> simpler. The following items could be removed:
>
> * Teams must have their matches spread throughout the league.
> * All teams (that make it to the competition) must be scheduled
> matches.
> * The number of matches that teams have must have a maximum
> variance of 1 match.
> * The schedule may be balanced such that a chunk of matches can be
> dropped due to a time constraint without biasing the league.
I don't like the idea of removing a large portion of the spec, and
replacing it with something that is clearly implementation-related,
and could be misunderstood. I also like that at the moment, each of
the feature points is understandable without having to add definitions
of things (we'd need to explain what rounds were, and why they're
good, which is basically a copy/paste of these anyway), and is
independently testable.
Furthermore, as noted above, I don't believe that rounds actually
ensure that all of these are included.
Thanks,
Peter
[1] using
https://www.studentrobotics.org/cgit/comp/match-scheduler2.git/tree/checks/close.py