Farama-Foundation / Arcade-Learning-Environment

The Arcade Learning Environment (ALE) -- a platform for AI research.
https://ale.farama.org/
GNU General Public License v2.0
2.16k stars 422 forks source link

Ability to serialize RAM / frame buffer when cloning states #417

Open JesseFarebro opened 3 years ago

JesseFarebro commented 3 years ago

Currently, the ALE doesn't serialize the RAM or frame buffer when cloning states. There are various issues with naively doing this (see #413) but there are potential workarounds.

  1. Add a flag to optionally serialize both RAM/frame buffer.
  2. The emulator is now deterministic so we could serialize the state at the time t-1 and run the emulator forward one frame which would rehydrate both the RAM and frame buffer. The logic of this could get messy but it would be easy to remain backwards compatible.

I believe upstream Stella has this functionality now so it might be worth taking a look to see how they managed this.

anadrome commented 3 years ago

Fwiw I recently discovered (while looking for something else) that there was a discussion of this in 2016, though nothing was implemented: https://github.com/mgbellemare/Arcade-Learning-Environment/issues/165#issuecomment-219289321

One suggestion from that discussion was to assert() if someone tries to get a stale RAM or screen rather than silently returning the wrong one. Not sure if that's the design you want to go with, but thought I'd connect the previous discussion.