[HN Gopher] NES Tetris AI hits 102M points and level 237
       ___________________________________________________________________
        
       NES Tetris AI hits 102M points and level 237
        
       Author : zdw
       Score  : 180 points
       Date   : 2021-11-23 18:18 UTC (4 days ago)
        
 (HTM) web link (www.youtube.com)
 (TXT) w3m dump (www.youtube.com)
        
       | beebeepka wrote:
       | Didn't even know there was Tetris on the Famicom. I thought
       | Bejeweled and Dr Mario had the niche covered.
       | 
       | Honestly, I am not super impressed. Where are the Quake and
       | StarCraft bots? Deepmind hasn't shown anything interesting on
       | that front after their last bot got smacked repeatedly buy a
       | couple of low tier European players
        
         | throwaway675309 wrote:
         | Name a system that Tetris _hasn 't_ been ported to. Maybe the
         | LaserActive?
        
         | eigenket wrote:
         | The point of the starcraft bot was never to be able to beat
         | humans, it was about getting headlines and moving on. To be
         | honest getting good at starcraft isn't really an interesting
         | problem for AI to solve, you can probably do it if you throw
         | enough GPUs at the problem, but you learn pretty much nothing
         | in the process.
        
           | NavinF wrote:
           | > starcraft isn't really an interesting problem for AI to
           | solve
           | 
           | I completely disagree. This is much more interesting than the
           | toy problems that most academics work on.
           | 
           | RL problems in this space are inherently difficult since you
           | only get 1bit of "ground truth" information (win/loss) at the
           | end of a game and have to guess which of your actions
           | contributed to that outcome. Sure you can throw hardware at
           | the problem, but you've got a huge incentive to minimize
           | costs.
           | 
           | It's only recently that the default consensus for RL problems
           | changed from "this is an inherently creative endeavor and
           | needs human input" to "you can probably do it if you throw
           | enough GPUs at the problem".
        
             | gwern wrote:
             | I'd say SC2 is still in the "inherently creative" part.
             | Even with the very interesting AlphaStar League _partially_
             | solving the self-play diversity and exploration problem, it
             | 's not at all obvious that just sinking in another 10-100x
             | TPU-time into AlphaStar would patch up all of the errors
             | and poor strategy AS exhibited - in fact, I'd bet heavily
             | against it, since spending a large-but-still-feasible
             | amount of compute doesn't appear to have fixed OA5 or
             | AlphaGo's similar-looking problems, but AlphaZero was
             | required.
             | 
             | Now, applying MuZero _might_ be powerful to solve SC2 with
             | much more compute, but that is still not something many DRL
             | researchers would give you large odds on, and you still
             | probably need to come up with some ways to abstract it and
             | condense the game tree into something tractable for
             | planning over, especially with the partial information
             | making modeling the future much harder. (VQ-VAE and related
             | generative modeling approaches are promising in this
             | regard... but still no slam dunk. If DM announced tomorrow
             | that MuZero+VQ-VAE had defeated AS and a bunch of human
             | pros, people would be extremely shocked, even as they
             | scrambled to tweet about how they saw it coming all along
             | & also are very offended by the waste of CO2 and how
             | unreplicable it is on a grad student budget.)
        
           | NikolaeVarius wrote:
           | I'm skeptical of your claims that Starcraft is not
           | interesting problems for AI.
           | 
           | For many problems, the AI is given as much information as
           | possible of the state of the system to make decisions. The AI
           | knows the entire state of the game in Tetris or Go or Chess.
           | 
           | Starcraft/RTSs are designed specifically to remove
           | information from the player and force you to balance info
           | gathering, building, and countering new information, which is
           | a massive difference from the currently impressive AlphaGo
           | and such
        
           | oblak wrote:
           | Strongly disagree. They were clearly pushing very hard right
           | until their precious bot was defeated repeatedly by - again -
           | a low tier European "pro".
           | 
           | I still remember the principal (somewhat curly hair and
           | glasses) engineer looking extremely pissed after the matches.
           | Funny how they switched priorities right after that. 100%
           | completely unrelated, as you say.
           | 
           | Also, as NikolaeVarius pointed, SC is a game of imperfect
           | information. If that's not interesting from an AI
           | perspective, I don't know what is.
        
         | toast0 wrote:
         | I don't know if it was released for Famicom, but Tengen (Atari)
         | had also released their version of Tetris for the NES, which
         | hews closely to the coin-op Tetris. It was famously removed
         | from the market because of licensing clarifications, Tengen
         | didn't have the license to release Tetris on home gaming
         | platforms, like they thought they did.
        
       | kilovoltaire wrote:
       | Meanwhile human NES Tetris is also getting unbelievably good,
       | including a whole new method of 'rolling' your fingers across the
       | back of the controller
       | 
       | Here's a video of a former world champion 'hypertapper' Joseph
       | versus the newly ascendant 'roller' Huff, from the world
       | championship a couple weeks ago.
       | 
       | They both reach a million points (called a 'max out' because the
       | unmodified game stops counting after that) at around 9 minutes in
       | to the video:
       | 
       | https://youtu.be/wELh6bO_ze0?t=9m
        
         | jeffwass wrote:
         | What is Huff actually doing with his gloved right hand? Can't
         | really tell in the video.
        
           | ChrisClark wrote:
           | Looks like he's flicking the back with multiple fingers one
           | after another, so instead of pushing down on the dpad, he's
           | pushing the controller into his left hand. I guess it's a
           | faster way to multi tap it.
        
         | fartcannon wrote:
         | Here's the world NES Tetris records leaderboard.
         | 
         | https://docs.google.com/spreadsheets/d/1ZBxkZEsfwDsUpyire4Xb...
         | 
         | Looks like Huff finally beat HydrantDude's 1.6 million.
        
         | wanderingstan wrote:
         | What does the finger rolling accomplish? I see one playing
         | doing it in the video, but it's not clear why. IIRC, there are
         | no buttons on the back.
        
           | runevault wrote:
           | So a detail I didn't see from the others to add on. Tetris
           | technically allows you to push the button every frame, so 60
           | moves/second would be optimal if you ignore physical limits
           | of the controller etc. With the oldest way of playing called
           | DAS (I forget what it stands for) after a couple frames it
           | starts inputting really fast, but you have to store inputs to
           | manage to make it move the way you want efficiently. This new
           | rolling is the fastest way found so far to press the
           | direction buttons quickly and get as many presses per second
           | possible to better position blocks.
        
             | LocalH wrote:
             | I think you mean 30 moves per second, as Tetris (like most
             | games) doesn't count two consecutive frames of "button
             | pressed" as two button presses, but a press-and-hold. Still
             | faster than the 10Hz of DAS, but by necessity a full,
             | separate button press requires at least one frame of
             | "button pressed" separated by one frame of "button not
             | pressed".
        
               | runevault wrote:
               | You're right on 30fps. Been a while since I followed NES
               | Tetris. Thanks for the correction.
        
             | oooooooooooow wrote:
             | Delayed Auto Shift. In NES tetris the rate is 10 moves per
             | second, so to beat it in speed you have to press on the
             | dpad at more than 10Hz.
        
           | sjburt wrote:
           | They hold one finger over the desired button and the finger
           | roll on the back pushes the controller into the first finger,
           | generating multiple taps faster than you could with a single
           | finger.
        
             | goldenkey wrote:
             | It's basically like bump firing but for controllers instead
             | of guns. World-class revolver shooters also use this kind
             | of method.
        
           | dylanfw wrote:
           | I was curious as well and found this video explanation[1].
           | The idea is that tapping on the back of the controller pushes
           | it up into the player's thumb which is resting on the D-pad
           | causing a button press.
           | 
           | [1] https://youtu.be/n-BZ5-Q48lE
        
           | [deleted]
        
           | zucker42 wrote:
           | You rest your finger from the other hand on the button in
           | front, so when rolling the button is pressed. That way you
           | can use more than one finger to press, which allows faster
           | pressing. The fastest rollers can hit the button around 20
           | times a second, whereas by holding the button down (i.e.
           | manipulating DAS, the traditional technique) you can only
           | reach 10 Hz.
        
       | garaetjjte wrote:
       | There's a interesting page about Tetris AIs:
       | https://web.archive.org/web/20081101211903/http://www.colinf...
       | 
       | It would be interesting how algorithm featured on the video
       | compares to these described on the linked page, but it would need
       | different runtime as NES crashing at just over 3000 lines is few
       | orders of magnitude too short.
        
       | elihu wrote:
       | I wondered if this was using a machine-learning style AI and it
       | was, among other things, learning the state of the random number
       | generator so it could predict pieces accurately more than one
       | turn out? (And if not, how would you prove that it wasn't?
       | Perhaps tweak the game RNG and see if the AI performs badly?)
       | 
       | Looking at the github repo, it looks like it's actually more of a
       | classical AI doing traditional game tree search. There is some
       | interesting code around the RNG, though: apparently the RNG does
       | make certain piece sequences more likely than others, and there's
       | a lookup table for the probability of the next piece given the
       | current piece:
       | 
       | https://github.com/GregoryCannon/StackRabbit/blob/master/src...
       | 
       | I suppose one could extend this to be a 3-dimensional lookup
       | table with the probabilities of the next pieces given the last
       | two pieces, or to extend it to 4 or 5 or (if you had infinite
       | resources) 100. At some point you'd know enough to be able to
       | predict the next piece with 100% accuracy.
        
         | mdavidn wrote:
         | The NES version is quirky, as your link points out. It's best
         | described as an 8-sided die, with rolls for 8 or the previous
         | piece triggering a single reroll. The probability of the next
         | piece being an "I" do not increase after a long drought.
         | 
         | Newer versions of Tetris give random permutations drawn from a
         | 7-tetrominoe bag, so the longest possible drought between two
         | "I" pieces is 12 tetrominoes.
        
         | karmasimida wrote:
         | If it is a pseudo RNG then you can try a autogressive seq2seq
         | model and see how it is doing.
         | 
         | If it is a true RNG, then good luck, it would be unpredictable
         | by definition.
        
           | ineedasername wrote:
           | Anyone know what would be a good source of entropy on a NES
           | system for a good RNG?
        
             | jenscow wrote:
             | I'm guessing, the only thing available that was
             | unpredictable is the user.. so things like the input
             | timings.
        
       | rahimnathwani wrote:
       | I didn't know the move at 21:25-21:26 was possible. The player
       | rotates a z shape from vertical, into its final position. If you
       | were playing with physical blocks, this rotation wouldn't be
       | possible.
        
         | mypalmike wrote:
         | Yeah z-spins give bonus points in some later variants of
         | Tetris.
        
       | jFriedensreich wrote:
       | one of the few titles that are less click-baity than could be. it
       | reached the level that broke and froze the game...
        
       | mikub wrote:
       | I just played the SNES version of Tetris today before seeing
       | this. Got 123 lines, which I considered a pretty good run. :)
        
       | airstrike wrote:
       | Came for the Tetris, stayed for the named color palettes. At
       | first I thought these were official names but "Mexico According
       | to Hollywood" kinda gave it away (level C8 or 182)
        
         | kevincox wrote:
         | What a graceful way to handle levels beyond what you had the
         | resources to include in the game. They could have wrapped
         | around, but that would have been boring, they could have
         | switched to random generation but that would have required
         | additional code. Instead just let it slowly cycle through ROM
         | and use whatever is there.
         | 
         | I'm not sure it was on purpose, but a nice solution.
        
       | grendelt wrote:
       | What causes it to freeze where it does?
        
         | pronoiac wrote:
         | I've heard somewhere that the CPU didn't have multiplication
         | built-in, so in calculating how much level bonus to add would
         | require a loop of additions. This was also an era where timing
         | between frames was delicate, and if the housekeeping part of
         | scorekeeping takes too long, weird things happen, it drops the
         | ball on something else, and it seizes up.
        
           | kevincox wrote:
           | I guessed that it was a math loop causing the slowdown, but I
           | wonder what actually killed it. Naively I would have thought
           | that you just missed a frame like many other games on the NES
           | (see SMB1). It is surprising that a missed frame actually
           | kills the game.
        
         | kthejoker2 wrote:
         | He says earlier in the video it's building up memory pressure,
         | so it's some sort of (obviously unconsidered) garbage
         | collection issue.
        
           | Agingcoder wrote:
           | Garbage collection on a NES? AFAIK Lots of (most) games were
           | written in asm, not with very high level languages.
        
             | tinus_hn wrote:
             | The NES contains 2k of RAM. Although you can extend that in
             | the cartridge I doubt games use garbage collection.
             | 
             | Why would you anyway? It's such a basic, predictable game.
             | There's a fixed size playing field that contains only one
             | fixed size moving object.
        
             | __s wrote:
             | Better would've been to suggest a memory leak
             | 
             | But the level being near 256 suggests an integer overflow
        
             | mypalmike wrote:
             | Going a bit off topic here, but there's no reason you
             | couldn't use a garbage collector to manage heap memory for
             | your assembly language program.
             | 
             | On the NES, such a memory management approach would be
             | particularly insane.
        
         | Ecco wrote:
         | Maybe an integer overflow somewhere? Either that or the NES is
         | just too bored at this point and cries uncle.
        
           | beebeepka wrote:
           | "cries uncle"? I am not a big fan of idioms but this one is
           | bad. What does it mean?
           | 
           | Edit: keep piling on me, guys. That'll teach me to like
           | obscure idioms
        
             | variaga wrote:
             | https://idioms.thefreedictionary.com/cry+uncle
        
             | throwaway675309 wrote:
             | It's not a particularly obscure idiom (lots of pop culture
             | tv shows make reference to it), and calling it "bad" makes
             | zero sense.
        
             | biddit wrote:
             | To admit defeat
        
             | jcims wrote:
             | It's intentionally obscure, it's basically a safeword for
             | young kids that enjoy torturing each other in one way or
             | another. You're getting piled on for being weirdly critical
             | about something you clearly don't understand.
        
             | kordlessagain wrote:
             | It's where your bigger cousin is giving you a noogie and
             | you want his dad to help.
        
               | moron4hire wrote:
               | I always understood the usage of "to cry uncle", but
               | never understood the origin until you described it this
               | way. I guess, being the oldest cousin in my family, and
               | not being the kind of person to beat up my younger
               | cousins, it never came up.
        
               | boomboomsubban wrote:
               | I don't think that's the actual origin, Wikipedia says it
               | likely comes from a 19th century joke about a parrot.
               | https://en.wikipedia.org/wiki/Say_Uncle
        
               | Y_Y wrote:
               | from the Iowa Citizen of 9 October 1891:
               | 
               | > A gentleman was boasting that his parrot would repeat
               | anything he told him. For example, he told him several
               | times, before some friends, to say "Uncle," but the
               | parrot would not repeat it. In anger he seized the bird,
               | and half-twisting his neck, said: "Say 'uncle,' you
               | beggar!" and threw him into the fowl pen, in which he had
               | ten prize fowls. Shortly afterward, thinking he had
               | killed the parrot, he went to the pen. To his surprise he
               | found nine of the fowls dead on the floor with their
               | necks wrung, and the parrot standing on the tenth
               | twisting his neck and screaming: "Say 'uncle,' you
               | beggar! say uncle.'"
        
             | NikolaeVarius wrote:
             | You know its an idiom, and refuse to just Google it?
        
       | Ecco wrote:
       | I'm not sure why this is called an AI. I feel like a
       | deterministic algorithm to play Tetris in an efficient way is not
       | super complicated to write.
        
         | ceautery wrote:
         | https://github.com/GregoryCannon/StackRabbit if you'd like to
         | test your casually flippant statement.
        
         | H8crilA wrote:
         | > It's not AI if I can understand what it's doing
         | 
         | - found on the internet, 2021
        
           | Ecco wrote:
           | Not what I said or meant at all. I'm arguing about the proper
           | use of the "intelligence" noun here. Does this really show a
           | "capacity for abstraction, logic, understanding, self-
           | awareness, learning, emotional knowledge, reasoning,
           | planning, creativity, critical thinking, and problem-solving.
           | "(Wikipedia)? I don't think so. All I see here is a simple
           | list of steps that a machine keeps on repeating.
        
             | Vetch wrote:
             | There is the intelligence required to play the game and the
             | intelligence required to learn it. As long as the activity
             | of playing Tetris can be labeled as relying on intelligence
             | then the machine can be labeled as an excised expression of
             | said intelligence.
        
             | [deleted]
        
             | NamTaf wrote:
             | We have used "AI" to denote the computer player in games
             | for as long as I've been alive, and I'm pushing my late
             | 30s. This is not new ground, and I'm a bit surprised you're
             | choosing this hill to make your stand.
             | 
             | e: This is precisely why there's the distinction of
             | "artificial general intelligence"
        
               | kzrdude wrote:
               | It's not strange, it's precisely because AI is used as a
               | term everywhere now, that we should be skeptical of using
               | it that way.
        
             | H8crilA wrote:
             | You're right. In my little joke I implied something else
             | than you said. It's a low/middle complexity piece of
             | control software.
        
           | qayxc wrote:
           | That's a strange takeaway from this.
           | 
           | Ecco simply missed the fact that the Tetris AI used here is
           | actually exactly that: a deterministic algorithm that uses
           | heuristics to search the best placement options.
           | 
           | This is not deep learning in case you're wondering.
        
       | ArtWomb wrote:
       | I love to see all the Nintendo preservation, enhancement and AI
       | research ;)
       | 
       | What's the best way to programmatically interface with an NES ROM
       | in 2022? JSNES, from which you could run tensorflow.js, seems
       | perfect for browsers. But NES-py integrates with Open AI Gym env
       | 
       | https://github.com/Kautenja/nes-py/wiki/Creating-Environment...
        
         | fartcannon wrote:
         | Gym-Retro works up to python 3.8 at the moment.
         | 
         | https://www.youtube.com/watch?v=sgEIoOQgjFg shows how to
         | integrate an AI using gym-retro, stable baselines with pygame
         | so you can fight it.
        
       | [deleted]
        
       | loufe wrote:
       | I love that there's something innate about our desire to do
       | things like these. I caught myself c# a couple years ago on a
       | project I made to solve Minesweeper
       | (https://github.com/Loufe/GroundPenetratingRadar). Very much a
       | "journey" and not "destination" oriented endeavour.
        
         | jareklupinski wrote:
         | ha! great name :)
        
       | jedberg wrote:
       | Me: Clicks on video, see's it's 25 minutes long. Thinks, "I'll
       | watch a few minutes and see if it gets interesting".
       | 
       | Me, 25 minutes later: Dang, that was cool and a fun nostalgia
       | trip!
        
         | akira2501 wrote:
         | The "Classic Tetris World Championships" are my favorite and
         | personally most entertaining e-sports championships I watch. I
         | highly recommend it.
        
       | 14 wrote:
       | That was really neat to watch. I started playing Tetris when it
       | was first released and still play it on my Nintendo years later.
       | My kids try but I can always beat their score and they think I am
       | a master of the game. I can't wait to show them this video. Very
       | awesome to watch.
        
       ___________________________________________________________________
       (page generated 2021-11-27 23:00 UTC)