"Yomi" is a concept coined by Sirlin. It is
Japanese for "reading", in this case used to signify reading your opponent's mind.
Yomi as a tactic exists, in Sirlin's explanation, as a natural evolution of rock-paper-scissors. If I know my opponent is only throwing rock, I know I want to throw paper. In a natural vacuum of RPS, though, there is no real reason to throw any one over the others than
psychological humbuggery. That's why people made up "Weighted RPS". This is basically RPS where different throws are worth different amounts.
You and I are gambling via RPS. In non-weighted RPS, the loser gives the winner a quarter. In weighted RPS, this is different. If the winner wins with rock, he takes a quarter. If he wins with paper, he gets a dime. If he wins with scissors, he gets a nickel. This is a slightly more interesting game. In this game, we both want to win with rock. This is called "Yomi level 0", since it's what we want to do right off the bat. But you, being the clever person that you are, realize that I want to win with rock. Since you'd rather gain a dime than lose a quarter, you decide to throw out paper. This is "Yomi level 1". I, thinking quickly as we get ready to shoot, realize that my plan was transparent. Since I know that you know that I want to win with rock, I know that you are probably going to throw out paper. I decide that winning a nickel is better than losing a dime, so I decide to throw out scissors. This is called "Yomi level 2". Since you're so very clever, though, you realize as we're tossing out our respective hands that I know that you know that I want to win with rock. This means I will toss out scissors. Reasoning that winning a quarter is better than losing a nickel, you throw rock and take my quarter. This is called "Yomi level 3", and it is classically the same thing as yomi level 0.
Yomi is a purely strategic ability. The ability to properly read your opponent requires you to know how good various things are. It also requires some intuition. It can also be greatly assisted by knowledge of your opponent's opinion on what things are and are not good. In a situation like QDN-weighted RPS, the value of various moves can be explicitly characterized.
Pokemon is a good game because of its inherent RPS in its typing system. Each pokemon has either one or two types, and those types determine what they take extra damage from and what they take less damage from. Thorough knowledge of the what-beats-what graph is all you need to be a Pokemon master in the Gameboy and DS games. If you have a pokemon who can beat each type your opponent might bring out, you can sweep the enemy's team with no problem. However, not all was right with the world of competitive Pokemon, back in the day.
In the original Red and Blue Pokemon games, the strongest pokemon was Mewtwo. Psychic was his type, and it was simply better than any type other than Dragon type. The only Dragon type on par with Mewtwo was also Flying type, and all pokemon in the supposed counter type (Ghost) were also Poison type, so they were weak to Psychic attacks. It was not a level battlefield. There had to be a way to defeat it.
In comes Parasect (if my long-ago knowledge serves correctly). With a bug-type attack and a 100% effective sleep attack, it could take one (and only one) hit from Mewtwo's psychic attacks and in return put him to sleep. After that, he could eat Mewtwo's health until he fainted. It was pretty great for a short time. Then, Mr. Mewtwo-user realized that he could put an Ice-type attack on his Mewtwo. This would allow him to one-shot those pesky Parasects, along with murdering those Dragonites.
So eventually, people just banned Mewtwo. Mewtwo made the game bad. Psychic types in general made the game bad until they added two types that were resistant to psychic attacks and added better attacks for types other than Psychic. As well, people eventually banned pokemon who were too good. There is a numerical rating for "too good". Their stats are too high, or they have abilities that there is no counter to.
This can be equated to something like RPS. In an idealized pokemon world, you have two arbitrary pokemons. They may or may not be injured. In a pokemon match, there are several basic things you can do:
1. Attack. This may be with an on-type or off-type attack, depending on what attacks your pokemon can learn. Both pokemon's types are important here, since if your pokemon's type matches your attack's type, it is stronger. Note that type A may be weak to attacks of type B, but that doesn't imply that type B is strong against type A. As an example, Dragon is weak to Dragon attacks, but Psychic is strong against Psychic attacks.
2. Switch out to a different pokemon. This is another sub-game of RPS. Grass, Fire, and Water form a RPS relationship. If you have out a fire pokemon and your opponent has out a grass pokemon, they probably want to put out their water-type to deal with your fire type. However, you can anticipate that and put out your own grass type. Obviously in Pokemon, these relations are more complex. However, you can still generally characterize things as saying that one pokemon "beats" another pokemon, even if it's due to things other than type.
3. Use a non-attack ability. And other weird stuff. I don't want to get into this to much, but suffice it to say that there is a lot of shit to complicate pokemon fights. This will get complex enough as-is without going into everything right now.
Since 3 isn't a real point, 1 and 2 are what we're going to work with here. Assuming only 1 and 2, we have broken several fundamental RPS assumptions.
1. RPS cycles can be longer than 3. Rock>Bug>Psychic>Fighting forms an almost perfect four-part cycle, with the exception that bug attacks deal low damage to fighting types, and fighting attacks deal low damage to bug types. Note that the actual-play cycles are slightly more complex, involving the various statistical strengths and weaknesses of individual pokemon, as well as both of their types.
2. RPS cycles are not necessarily symmetric along type lines. Just because A deals extra damage to B, that doesn't necessarily mean that B will deal less damage to A.
3. Again, pesky 3 brings up the fact that there is a lot of shit that will mess with the graph. For example, some Steel types are immune to ground type attacks, despite the fact that usually, they take extra damage. It's just an individual ability pokemon sometimes have. As well, some pokemon get way better depending on what the pokemon before them did. A pokemon who uses light screen and reflect means that for the next several turns, your pokemon take less damage. There isn't a good way to characterize that except on a case-by-case basis. As well, the discovery of combos like that can change the entire game.
This screws things up so much. A good metaphor is the following: You and I play RPS. If I win with rock, I get a dollar and a quarter. If you win with paper or rock, you get 75 cents. In all other cases, the winner gets a quarter. Also, let's say there's Telephone in between rock and scissors. So Rock beats Telephone beats Scissors beats Paper beats Rock. If you throw any other relation, it's a draw and you redo it. Also, I get to call for a redo exactly once. That is a decent model of the type system of pokemon. This complicates the yomi grid.
It's late and I'm tired, so I'm going to skip to the conclusion.
Since we have bigger cycles and asymmetric cycles, the best switch-in pokemon is good against two types that are next to each other in an RPS grid. So if they have out a Gengar which beats your Starmie (this is true for complicated reasons relating to the pokemon metagame, not for type-based reasons), you might want to switch in a pokemon who is good against both Gengar and the traditional counter to the traditional counter to Gengar. This can exist due to the asymmetricity of the who-beats-who graph. In effect, the best strategy seems like it would be to minimize the possibility of your switch-ins being countered. In this case, you might switch in a pokemon who uses both dark-type attacks and flying-type attacks, since dark beats ghost and flying beats both bug and fighting, which beat dark.
Obviously, this isn't necessarily going to exist. And the best move isn't necessarily going to be to switch like that. In reality, the best thing to do about the Gengar-Starmie situation is to have Waterfall on your Starmie, which can one-shot a Gengar due to its low defenses and due in no part to any type-based vulnerabilities.
What I want to do is make a big grid of who-beats-who and then do some computational data analysis on first-order and second-order counters. I would like to see what type of team I can make out of "I am the counter of your counter and your counter's counter." Obviously, this might mean that no pokemon is the ideal counter to anybody's counter. But hopefully over the long term, the reduction of the problem-space makes the less-ideal pokemon worth it.
I realize that this is basically what people do to make teams in the first place, but I want to see if I can cast "use computers" at the problem and formalize a heuristic for finding a good strategy.
If we can solve the grounding problem for fighting games, we can do something similar for making a good fighting game AI. Fighting game yomi is more complex than RPS in ways similar to the RPS of pokemon types.