archive by month
Skip to content

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.

the 4 zerglings escape

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.

mutalisks stare at the bunkers

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.)

LetaBot lets its forces string out

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!

Trackbacks

No Trackbacks

Comments

anon on :

FYI, this is a from SSCAIT facebook comment:

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 :

Btw, I manually moved this comment from “Steamhammer versus Zia for the SSCAIT round of 16” to here. The current post wasn’t made in time for anon to comment on it, but it is more appropriate. I hope the move doesn’t cause any confusion.

Jay Scott on :

I have both of those replay files. Let’s consider different reasons for how they chose the game they wanted to make official. 1. It was an admin mixup or other minor confusion. Eh, things happen. It doesn’t matter. 2. The purpose of any single-elimination bracket is entertainment first, by the nature of the tournament format. Maybe they wanted a more fun game. If so, it worked! 3. They know that LetaBot is stronger and is a potential tournament winner, and Steamhammer is weaker and can’t take first place. They manually intervened for a more fair result. And you know, it is more fair! The single elimination format is unstable because of upsets, and fudging the results can reduce that. LetaBot is stronger, and Steamhammer would lose 100% to Wuli in the next round. So that doesn’t bother me either. No matter the reason, I’m OK with it.

krasi0 on :

Well, anon's point is still valid. Also in the broadcast game, I wouldn't say that Letabot played in a stronger way than SH. Until a certain point, you had the initiative. Besiders you have already mentioned the luck factor which in this case wasn't in your favor.
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 :

Michal Certicky: Hi guys. Wow, did Steamhammer really win that 1st game? (176045) I did indeed schedule those 8 games in a row, but then I had to go afk before they started and returned only in the middle of match 2. And since I wanted to see all Ro16 games before sending them to nepeta (to be sure all went without technical problems), I just rescheduled the 1st match, assuming it won't affect the result (I didn't even look at it). I assure you, there is no match fixing - just a lot of circumstantial randomness :) I don't even have any reason to favor one bot over the other.

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 :

Only 1. Admin mixup/confusion and a potential 4. Technical problems with a bot the first time around are valid reasons, in my opinion.

MarcoDBAA on :

Greetings to everyone here :)

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 :

I like all of your three points. Not sure about matching up the opponents in 3. though

MarcoDBAA on :

Not sure if that suggestion was understandable as I explained it.
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 :

I moderated out a rude comment for the first time ever on this blog. Some people are unhappy with even the appearance of impropriety.

krasi0 on :

Who was the comment posted by?

Jay Scott on :

I don’t have any way to know for sure. And if I did, I doubt it would be helpful to say.

Ail on :

Macro is the one thing I focused on first in my Bot and I am extremely satisfied with the results so far. I threw out Boss completely for that, as I simply could not get it to obey to what I wanted.

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 :

You didn't mention the name of your bot. Is it Ail? :)

AIL on :

I've not 100% decided on the name for my bot, since upload is disabled anyways. AIL is very likely though, but could also be something else, we'll see. I guess you already figured out, that I'm "Xilmi" from Twitch, right?

krasi0 on :

Well, just now I have :)

Jay Scott on :

Interesting, thanks! It’s similar to what I have and what I am planning. BOSS’s bugs are bigger than its benefits, I decided. So far, as a first step, I make a new hatchery on short notice when the money is there and the larva count is zero. It works better than I expected, but for perfect macro I need to forecast the unit mix and future needs, both for hatchery count and extractor count. For a given drone count, scourge-ling needs more macro hatcheries and less gas than hydra-guardian. :-) Also, I think whether a hatchery should be a macro hatch or expansion should depend first on whether the expansion is safe to take, which is not so easy to figure out. Also also, I’m not making overlords at efficient times, which is the biggest slowdown at the moment. For worker saturation no obvious bugs have caught my eye. I’m curious what problem you saw? It doesn’t balance between expansions properly. I reduced the max drones per mineral patch from 3 to 2. I did notice a potential bug in WorkerData: It keeps 2 maps of worker-to-mineral patch and doesn’t update them in sync, so something is probably wrong, but I didn’t look into details yet.

AIL on :

For Extractor-Count I use this:
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 :

Hmm, number of drones in the map doesn’t agree with the actual number? That jibes with what I saw in the code. I should be able to fix the bug in WorkerData.

Jay Scott on :

Ah, the WorkerData bug that I suspected is real, but it doesn’t explain your miscount. The bug turns out to have no effect in practice unless you add a call to WorkerData::getWorkerResource() which asks which mineral patch a worker is mining. UAlbertaBot in its original form only asks which refinery a worker is mining. I fixed it anyway: I removed the declaration of workerMineralMap from WorkerData.h and replaced its 2 occurrences in WorkerData.cpp with workerMineralAssignment, which should be correct.

Jay Scott on :

I’m looking forward to seeing your new bot play when submissions are reopened! I haven’t seen a bot with absolute freedom to choose workers or units, so it should be fun.

Ail on :

My Bots approach is really good in ZvZ. It does these slow natural transitions from 4-6 pools into several hatchery - zerg Ling pressure. And when it sees you have more sunkens than units, it will switch into full macro mode. I also can't wait to let it lose on all the others. Just improving it further so it becomes a greater threat for the others.
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.

Add Comment

E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Submitted comments will be subject to moderation before being displayed.