Created
February 5, 2020 08:57
-
-
Save disksing/85618a72e65bb970d9209a69f34a5e52 to your computer and use it in GitHub Desktop.
Monte Carlo Experiment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
For blog post http://disksing.com/failure-probability-analysis/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"math/rand" | |
"time" | |
) | |
var estimated float64 = 0.5 | |
func sim() float64 { | |
return rand.Float64() | |
} | |
func main() { | |
rand.Seed(time.Now().UnixNano()) | |
var sum float64 | |
for count := 1; ; count++ { | |
sum += sim() | |
if count%100 == 0 { | |
mean := sum / float64(count) | |
deviation := (mean - estimated) / estimated * 100 | |
fmt.Printf("iteration=%d mean=%.10f deviation=%+.2f%%\n", count, mean, deviation) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
iteration=100 mean=0.4663998716 deviation=-6.72% | |
iteration=200 mean=0.5109202400 deviation=+2.18% | |
iteration=300 mean=0.5026777399 deviation=+0.54% | |
iteration=400 mean=0.5083896952 deviation=+1.68% | |
iteration=500 mean=0.5116018940 deviation=+2.32% | |
iteration=600 mean=0.5107747885 deviation=+2.15% | |
iteration=700 mean=0.5073597136 deviation=+1.47% | |
iteration=800 mean=0.5069279983 deviation=+1.39% | |
iteration=900 mean=0.5061784518 deviation=+1.24% | |
iteration=1000 mean=0.5041838735 deviation=+0.84% | |
iteration=2000 mean=0.4990415218 deviation=-0.19% | |
iteration=3000 mean=0.4996433742 deviation=-0.07% | |
iteration=4000 mean=0.4976057349 deviation=-0.48% | |
iteration=5000 mean=0.4966866840 deviation=-0.66% | |
iteration=6000 mean=0.4971638614 deviation=-0.57% | |
iteration=7000 mean=0.4977187387 deviation=-0.46% | |
iteration=8000 mean=0.4983605065 deviation=-0.33% | |
iteration=9000 mean=0.4971227640 deviation=-0.58% | |
iteration=10000 mean=0.4977224693 deviation=-0.46% | |
iteration=20000 mean=0.4973611526 deviation=-0.53% | |
iteration=30000 mean=0.4978345476 deviation=-0.43% | |
iteration=40000 mean=0.4990125022 deviation=-0.20% | |
iteration=50000 mean=0.4994612727 deviation=-0.11% | |
iteration=60000 mean=0.5003711147 deviation=+0.07% | |
iteration=70000 mean=0.5006150357 deviation=+0.12% | |
iteration=80000 mean=0.5007202937 deviation=+0.14% | |
iteration=90000 mean=0.5001577054 deviation=+0.03% | |
iteration=100000 mean=0.5004349331 deviation=+0.09% |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"math" | |
"math/rand" | |
"time" | |
) | |
var ( | |
N = 20 | |
λ = 0.05 | |
totalTick = 365 * 24 * 60 | |
failRatePerTick = 1 - math.Exp(-1*λ/float64(totalTick)) | |
) | |
var estimated float64 = λ | |
func sim() float64 { | |
var failCount float64 | |
for i := 1; i <= totalTick; i++ { | |
for j := 0; j < N; j++ { | |
if rand.Float64() < failRatePerTick { | |
failCount++ | |
} | |
} | |
} | |
return failCount / float64(N) | |
} | |
func main() { | |
rand.Seed(time.Now().UnixNano()) | |
var sum float64 | |
for count := 1; ; count++ { | |
sum += sim() | |
if count%100 == 0 { | |
mean := sum / float64(count) | |
deviation := (mean - estimated) / estimated * 100 | |
fmt.Printf("iteration=%d mean=%.10f deviation=%+.2f%%\n", count, mean, deviation) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
iteration=100 mean=0.0370000000 deviation=-26.00% | |
iteration=200 mean=0.0435000000 deviation=-13.00% | |
iteration=300 mean=0.0476666667 deviation=-4.67% | |
iteration=400 mean=0.0473750000 deviation=-5.25% | |
iteration=500 mean=0.0480000000 deviation=-4.00% | |
iteration=600 mean=0.0488333333 deviation=-2.33% | |
iteration=700 mean=0.0490714286 deviation=-1.86% | |
iteration=800 mean=0.0498750000 deviation=-0.25% | |
iteration=900 mean=0.0488333333 deviation=-2.33% | |
iteration=1000 mean=0.0491500000 deviation=-1.70% | |
iteration=2000 mean=0.0485500000 deviation=-2.90% | |
iteration=3000 mean=0.0491666667 deviation=-1.67% | |
iteration=4000 mean=0.0491125000 deviation=-1.77% | |
iteration=5000 mean=0.0498600000 deviation=-0.28% | |
iteration=6000 mean=0.0498000000 deviation=-0.40% | |
iteration=7000 mean=0.0497285714 deviation=-0.54% | |
iteration=8000 mean=0.0499500000 deviation=-0.10% | |
iteration=9000 mean=0.0501666667 deviation=+0.33% | |
iteration=10000 mean=0.0502600000 deviation=+0.52% | |
iteration=20000 mean=0.0503150000 deviation=+0.63% | |
iteration=30000 mean=0.0502033333 deviation=+0.41% | |
iteration=40000 mean=0.0500250000 deviation=+0.05% | |
iteration=50000 mean=0.0498760000 deviation=-0.25% | |
iteration=60000 mean=0.0499533333 deviation=-0.09% | |
iteration=70000 mean=0.0499942857 deviation=-0.01% | |
iteration=80000 mean=0.0499462500 deviation=-0.11% | |
iteration=90000 mean=0.0500022222 deviation=+0.00% | |
iteration=100000 mean=0.0499650000 deviation=-0.07% |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"math" | |
"math/rand" | |
"time" | |
) | |
const ( | |
N = 20 | |
λ = 0.05 | |
tickYear = 365 * 24 * 60 | |
) | |
var p0 = 1 - math.Exp(-1*λ/tickYear) | |
var estimated = 1 - math.Exp(-1*λ*N) | |
func sim() float64 { | |
for i := 1; i <= tickYear; i++ { | |
for j := 0; j < N; j++ { | |
if rand.Float64() < p0 { | |
return 1.0 | |
} | |
} | |
} | |
return 0 | |
} | |
func main() { | |
rand.Seed(time.Now().UnixNano()) | |
var sum float64 | |
for count := 1; ; count++ { | |
sum += sim() | |
if count%100 == 0 { | |
mean := sum / float64(count) | |
deviation := (mean - estimated) / estimated * 100 | |
fmt.Printf("iteration=%d mean=%.10f deviation=%+.2f%%\n", count, mean, deviation) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
iteration=100 mean=0.6900000000 deviation=+9.16% | |
iteration=200 mean=0.6050000000 deviation=-4.29% | |
iteration=300 mean=0.5933333333 deviation=-6.14% | |
iteration=400 mean=0.6125000000 deviation=-3.10% | |
iteration=500 mean=0.6180000000 deviation=-2.23% | |
iteration=600 mean=0.6233333333 deviation=-1.39% | |
iteration=700 mean=0.6314285714 deviation=-0.11% | |
iteration=800 mean=0.6287500000 deviation=-0.53% | |
iteration=900 mean=0.6277777778 deviation=-0.69% | |
iteration=1000 mean=0.6320000000 deviation=-0.02% | |
iteration=2000 mean=0.6295000000 deviation=-0.41% | |
iteration=3000 mean=0.6366666667 deviation=+0.72% | |
iteration=4000 mean=0.6297500000 deviation=-0.38% | |
iteration=5000 mean=0.6312000000 deviation=-0.15% | |
iteration=6000 mean=0.6306666667 deviation=-0.23% | |
iteration=7000 mean=0.6301428571 deviation=-0.31% | |
iteration=8000 mean=0.6322500000 deviation=+0.02% | |
iteration=9000 mean=0.6322222222 deviation=+0.02% | |
iteration=10000 mean=0.6330000000 deviation=+0.14% | |
iteration=20000 mean=0.6302000000 deviation=-0.30% | |
iteration=30000 mean=0.6313333333 deviation=-0.12% | |
iteration=40000 mean=0.6321000000 deviation=-0.00% | |
iteration=50000 mean=0.6325000000 deviation=+0.06% |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"math" | |
"math/rand" | |
"time" | |
) | |
const ( | |
N = 20 | |
λ = 0.05 | |
tickYear = 365 * 24 * 60 | |
recoverTick = 24 * 60 | |
) | |
var p0 = 1 - math.Exp(-1*λ/tickYear) | |
var estimated = 1 - math.Exp(-1*N*N*λ*λ*(1.0*recoverTick/(tickYear))) | |
func sim() float64 { | |
var lastFail int | |
for i := 1; i <= tickYear; i++ { | |
for j := 0; j < N; j++ { | |
if rand.Float64() < p0 { | |
if lastFail > 0 && i-lastFail < recoverTick { | |
return 1.0 | |
} | |
lastFail = i | |
} | |
} | |
} | |
return 0 | |
} | |
func main() { | |
rand.Seed(time.Now().UnixNano()) | |
var sum float64 | |
for count := 1; ; count++ { | |
sum += sim() | |
if count%100 == 0 { | |
mean := sum / float64(count) | |
deviation := (mean - estimated) / estimated * 100 | |
fmt.Printf("iteration=%d mean=%.10f deviation=%+.2f%%\n", count, mean, deviation) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
iteration=100 mean=0.0100000000 deviation=+265.50% | |
iteration=200 mean=0.0050000000 deviation=+82.75% | |
iteration=300 mean=0.0066666667 deviation=+143.67% | |
iteration=400 mean=0.0075000000 deviation=+174.13% | |
iteration=500 mean=0.0060000000 deviation=+119.30% | |
iteration=600 mean=0.0050000000 deviation=+82.75% | |
iteration=700 mean=0.0057142857 deviation=+108.86% | |
iteration=800 mean=0.0050000000 deviation=+82.75% | |
iteration=900 mean=0.0044444444 deviation=+62.44% | |
iteration=1000 mean=0.0050000000 deviation=+82.75% | |
iteration=2000 mean=0.0040000000 deviation=+46.20% | |
iteration=3000 mean=0.0033333333 deviation=+21.83% | |
iteration=4000 mean=0.0035000000 deviation=+27.93% | |
iteration=5000 mean=0.0030000000 deviation=+9.65% | |
iteration=6000 mean=0.0028333333 deviation=+3.56% | |
iteration=7000 mean=0.0027142857 deviation=-0.79% | |
iteration=8000 mean=0.0028750000 deviation=+5.08% | |
iteration=9000 mean=0.0028888889 deviation=+5.59% | |
iteration=10000 mean=0.0029000000 deviation=+6.00% | |
iteration=20000 mean=0.0032500000 deviation=+18.79% | |
iteration=30000 mean=0.0029333333 deviation=+7.21% | |
iteration=40000 mean=0.0030000000 deviation=+9.65% | |
iteration=50000 mean=0.0029600000 deviation=+8.19% | |
iteration=60000 mean=0.0027833333 deviation=+1.73% | |
iteration=70000 mean=0.0028000000 deviation=+2.34% | |
iteration=80000 mean=0.0026875000 deviation=-1.77% | |
iteration=90000 mean=0.0026444444 deviation=-3.35% | |
iteration=100000 mean=0.0026600000 deviation=-2.78% | |
iteration=200000 mean=0.0027100000 deviation=-0.95% | |
iteration=300000 mean=0.0027533333 deviation=+0.63% | |
iteration=400000 mean=0.0028025000 deviation=+2.43% | |
iteration=500000 mean=0.0027260000 deviation=-0.36% | |
iteration=600000 mean=0.0027300000 deviation=-0.22% | |
iteration=700000 mean=0.0027300000 deviation=-0.22% |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment