opponent modeling, scouting, and software development
Opponent modeling is coming along, though never as fast as I would like. Steamhammer now records a pretty informative model. Making best use of the model is not as easy—it has a ton of uses. If it works as well as I hope, Steamhammer will gain scary predictive abilities, even against opponents with multiple strategies.
Opponent modeling depends on good scouting. The more Steamhammer finds out about what the opponent does, the better the model. So today I added a new scouting command, "go scout once around" which sends the worker scout on a single circuit of the enemy base and then returns it home. (Usually. There are some funny cases because the waypoint numbering is not quite clean.) In a lot of openings, I used it to replace "go scout location" which only finds the enemy base and doesn’t look to see what’s there. I’m thinking of also adding "go scout while safe".
The command is a minor addition, but while hooking up the wiring I saw awkwardness in the communication among ProductionManager which executes the commands, GameCommander which initiates scouting, and ScoutManager which does the work. I ended up spending the whole afternoon refactoring it for simplicity and testing to make sure I hadn’t broken anything.
Is that what I should be spending my time on? And yet it makes Steamhammer better.
Comments
Joseph Huang on :
krasi0 on :
Alexander Wellbrock on :
While you seem to work on prediction skills to use them in handcrafted scenarios I concentrate on creating a complete strategic model, which leads in extracting even more data then you do. I think using the predictions your way could lead to a way more stable behavior, so I'm really curious what will happen.
I'm glad that you implemented that scouting feature :)
In principle the model depends implicitly on all other components (e.g. micro behavior, building placement) of Steamhammer as well. The recorded data is influenced by the play style of the bot and how the opponent reacts to that, if that changes (through bug fixes, optimizations or major changes) the model should be outdated and produce errors.
To answer your question, sometimes those refactoring sessions are kind of zen meditation practices :)
I'm looking forward to exchange my experiences once I'm done with the thesis and the source code is published.
Jay Scott on :