The short version
- Two units of the same kind are worth more than twice one of them, because dead units do not shoot back. That is the square law.
- In a choke, or in a melee, only the front is fighting, so the advantage collapses back to linear. Same armies, different ground, different winner.
- Target selection is worth more the longer a fight lasts. Over M volleys the gap between perfect and worthless aiming grows like M squared.
- All of this breaks down when one side cannot shoot back at half of what it is fighting. Look at the blind spot warning in the lab on the lesson 3 preset.
Two armies, two models, no engine
Pick the armies. The lab runs the volley model and both of Lanchester's laws over them and draws what each one predicts.
they win
Square law says
23.26 left standing, after 6.25 seconds.
you win
Linear law says
The choke version. Only the front rank is fighting, so numbers count once.
1400resources
Your army costs
24 supply.
2225resources
Theirs costs
28.5 supply.
10 zealots、1 archon against 25 zerglings、8 mutalisks. In the open, with aimed fire, the square law gives it to them. In a choke, where only the front is fighting, the linear law gives it to you. Those are different answers, and the difference is the ground you pick.
91% of your army cannot touch the mutalisk. The models have no way to punish that and the game very much does. Your zealots have nothing that reaches it.
The attrition curves
The volley model, and what aiming is worth
| How the fire is aimed | Volleys | You left | Them left |
|---|---|---|---|
| Both sides aim | 6 | 0 | 22 |
| You aim, they spread | 7 | 0 | 11 |
| Nobody aims | 5 | 0 | 33 |
Spread fire means every shot is divided over everything still standing, so nothing dies until everything does. It is the worst case, and it is closer to what an unattended army does than anybody wants to admit.
The volley model
Start with the simplest fight anyone can write down: two groups, same units, everybody in range, everybody fires at once.
Side one aims perfectly: nothing is wasted, every point of damage goes into something that was going to die anyway. Side two spreads its fire over everything still standing. After M volleys the badly aimed side has dealt
and the subtracted term is the interesting one. It grows with . Aiming is not worth a fixed amount. It is worth more the longer you are in the fight, which is why a long grind rewards attention and a five second skirmish mostly does not.
Lanchester
Let the volleys get small and you get the continuous version, which is where the square law comes from:
Each side loses units at a rate set by how many of the enemy are shooting. Divide one by the other and integrate and the conserved quantity falls out:
Squares. Twelve marines against six is not twice the army, it is four times the army. Run it: the bigger side wins with about ten marines still standing, not six.
Show the maths
One way to read the closed form: it counts the damage the enemy failed to deal because part of his army was already dead. Solved for your army over time:
You can ignore regeneration: zerg regeneration is about one hit point every few seconds and no fight lasts long enough for it to matter.
The linear law is the same fight with a different assumption: instead of everyone shooting everyone, units fight in pairs, because a choke or a melee front only lets so many of them touch at once.
No squares. Numbers count once, and quality decides. This is the bridge from attrition to flux (both in lesson 4), and it is why holding a ramp is worth so much: it converts a fight you would lose under the square law into one you might win under the linear one.
The lesson 3 example, and what the models miss
Ten zealots and an archon against twenty five zerglings and eight mutalisks is lesson 3's worked example, and it is the preset the lab opens on. Run it and read the blind spot line.
Ten of the eleven units on the protoss side cannot shoot a mutalisk at all. The models handle that by giving those units nothing to do against that part of the enemy army, which is correct arithmetic and a serious understatement: in a real game the mutalisks are not standing still being ignored, they are picking the zealots apart from outside their range while the zerglings hold them in place.
That is the lesson: an army that cannot shoot back loses by far more than any model says.
What this lab assumes
| Assumption | Value | Why, and how sure we are |
|---|---|---|
| Kill rates | from the damage model | Attacks to kill, times the weapon cooldown, from Learn::Damage, which is the engine's own formula. That part is exact. |
| Fire is spread in proportion | always | Every unit shoots each enemy type in proportion to how many there are. Real armies clump, chase and overkill. |
| Range | not modelled | Everything is assumed to be in range of everything from the first second. This is generous to short ranged armies and cruel to nothing. |
| Movement, splash, spells, terrain | not modelled | A sieged tank line, a storm, a surround and a ramp all break these models, and three of the four are the reason you won or lost. |
| The engine | not involved | These numbers come from the models above, not from a game run in the engine. |