A couple of days ago, this discussion about the difficulty of getting an AI to play Mario Kart started up on a post I made. I decided to start doing some research into gaming/speedrunning AI and it has ultimately led to me staring at a screen watching an AI try to complete 1-1 in Super Mario Bros for the past two days.
The AI is a simple Lua script that runs in an emulator, but it was designed specifically for Super Mario World. There are some issues I would like to straighten out with it, as it can not complete 1-1 yet. Basically, the AI presses random buttons until it starts to move to the right. Moving to the right will give it a progressively higher score, and if it stops or dies, it will reset and try again. It then takes the best attempts and expands on them.
I've been observing some of the intricacies of how the AI functions, and I think that with some tweaks, it could actually learn to complete quite a few of the levels in Mario.
The source code is here. It runs in the FCEUX emulator and is very easy to set up. It'd be cool to turn this into a little project and expand on it, because it really is fascinating to watch and I don't think it will be that difficult to do.
Ah! There I go displaying my ignorance.
After watching the SMK vid, I realized the SMK program can only drive (give or take) as well as the human it learns from, which makes setting new records an impossibility.
So what happens if the trial/error system used in SMW is allowed to "mutate" a fully trained SMK program? Perhaps through some sort of shared control, where the SMK program only keeps memories from high-fitness species of the trial/error program? It seems to me that if the lap times were used as a measure of "fitness," a hybrid system could achieve some interesting results.
I know nothing about actually implementing any of that, and for all I know the idea is either redundant or impossible, but I figured I'd share regardless.