Steamhammer vs LetaBot, SSCAIT round of 16
Steamhammer’s round of 16 game in the SSCAIT was entertaining. It was played on Moon Glaive against Martin Rooijackers, the latest LetaBot. Steamhammer has played a bunch of games against this version of LetaBot, so I can roughly estimate by eye (without counting the games to be sure) that Steamhammer wins maybe 1/4 of the time or so. LetaBot is clearly stronger, but there is a chance of an upset. The round of 16 is single elimination, so the winner moves on and the loser is out.
Steamhammer 0.2 opened with its 2 hatch muta rush and LetaBot went rax-expand. The video doesn’t show it, but Steamhammer’s first 4 zerglings got 3 SCV kills between them. They sniped the SCV building the natural command center and 2 more that came to replace it before marines chased them off. That set terran back, though not decisively. Here the zerglings are escaping from marines that you can see on the minimap, and LetaBot is about to resume construction.
LetaBot built 2 bunkers in front of its natural for safety. Unfortunately for Steamhammer, the map positions meant that the bunkers were on the straight line flying path between bases, so Steamhammer’s bunker OCD meant that zerg could not harass. The mutalisks stopped and stared at the bunkers in a standoff. Nepeta in the video politely called it “containing” the terran, but since zerg played a rush opening and terran played an economic opening, zerg was falling behind with every passing second. The rush must do damage to win.
LetaBot already had a winning game when terran moved out. If the terran ball had stayed compact, the terran forces would have punched through all opposition and won on the spot. But LetaBot let its forces string out, and the mutalisks were—just barely—able to defeat the army in detail. (Watch Carsten Nielsen play. The protoss bot may be the champion of maintaining good formation with its zealots while attacking. Few bots can do it at all.)
I selected a mutalisk so you can see the zerg resources and supply. Steamhammer 0.2’s poor macro is showing; it expands too late and does not know how to build macro hatcheries, and it did not have enough hatcheries to spend all its income. Terran was economically far ahead and zerg was failing to keep up production, so it hardly needs saying that the next attack brought victory to LetaBot. (Macro is much improved in the current development version, though still not good enough. The current version would have crushed the attack with forces to spare, and would have still been in the game.)
An entertaining game, though more one-sided than it may look!
Comments
anon on :
I can see from a saved old copy of the SSCAIT replays web page (http://www.sscaitournament.com/Replays/) that the Ro16 games were played a couple of weeks ago. The first game was Martin Rooijackers vs Steamhammer, and Steamhammer won! The replays are currently downloadable at the time I am writing this (even though it is too old to be displayed on the current web page) and this replay is http://www.sscaitournament.com/.../176045-MART_STEA-TVZ.REP. Then the other seven of the Ro16 matchups were played (exactly one game for each matchup), in the same order as were actually cast. Then one game that was apparently randomly scheduled was played (i.e. http://www.sscaitournament.com/.../176053-Aman_Bere-TvP.rep), presumably because the system continues playing randomly-scheduled games after it finishes playing games that have been scheduled manually. Then Martin Rooijackers played Steamhammer again and Martin Rooijackers won this time, and this is the game that was actually cast (http://www.sscaitournament.com/.../176054-MART_STEA-TVZ.REP). Then the system played randomly scheduled games again. Why was Martin Rooijackers chosen as the winner rather than using the initial game in which Steamhammer was the winner? Shouldn't the winner be Steamhammer? All the other games in the hours before and after these games appear to be randomly scheduled, as far as I can tell anyway. For the other seven matchups, the winners do match the initial games that were played a couple of weeks ago. Maybe I am missing something, but looking at the replay filenames and their timestamps, there do not appear to be any gaps in the replay numbers or times when additional games could have been played that are missing - they seem to have been played one after another over 90 minutes.
Jay Scott on :
Jay Scott on :
krasi0 on :
Wrt watching funnier games, I'd say that SH vs Iron or SH vs krasi0 would be more interesting to watch than SCV rushes.
Just my two cents.
LetaBot on :
Also, before some conspiracy theorist notices, two other Ro16 matches were also replaced by later games without me looking at the results :) The reasons for this are equally stupid and random - I managed to send 6 instead of 8 reps to nepeta and when I realized it, it was easier for me to reschedule than to look for the old ones.
So in conclusion, if I schedule a few games in a row, it doesn't mean they will 100% all be used for the bracket. There are unexpected external factors and my own fuckups which influence this, but I assure you - there is no intention to fix the results.
------------
So basically, he send the replays that he viewed live himself. One other replay was out of order because of this as well. Still congrats on making it this far Jay. You would've lost to Wulibot in the next round otherwise anyway.
Since the CIG doesn't live stream all games, it will be a Round Robin stage only. So hoping to see you there to see how our bots match up after playing 100 games vs each other.
Lucumo on :
MarcoDBAA on :
1. It should be clear from the beginning, which matches will be used for the tournament. It can´t be a good idea to choose the replays after the matches are already played.
2. This would be aganist the spirit of competition. I don't think that this is the reason however hopefully. Additionally Letas SCV rushes aren't very fun, although his bot normally is. A best of 5 final with SCV rushes against Krasi0 would be anticlimactic. Either way, if fun was the most important thing, Leta wouldn´t have changed his strategy at the last moment before deadline. Other authors also want to win surely.
3.To prevent strong bots from getting eliminated in the round of 16, the matches should always be best of 3 (better for Leta surely) and the winning bot of the round robin should play against the first bot it has a 2:0 against in league play. Then second bot of the round robin against the first bot it has a 2:0 against, that wasn't "chosen" by the winner, and so on.
Final remarks: Winning at all cost wouldn´t be the most important thing for me either. I would want to have a bot that can use all units reasonably well first, but tournaments should let the winner continue to the next round. That's what a tournament is about. To counter luck, see answer to 3, and Leta would still have continued without controvery.
Thanks for your blog by the way. I don´t have a bot, but it might be the next thing I try.
The SSCAIT stream is also great, watching awesome bots play.
krasi0 on :
MarcoDBAA on :
It would be the same as now, except if the score is unfavorable. If the winner of the round robin lost or drew against 16, it will play 15, respectively the first bot from below it won both matches against. 2 then gets the first opponent from below, that it has a 2:0 against, and that is still in the pool. In the Ro8 and later the round robin champ could still be seeded after the same principle, and would play against the lowest opponent from the round robin with a 2:0 score, that is still in the tournament at that time. The advantage because of the round robin results would be larger, and the excitement of a cup format would still be there.
Jay Scott on :
krasi0 on :
Jay Scott on :
Ail on :
Maybe some ideas for you: I use a drone to army ratio which the Bot will try to keep. It depends on the built and the situation at hand, but it generally does a good job.
There's two different triggers to when it makes a hatchery. Having all bases saturated for expanding and being out of larvae for Macro-hatches. The saturation - check had to be rewritten as the UAB way of doing it was buggy. When it's supposed to be a macro hatch simply skip the search for next expansion. Arguably my Bot makes too many macro hatches as it often builds them when there's just drones and lings to be made, burning through larvae quickly.
However, when my Bot rolled an eco-heavy build and is left alone, it gets to 200/200 extremely quickly. When the default Ai is zerg for example, before it attacks the first time, the Bot often already is close to 150 supply. (currently it won't attack before armysupply > workersupply)
krasi0 on :
AIL on :
krasi0 on :
Jay Scott on :
AIL on :
int desiredExtractors = int(std::floor(0.038 * workerSupply));
desiredExtractors = std::min(desiredExtractors, WorkerManager::Instance().workerData.getNumDepots(true));
As you can see I added a parameter to "getNumDepots", which I had to include since I allowed Min-Only-Expands, so the "true" means to only give me the amount of Depots that have extractors and/or geysers. Oh, and NumDepots also was modified to only counts hatches that are at the spots where the hatch belongs... I think The Map-Tool had a method to check that.
The problem with the saturation was, that simply sometimes the amount of drones in the Map did not agree with the actual amount of drones there. So my check counts them. And I rebalance by peridoically calling the rebalance-method but instead of checking all drones, I let it break after 1 drone if it was a regular call and break after 3 drones when it was called by a mineral dying. New drones are automatically sent to the lowest saturated base. So my worker-saturation usually is very well split. And I use Gas-drones aswell, when an extractor is there and even reduced it from 3 to 1 per mineral for the recognition if I shall expand. As Zerg u usually don't saturate so much.
And yesterday I made it so the Bot won't expand, when the known enemy-army-value according to Information-Manager is bigger than my own, as expanding during a zealot-rush would be pretty stupid.
I also wanna see my bot play.
I have one parameter, which is just a double-value you can set from 0 to 1 and 0 is 4-pool, 1 is macro to 75 drones before getting units and everything else is something inbetween. I currently let it randomize between 0 and 0.32, so my bot plays a different random build every time. ^^
I have another ranomized parameter for SunkenToWorker-Ratio, but the higher values create too many sunkens, so I maybe use either a fixed value or make the boundaries for the randomization tighter.
Eventually I'd like to record the value alongside with the result and the opponent to have some kind of machine-learning that way. For example, I know that the Carrier-Bot would most-likely die to my bot if my bot goes high-eco.
Which units my bot builds now also is adaptive but not in a very nice way yet. Also it can only build Lings, Hydras, Mutas and Ultras.
Muta/Ling is the default and it deviates when it sees many air-units (Hydras) or many anti-air-units. (Ultras)
Jay Scott on :
Jay Scott on :
Jay Scott on :
Ail on :
I m pretty confident it is round of 16 material already. But then again, Uab-base with its brutal rushes is as well, so not that much of an accomplishment.