A Small AI Ramble
Note that for this whole ramble, I'm assuming you have no fighting game knowledge.
I have some much greater (and much more negative) opinions on AI, but I do think that machine learning itself can be a useful tool for some applications. And honestly, stuff like Stockfish really fascinates me. And that's really the main line of thinking that got me to think about training an AI for a fighting game.
For probably a few reasons, my mind immediatly went to Nanase from UNI as a baseline for a fighting game character. And something that I realized is that, with machine learning, and AI could never reasonably learn how to play as her, because of her 50/50.
In fighting game terminology, a 50/50 refers to any situation in which your opponent has to guess what you're about to do. Probably the easiest example to explain would be a jump in: if you use an attack in the air while close to the ground, it's ambiguous as to whether it will come out and hit, or not. If the attack does come out, it's a high, and has to be blocked standing. But if you land without the attack coming out, then you can use a low attack the moment you do so, which has to be blocked crouching, making a 50/50. A true 50/50 is one where there's no "option select"; no set of inputs where you can cover both options. With a true 50/50, the only thing you can do is guess.
Nanase has two normals that change while she's dashing- her medium (66B) and her heavy (66C). 66B is a low, while 66C is an overhead/high. While 66C has a longer start up time (9 frames slower; 1 frame = 60 seconds), both have very similar animations; similar enough that you could reasonably confuse one for another. Because of this, there's a setup you can do if your opponent is in the corner (the absolute edge of the stage) that causes both moves to hit on the exact same frame- resulting in a true 50/50.
And there's no reason to expect that an AI would ever learn that this 50/50 exists.
Yes, if you let it run for like, a billion iterations or something, it might find the setup. It might even find that 66B/66C hit on the same frame. But the thing is is that an AI doesn't "learn" from watching; an AI is just a function. All it sees is numbers; and if it can see more, it likely doesn't go past hitboxes. As good as an AI could get, it will never learn that this is a true 50/50, because it doesn't know what the moves even look like. For all it knows, the animation of 66B could just be a slide with no flip, and 66C could be a massive leap, and there's no ambiguity in which move she's doing. Or it could even be something completely different, because the AI just sees a bunch of numbers and some boxes. It doesn't even know that it's playing a fighting game! It's just optimizing a function in an uncertain enviornment.
Also, just as a little footnote- yes, you do need to use the setup to have a true 50/50. If you don't, you opponent can "fuzzy block"- block low, then block high. With fuzzy blocking, you can block Nanase regardless of which dash attack she's doing without needing to react in 9 frames; you just go from holding down-back to just holding back. The setup removes this option by having them both hit at the same time, meaning there isn't any opportunity for you to fuzzy block.