v0.1.1
Fifteen pull requests since v0.1.0, by @thc1006.
Read this before submitting again
A submission is JSON now, and the leaderboard will refuse a v0.1.0 file. Nothing
about writing an agent changes, but a submission packed by the previous version is a
pickle, so re-run your evaluation under this one to get a file the leaderboard takes.
GET /api/version on the leaderboard reports the suffix and the format_version that
deployment accepts, if you want to check before you upload.
If you are running the qualifying round on a seed of your own, use this version.
It is the first that records the seed the run actually drew. A submission without it
cannot be checked against the world it claims to have flown in, and random_seed: null
raised AttributeError on the first reset before this.
Scores do not move. The pop rule was rewritten so that it no longer depends on which
end of a step you call the start, which sounds like it should change results and does
not: measured over 200,000 segment pairs, no pop decision differs at the 1.5 m balloon
radius. The ActiveRocketPy pin is unchanged, so the physics is the same code.
Changed
- Submissions are written as JSON rather than pickle, with
format_version: 1.
Unpickling a competitor's upload was arbitrary code execution on the
leaderboard, andjson.loadcannot be (#122). - A submission records the seed the run actually drew, so a run configured with
random_seed: nullcan be reproduced from the file it produced. The checker
takes the seed as an input to its oracle rather than requiring the shipped
value, which is what a round on an arbitrary seed needs (#132). - The closest approach between the rocket and a balloon no longer depends on
which end of the step is called the start. Measured over 200,000 segment
pairs, no pop decision changes at the 1.5 m radius (#107). - Balloon release spacing is rounded rather than truncated. Both shipped
scenarios divide exactly, so no score moves (#110).
Fixed
random_seed: null, which the scenario files offer in a comment, raised
AttributeErroron the first reset (#128).- An action of the wrong shape, holding a complex value, or of object dtype is
refused as unusable instead of being silently cast or raising later. The
environment drops that field and carries on rather than ending the run, and
names the field it dropped (#117). - A failed write no longer leaves the file descriptor closed twice (#119).
- The submission checker took release eligibility from the release schedule,
which failed honest scenario-0 runs where every balloon starts released
(#108). - The checker now reads
format_version, refuses an invalid rocket path before
paying for the balloon Monte Carlo, and writes strict JSON with
allow_nan=Falseat the serializer rather than only in the sanitizer (#133).
Added
check_action(action)is public, so an agent can ask the same question the
environment does before returning (#117).- The submission checker,
scripts/verify_submission.py, and what it costs to
fake a rocket path (#106).
Tooling
- CI installs the versions the lockfile pins rather than checking one thing and
testing another (#105), fails a regression that hangs instead of waiting
(#120), sees a renamed environment or an unclosed fence in the runner check
(#109), and lintsscripts/(#133). Tests that fail when the thing they are
named after breaks (#118).