Random Distribution
From Liquipedia Dota 2 Wiki
Randomness is sometimes rejected from competitive gaming since it can decide over loss and defeat without reflecting the actual skill level. However, coping with the unexpected is an aspect of skill. Nonetheless there are a couple of random events within Dota 2, that keep the game less predictable and static. To limit the influence of huge streaks, pseudo-random distribution replaces the true random distribution where it made sense for the developers.
Definition[edit]
The geometric distribution[1] or true random distribution describes the probability of the number of events that occur before a successful event. This memoryless property is means that every "coin flip" in a sequence operates independently.
The pseudo-random distribution[2] (often shortened to PRD) in Dota 2 refers to a statistical mechanic of how certain probability-based items and abilities work. Under a conditional distribution[3], the event's chance increases every time the event does not occur, but is lower in the first place as compensation. This results in the effects occurring with a lower variance[4], meaning the proc chance occurs in a narrow band, and operating under a concave distribution[5], meaning the proc chance has a highest point.
The probability of an effect to occur (or proc) on the N-th test since the last successful proc is given by <math>P(N) = C \cdot N</math>. For each instance which could trigger the effect but does not, the PRD augments the probability of the effect happening for the next instance by a constant C. This constant, which is also the initial probability, is lower than the listed probability of the effect it is shadowing. Once the effect occurs, the counter is reset.
Technically, if <math>X_i</math> corresponds to the event occurring on trial <math>i</math> and <math>\neg X_i</math> is the inverse of that event, pseudo-random distribution enforces that <math>P(X_N | \neg X_i</math> for all <math>i < N) = C \cdot N</math>. Also, when <math>C \cdot N \geq 1</math>, which occurs on the first trial <math>N</math> where <math>N \geq \frac{1}{C}</math>, the event is guaranteed if it has not already happened. This results in a distribution where <math>P(X_k) = (1-C) \, (1 - 2 \, C) \, ... \, (1 - (k-1) \, C) \, k \, C = k! \, C \, \prod_{i=1}^{k-1}(\frac{1}{i} - C)</math>.
Example[edit]
- On melee heroes, Skull Basher's Bash has a 25% chance to stun the target. On the first attack, however, it only has an ~8.5% probability to bash. Each subsequent attack without a bash increases the probability by ~8.5%. So on the second attack, the chance is ~17%, on the third it is ~25.5%, etc. After a bash occurs, the probability resets to ~8.5% for the next attack. These probabilities average out so that, over a moderate period of time, Bash effect procs nearly 25% of the time.
Effects based on PRD rarely proc many times in a row, or go a long time without happening. This makes the game less luck based and adds a great deal of consistency to many probability-based abilities in Dota 2. Gameplay wise, PRD is difficult to exploit. It is theoretically possible to increase your chance to bash or critical strike on the next attack by attacking creeps several times without the effect happening, but in practice this is nearly impossible to do. Note that for instances that would not trigger the effect, the probability counter does not increase. So a hero with critical strike attacking buildings does not increase its chance to critical strike on its next attack, since critical strike does not work against buildings. The chance is not reset/increased as long as the ability is on cooldown as well (e.g. Bash).
C Values[edit]
The values of C as a function of nominal chance are given below[6]:
C | Nominal Chance | Approximate C |
---|---|---|
0.003801658303553139101756466 | 5% | 0.38% |
0.014745844781072675877050816 | 10% | 1.5% |
0.032220914373087674975117359 | 15% | 3.2% |
0.055704042949781851858398652 | 20% | 5.6% |
0.084744091852316990275274806 | 25% | 8.5% |
0.118949192725403987583755553 | 30% | 12% |
0.157983098125747077557540462 | 35% | 16% |
0.201547413607754017070679639 | 40% | 20% |
0.249306998440163189714677100 | 45% | 25% |
0.302103025348741965169160432 | 50% | 30% |
0.360397850933168697104686803 | 55% | 36% |
0.422649730810374235490851220 | 60% | 42% |
0.481125478337229174401911323 | 65% | 48% |
0.571428571428571428571428572 | 70% | 57% |
0.666666666666666666666666667 | 75% | 67% |
0.750000000000000000000000000 | 80% | 75% |
0.823529411764705882352941177 | 85% | 82% |
0.888888888888888888888888889 | 90% | 89% |
0.947368421052631578947368421 | 95% | 95% |
True random events[edit]
Flat distribution[edit]
Some mechanics roll a random value between 0 and 1 and scale it along the minimum / maximum gradient. This includes
- Attack damage of units, if they have a minimum and maximum attack damage range.
- Last hit gold bounty, if a minimum and maximum range is given.
- Roshan's respawn timer.
- Reappear Radius: 325
Random positions within the target area. Calculation might be in polar coordinates with 0-360° angle and 0-325 distance units as min/max gradients. - Minimum Explosion Distance: 195
Maximum Explosion Distance: 785
Angle within the four 90° sectors (0°–90°, 90°–180°, 180°–270°, 270°–360°) may be random.
Discrete distribution[edit]
A couple of random events have discrete states that have similar probability.
- Powerup Runes with a discrete clamping over the 6 types and 2 locations.
- Neutral camps can spawn different creeps for each of the small, medium, hard and ancient camps.
- The position of the caster and the illusions within the formation is random.
- Attack Radius: 300
Attack Interval: 0.25 sec - Number of Bounces: 3/4/5/6
Bounce Distance: 475
Although prioritizing heroes over units, and injured allies over non-injured ones, if multiple units meet the criteria, it chooses between them randomly. - Search Radius: 700
Spirits choose their targets randomly. Once chosen, they stick with that target until they can't attack it anymore. The spirits prioritise units the caster attacks. - Max Targets: 2
Search Radius: 400 - Effect Radius: 250/350/450/550
Attack Interval: 0.2 sec
Targets are determined upon cast. The order of attacks is random. - Rockets per Second: 10
Search Radius: 400
Interval: 0.1
Duration: 3 - Number of Bounces: 4
Bounce Distance: 500
Interval: 0.25 sec - Attack Rate Divisor: 1.7
Search Radius: 425
Slashes enemies based on Juggernaut's attack rate. - The position of the caster and the illusions within the formation is random.
- Max Targets: 1 (
4)
Search Radius: 900/1000/1100/1200
Requires atalent. When upgraded, releases three extra projectiles, hitting a second, third and fourth random enemy within the search radius.
- Max Targets: 1 (
4)
Search Radius: 900/1000/1100/1200
Requires atalent. When upgraded, releases three extra projectiles, hitting a second, third and fourth random enemy within the search radius.
- The position of the caster and the illusions within the formation is random.
- Multicast Amount: 1/2/3
Multicast Range: 1400
Interval: 0.4 sec - Multicast Amount: 1/2/3
Search Radius: 700 - Max Targets: 1 (
3)
Search Radius: 825/1050/1275/1500
Requires atalent. When upgraded, releases two extra projectiles, hitting a second and third random enemy within the search radius.
- Search Radius: 500
When multiple enemies have the same amount of health, or if multiple heroes are linked with Static Link, chooses between them randomly. - Max Targets: 1 (
2)
Search Radius: 0 (875)
Requires Aghanim's Scepter. When upgraded, releases a second attack on each attack, hitting a second random enemy within the search radius. - Max Targets: 1 (
2) (
2,
3)
Search Radius: 0 (700) (
700)
Requires atalent or Aghanim's Scepter. When upgraded, releases a second/third projectile, hitting a second/third random enemy within the search radius.
- Max Targets: 1 (
2)
Search Radius: 0 (700,
Global)
Requires Aghanim's Scepter. When upgraded, releases a second projectile, hitting a second random enemy within the search radius. - Max Targets: 1 (
2)
Search Radius: 0 (700)
Requires Aghanim's Scepter. When upgraded, targets a second random enemy within the search radius. - Number of Flares: 1 (
2)
Search Radius: 0 (700)
Requires Aghanim's Scepter. When upgraded, creates a second flare on a random enemy within the search radius. - Max Targets: 1 (
2)
Search Radius: 1200 (1325)
Requires atalent. When upgraded, releases a second projectile, hitting a second random enemy within the search radius.
Other[edit]
Pseudo random events[edit]
Along with the listed abilities, all Evasion sources and the drop chance of neutral items use pseudo-random distribution as well.
Evasion Sources[edit]
Evasion Sources
- 1 Requires
talent.
- 2a Requires Aghanim's Scepter.
- 2b Requires Aghanim's Shard.
Hero and Unit Abilities[edit]
Other Hero and Unit Abilities
Alpha Wolf – Critical Strike
Axe – Counter Helix
Brewmaster – Drunken Brawler (Fire Stance)
Chaos Knight – Chaos Strike
Faceless Void – Time Lock
Faceless Void – Backtrack1
Juggernaut – Blade Dance
Keeper of the Light – Blinding Light
Legion Commander – Moment of Courage
Lycan – Wolf Bite
Lycan – Shapeshift
Lycan Wolf – Cripple
Ogre Magi – Fireblast1
Pangolier – Lucky Shot
Phantom Assassin – Coup de Grace
Phantom Lancer – Juxtapose
Template:TalentListLite
Riki – Smoke Screen
Roshan – Bash
Sand King – Sand Storm
Sniper – Headshot
Lone Druid – Entangling Claws
Spirit Bear – Entangling Claws
Spirit Breaker – Greater Bash
Troll Warlord – Berserker's Rage
Troll Warlord – Whirling Axes (Melee)
Tusk – Walrus PUNCH!1
Abyssal Blade – Bash
Abyssal Blade – Damage Block
Crimson Guard – Damage Block
Crystalys – Critical Strike
Daedalus – Critical Strike
Javelin – Pierce
Gleipnir – Chain Lightning
Maelstrom – Chain Lightning
Mjollnir – Chain Lightning
Mjollnir – Static Charge
Monkey King Bar – Pierce
Radiance – Burn
Skull Basher – Bash
Vanguard – Damage Block
- 1 Requires
talent.
- 2a Requires Aghanim's Scepter.
- 2b Requires Aghanim's Shard.
Legacy data[edit]
The following table shows legacy data cited from the website of the original WC3 DotA. P(T) is the theoretical probability, P(A) is the actual probability. C is the PRD constant. Max N is the minimum number of attacks that would result in <math>C \cdot N</math> becoming greater than 1 (i.e. guaranteed proc). Average N is the expected value of N: the sum of the products of N and probabilities. SD is the standard deviation of N, a measure of how spread the data is, using the population formula. The lower the deviation, the more consistent the procs are. For comparison, SDt is the standard deviation of N in true random distribution, using the sample formula from N = 1 to N = 264. These are higher than those of PRD, hence not as consistent.
P(T) | P(A) | C | Max N | Most Probable N | Average N | SD | SDt |
---|---|---|---|---|---|---|---|
5% | 5.0% | 0.00380 | 264 | 16 | 20.00 | 10.30 | 19.53 |
10% | 10.0% | 0.01475 | 68 | 8 | 10.00 | 5.06 | 9.50 |
15% | 15.0% | 0.03221 | 32 | 6 | 6.67 | 3.31 | 6.16 |
20% | 20.0% | 0.05570 | 18 | 4 | 5.00 | 2.43 | 4.48 |
25% | 24.9% | 0.08475 | 12 | 3 | 4.02 | 1.90 | 3.49 |
30% | 29.9% | 0.11895 | 9 | 3 | 3.34 | 1.54 | 2.81 |
35% | 33.6% | 0.14628 | 7 | 3 | 2.98 | 1.35 | 2.43 |
40% | 37.7% | 0.18128 | 6 | 2 | 2.65 | 1.17 | 2.10 |
45% | 41.8% | 0.21867 | 5 | 2 | 2.39 | 1.03 | 1.83 |
50% | 45.7% | 0.25701 | 4 | 2 | 2.19 | 0.91 | 1.62 |
55% | 49.3% | 0.29509 | 4 | 2 | 2.03 | 0.83 | 1.45 |
60% | 53.0% | 0.33324 | 4 | 2 | 1.89 | 0.74 | 1.30 |
65% | 56.6% | 0.38109 | 3 | 2 | 1.77 | 0.69 | 1.17 |
70% | 60.1% | 0.42448 | 3 | 2 | 1.66 | 0.63 | 1.05 |
75% | 63.2% | 0.46134 | 3 | 2 | 1.58 | 0.57 | 0.96 |
80% | 66.7% | 0.50276 | 2 | 1 | 1.50 | 0.50 | 0.87 |
Version history[edit]
Description
- Blind now uses pseudo-random distribution. (Uphill miss chance, Incapacitating Bite, Blinding Light, Burn, Sand Storm, Smoke Screen, Whirling Axes (Melee))
- Cinder Brew's self-attack chance now uses pseudo-random distribution.
- Shapeshift's critical strike now uses pseudo-random distribution.
- Walrus PUNCH! passive trigger talent now uses pseudo-random distribution.
- Juxtapose now uses pseudo-random distribution.
- Craggy Exterior now uses pseudo-random distribution.
- Alpha Wolf's Critical Strike now uses pseudo-random distribution.
- Giant Wolf's Critical Strike now uses pseudo-random distribution.
- Essence Aura now uses pseudo-random distribution.
- Evasion now uses pseudo-random distribution.
- Entangling Claws now uses pseudo-random distribution.
- Greater Bash now uses pseudo-random distribution.
- Counter Helix now uses pseudo-random distribution.
- Moment of Courage now uses pseudo-random distribution.
References[edit]
- ↑ https://en.wikipedia.org/wiki/Geometric_distribution
- ↑ https://en.wikipedia.org/wiki/Non-uniform_random_variate_generation
- ↑ https://en.wikipedia.org/wiki/Conditional_probability_distribution
- ↑ https://en.wikipedia.org/wiki/Variance
- ↑ https://en.wikipedia.org/wiki/Concave_function
- ↑ https://gaming.stackexchange.com/questions/161430/calculating-the-constant-c-in-dota-2-pseudo-random-distribution