Conversation
The section still read `[Unreleased]`, under a line saying the release PR renames it. #61 did not, so a tag cut now would ship a changelog that says the release has not happened. Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
…log-section Close the v0.1.0 section the release left open
Closes #113. A policy that diverges emits NaN, and it is the most ordinary failure there is while training one. `step()` wrote agent actions straight into the actuators, so what happened next was whatever the actuator and the integrator did with it. Measured on scenario 0 before this: one NaN in `tvc` at step 300 was harmless and the run finished with the same score as a clean one. A NaN in `launch_inclination_heading` raised out of the integrator and ended the evaluation. And a NaN on the first step after launch does not return at all: the test that does it ran 90 seconds without finishing, with the stack inside scipy's RK45 error control at `_ivp/rk.py:144`. `error_norm` is NaN there, so `error_norm < 1` is false and the step is never accepted. So a competitor's agent can stall the evaluator, not merely score badly. `check_action` names the fields the environment cannot use and `step()` drops those commands, leaving each actuator holding the value it already has, which is what a real one does between commands. A launch attitude is refused rather than dropped, since there is no previous attitude to fall back on, and the agent can launch on any later step. Adversarial review of the first version found four ways past it, each confirmed by running it: - it validated a converted copy and `step()` then used the original, so a scalar `tvc` passed and failed at `action["tvc"][0]`. The converted values are what `step()` uses now. - no size check, so an empty array passed a finiteness test and `tvc` of three elements silently dropped one. - `action["launch"]` was read for truth directly, and `bool(np.nan)` is True, so a NaN would have launched. - `rocket_launched` was set before the flight was built, so a failure in between left the environment marked as launched with nothing to step. The warning is rate limited to the 1st, 10th, 100th and 1000th such step: a policy that breaks stays broken, and one line per step for the rest of the horizon is its own denial of service. 12 tests. The full suite is 309 passed. Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
Picks up ARRC-Rocket/ActiveRocketPy#19 through its release in #23: the actuator argument checks survive `python -O`, a non-finite command is refused at the setter rather than reaching the integrator, `add_*_control` hands the controller the same sampling rate the actuator kept, and a range that is not a pair of numbers is refused. No score moves. Both shipped scenarios leave the three actuator time constants `null`, so the filter branch never runs, and their ranges are ordinary finite numbers. Both golden masters pass unchanged, the suite is 315 passed, and `uv lock --check` still resolves, so the lockfile needs no change. The setter now raising on a non-finite command is what #113 was about. The environment side of that lands with the action validation in fix/a-non-finite-action-is-not-a-command, so a competitor's NaN action keeps being dropped rather than becoming an exception. Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
…r-v0.1.0 Bump ActiveRocketPy to the v1.13 actuator hotfix
…ot-a-command An action the environment cannot use is not a run the agent should lose
zuorenchen
approved these changes
Jul 29, 2026
Member
|
Big thanks to your effort and time on this huge release!!! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes v0.1.0. #61 merged before the ActiveRocketPy bump and before the changelog section was closed, so this brings
mainthe three that were missing.[Unreleased], under a line saying the release PR renames it, so a tag cut frommaintoday would ship a changelog saying the release has not happened435f58d0to473447d5Why #114 and #115 belong together
The bumped actuator setter refuses a non-finite command. On its own that turns an agent's NaN into a
ValueErrorthat ends the whole evaluation, which is what #113 decided against. #115 drops the field instead, and the actuator keeps the value it already holds.It closes more than the score question. Measured before #115: a NaN on the first step after launch did not return at all, with the stack inside scipy's RK45 error control at
_ivp/rk.py:144, whereerror_normis NaN soerror_norm < 1is false and the step is never accepted. The same sequence now finishes in 0.16 s.Verified together, not only separately
Both branches merged into a scratch worktree and run as one tree:
BPC_RUN_SLOW_TESTS=1uv lock --checkresolves, no lockfile changeThe tag follows this.