Skip to content

v0.1.1

Latest

Choose a tag to compare

@thc1006 thc1006 released this 31 Jul 11:36
aa51afa

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, and json.load cannot be (#122).
  • A submission records the seed the run actually drew, so a run configured with
    random_seed: null can 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
    AttributeError on 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=False at 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 lints scripts/ (#133). Tests that fail when the thing they are
    named after breaks (#118).