Being an Educational and Informative Treatise on the High and Noble Art of the Rush, by Noted Halatian Fohristiwhirl, BSc, MA, Member of the Legion of Rushers (Platinum Class), Scourge of Expansionist Bots, Author, Poet, Gentleman, et cetera, et cetera.
Thanks for sharing! I was the other player in your first example game. I noticed that you can consistently crush "naive rushers" like me but I couldn't figure out your magic.
Cool write up, thanks. I didn't even consider there was an optimal position. But I did notice that I was no longer doing well in rushes, so last night, I changed my 2 player rush to always run around the middle planets. Also, I wrote my undocking code recently, so I didn't notice that you could move 1 turn early.
Wow, that's how you were crushing me! I knew you were up to something and at my end I generated a low-resolution heat map of where ships started at and where they could end up that I plugged into my collision avoidance to avoid flying through spots where a single ship was in range of >1 other ship. What I didn't get to was triggering the heat map dynamically nor was I capable of coming up with an anti-rush strategy based on fair but tough wherein I would pick the most anti-rush planet possible and then undock if enemies came in range.
At the time of writing (middle of Finals) the bot's score in Finals rushes (defined as 2p games with < 10 ships produced) is now 271-22.
So it works pretty well...
Super cool stuff!
Did you use the same sweet spot theory in coding your bot for engagements later in the game? I can definitely see how this sweet spot logic could help you set up a sort of wall that would just smother advances from a more naive opponent.
If you made a map of regions approachable by one ship, assigned the enemy ships' ids to regions they can approach, and then solved an assignment problem to maximize the number of enemy ships you might gang up on, you could set these situations up all game long.
Would that lead to too much stalling behavior? If you did this, would you want to prioritize regions of the sweet spot near the opposing ship, to quickly close in on and eliminate enemy rabbits/solo-invaders? Getting close to the ship seems like it would increase the odds that it would navigate into combat range. Spreading ships out inside the sweet-spot might help your ships cut off escape routes for runners.
I started coding my bot with an eye toward creating coordinated 4-5 ship wings, and it seems like this would have been a great continuation of that idea. Unfortunately, I sort of lost steam a month ago, and never really got wing behavior working right.
I didn't use this outside of rushes. Firstly, I would need a faster way to do it than the GA. Secondly it's rather conservative, usually backing away from the enemy, which isn't always what you want.