@Janzer, @RyanDraves Thanks for looking into this, I think I have figured this out. What I seem to be encountering is that if players 1 and 3 and players 2 and 4 rush each other, according to my combat code, the initial conditions cause players 1 and 2 to win every time unless there's an obstacle between them. So I added a random displacement to the first move of every player (not much), and the ratios now ever so slightly favor the bottom players (3 and 4). This came up during backtesting and watching my bot get slaughtered rushing other bots where it destroys all of my previous bots.
And if you watch any of my games where my bot comes in 4th, it's usually because it rushes too aggressively. Also, I suspect that up against other bots who are not attacking their nearest neighbors, this wouldn't apply. I am working on a countermeasure for this right now. I have seen @arjunvis counter me very effectively and if that's from his underlying model, that's awesome (it's still cool if it's a hacked rule, but it's awesome if the model figured this out!).
PS I am happy to share source code (though it's ugly as I am experimenting with a lot of things) if you want a repro of this behavior, but I'm not sure it's a bug in the engine so much as it's a feature of its deterministic behavior and deterministic starting conditions. That said, it would be nice if it were more random given different random seeds (maybe give the ships random displacements within + or -1 of their otherwise constant starting position?).