Ah sorry, I interpreted that completely incorrectly. What I thought you meant was how well it fared against specific threats, as opposed to how balanced the team's overall coverage was. I kind of touched on the threat thing but I'm not sure how well it would work. But I missed the "tiers main threats" bit, which probably would work. I'm guessing you'd base that on, say, the top 30 pokemon in the tier's usage stats?
Also, would it ignore the mega stones in a set? So if you see a Charizard, it's fair to assume it's a mega, but if it doesn't know what to do with mega evolution, would it just ignore the stone and assume regular Charizard? My thinking is you could acknowledge that the Pokemon has mega evolved by just assuming that it will evolve on the first turn that it's out. This might create issues with stuff like Slowbro where it's 50/50 as to if it's even holding a mega stone, but it's a thought.
Yeah, I hate, like, really, defensive coverages checks for team building. A beginner looking at his team will think he has a good defensive cover because, for exemple, he has 3 weakness and 3 resists in both ice and electric. Except for the fact that all these weak to electric are weak to ice, and the reverse. So, it's 6 weaknesses to boltbeam. It's shit.
If checking how a team fares against the main threats is too much while teambuilding, at least one should check how it fares against generic coverages, not types alone. Checking versus type doesn't make any sense at all. To me, defensive coverage checks are the best tools for building bad teams.
Also, I guess I'll just assume the mega in the opponent's team is the most often used ... Scripting the fact that the attributes of a pokemon can completely change from a turn to the next is already difficult enough, I won't even try to have it think wonder about which mega is it. And yeah, that it's going to evolve on the first turn.
To be honest the entire notion of an evaluation system seems impractical (and borderline intractable) in a quantum game like Pokemon. It's not turn based like in Checkers or Chess, etc. So you can't just evaluate 12 ply deep or anything like that. There isn't really a single tree. There are somewhere between 16 and 81 (4 options each if you're both on last mon up to 9 options each if it's still 6 v 6) trees you would need to follow every turn, growing exponentially each move deeper. Chess is sequential and so you can quickly discard trees that clearly aren't working. There's also the matter of chess being a game of perfect information. Bishops always move like Bishops. In this circumstance you don't even really know what the trees you need to evaluate are. Does it have a boosting item? Am I faster? Is it carrying HP Fire? etc... and in Chess you never have to predict anything either. Your best move is always your best move, no probability weighting is needed. All in all Pokemon is more dynamic and you can't really do the same things you do to evaluate chess, because it's certainly more complex turn by turn.
But even if you figured out turn 1 fine (which I still doubt is doable in any sort of useful way with mere evaluation) it doesn't do much of anything to play Pokemon well in the long run. Long run strategy when playing offfense for example depends way more on winconditions than anything currently on the field. It seems your method would figure out how to play with more stallish teams decently, but not much else.
Instead, I think if this problem were actually going to be attempted to mimic intelligence and play at a real human-level strength, it would need to be done with something considerably more sophisticated, maybe via neural networks and machine learning. That might not even really be sophisticated enough though. This method was attempted to learn to play checkers (look up Blondie24) and it did it really, really well. But as I said above Pokemon is more complicated to evaluate than even chess, and so surely Pokemon is several orders of magnitude more complicated than checkers.
I don't want to diminish what you've done. It's cool. For sure. But I do want to make sure you really understand this method's severe limitations as well as how impossibly massive this problem is.
I noticed the problem was difficult, indeed. That's why I've been looking in weird decision algorithms, and why I came to this : for reminder, the bot's insight into long-term playstyle is its situation rating, that is, evaluating each (36) power relation amongst pokemons. Also, he only looks one ply deep except for switches where it's two - since, as you said, looking further would be impossible.
I'm not trying to make a bot that can compete. I'm trying to make the best bot, in short, make it as good as possible.
Also, I'm not looking into 81 options, or rather, I won't, when anticipation is done. This would make little sense, about 70 of these 81 possibilities would never happen. What I'm planning on doing is deciding that one of the players is currently (I mean, on the field) in a better position than the other. Once this is established, I can make a lighter anticipation process.
But anyway, it is FAAAAAR more difficult to build decision trees on games where both players play at the same time. And worse, if anticipation matter. And even worse, if you don't know exactly what your opponent's cards are. I could figure out that much myself, and I do realize this is tough stuff.