[As an aside, I once assembled a PvP team I called Hulk Smash for a beginner's first foray into the queue: Bone Serpent, Nexus Whelpling, Iron Starlette. I showed him how to use each of them, told him to try for good matchups for each against each of the opponent's pets, duelled him twice, and let him go. He did quite well.
![Smile :)](./images/smilies/icon_e_smile.gif)
Anyway, by brute-force I meant solving a battle by brute-force simulating all possible moves, or, for speed, simulating all moves while pruning branches that appear unpromising. This method is used in many areas of computing, and notably in games. https://en.wikipedia.org/wiki/Solved_game The search space for a pet battle is not unreasonably large. Of course, RNG elements would expand the possibilities, but I think for a basic solution, I'd be happy to see values with things like crits and Darkness misses removed.
I started to look at this once, but was daunted by the, um, idiosyncratic behaviour of many abilities, like coding a two-hit Alpha Strike to take down only one Decoy. After that, the actual solution of a battle for two given teams would be relatively easy. I have been tempted to produce a starter project that would solve a one vs. one duel between two pets, just to quantify how big the gap is between the top and bottom pets.
You seem to have studied this quite extensively, and perhaps only an actual solver could provide improvements.