oversiege
I promised strategy search today, but it’s taking longer than planned. Instead, here’s a rant about indecisiveness.
Terran bots that make siege tanks then go on to siege and unsiege the tanks too often. Knowledgable ICEbot does it, micro-aware LetaBot and WOPR do it. Iron does it less often, because it likes to stay in tank mode as much as possible. The tanks can’t fire while sieging and unsieging and end up shooting less than they should—and tanks are the backbone, with a weak backbone the army falls. I keep seeing tanks siege up, fire a shot, unsiege, then without moving a pixel siege up to fire a second shot. Even politicians don’t flip-flop that often.
No taunt intended. It’s tough to know when to siege. But sieging up 6 tanks to annihilate a single probe that wanders into view—OK, now I’m taunting. Bots can definitely do better than that.
I’m going to throw out a few easy ideas. I can almost promise that all of these have been tried, and I can promise for sure that none of them solves the problem. But maybe it will help people improve?
If you decide to siege up based on a condition, the condition probably should not be “a target is in sight.” Otherwise GarmBot will stall your army in the middle of the map with one zergling at a time. Try a tighter condition, at least “a target the army can’t destroy in one volley is in sight.”
Or you could try putting a time delay on unsieging. Siege up immediately, but when you want to unsiege, instead set a flag that says “unsiege after n frames.” Clear the flag if the siege condition is met in the meantime. Then if another target appears a moment later, which I see a lot, you’ll be ready.
If you siege based on a measurement, a “need to siege,” you could put hysteresis on it. If you siege when needToSiege reaches 10, maybe you shouldn’t unsiege until needToSiege falls below 5, or falls to 0, or whatever.
If you siege a tank based on orders to its squad, have it follow orders. If the squad is on the move, it’s “go! go! go!” until battle is joined (after that it gets complicated). If the squad’s orders are to stand guard at the choke, tanks should find good positions and stay sieged until their orders or the situation changes (“oops, a dark templar reached me”). Or something like that; guarding against drops is trickier.
If you decide by cost-benefit analysis, be sure to include a fat term for the cost of sieging or unsieging. The cost is not only the time spent immobile and unfiring, it is the risk accepted that the best decision will change suddenly.
Sieging has two advantages, higher range and higher damage rate (including higher damage from splash). Whatever decision method you use, maybe it makes sense to separate the two as different concerns. If you’re sieging for the range, stay sieged as long as the goal remains that you need the range for: If you’re destroying static defense from a safe distance, until the target is destroyed; if you’re defending an approach, until you are ordered to do something else. If you’re sieging for the damage rate, you want to try to stay sieged long enough to make up for the shots you would have fired in tank mode. Well, the considerations are complicated, but that’s a start on them.
So much for easy ideas. Maybe the only good solutions are hard solutions. But there is definitely a problem to solve.
And y’know, this is top secret and maybe I shouldn’t say, but the indecision between tank mode and siege mode is only one example. Bots suffer a lot of indecisiveness. Should the lurkers burrow, should I attack or run away (nah, I’ll just move back and forth under fire until I die), where does this army want to go (this way, that way, this way, why go anywhere?).... Any agent making a big decision based on small considerations is at risk of vacillating.
Comments