There's a few things that come to mind when dealing with AI for me:
-A scoring system, first of all. Start at 127 and work your way up or down (0-255). Talking about the switching scoring system:
--Raise if enemy's mon checks/counters your mon
--Lower if your mon checks/counters enemy's mon
--*Lower if your mon usually has a super effective move (usually is dependent on what setting; in-game playthroughs typically don't have "usually"s)
--Lower if your mon does have a super effective move
--Raise if your mon is starting to trend toward having not very effective moves
--Last, semi-randomly pick from the top 3 highest scores, weighted to ensure the highest pick is weighed more
-*Common teams and sets for expecting Pokemon, moves, and stats (and scoring appropriately) [this is also a case of "usuals", it depends on the setting]
--*If they are usually passive or deal little damage to your Pokemon, try to set up (this depends on very specific cases and thus would be something to be done
after the core AI)
-Having the AI be able to calculate the damage based on revealed information and the aforementioned "expecting" cases
-*Expecting a good same type move from a Pokemon (in a competitive setting; not so much typical in-game playthroughs, but maybe for the Battle Frontier)
-*Last, the ability to go through with long-term game plans (wholly determined by specific cases, much better saved until end of AI tweaking)
Personally, I'd like to see a game mode where it's like the Battle Tower, but with 6v6 "[Gen 3] OU" battles from Smogon sample teams. That's why I've been working on my own AI with
Smogon info. I haven't gotten far with the AI, but I hope to implement all of the things I just mentioned.