Das Botenproblem¶
Thema: Wahrscheinlichkeitsrechnung
Ausgangslage¶
Es soll eine Nachricht verschickt werden. Es stehen zwei Botendienste zur Verfügung.
- DienstA Ist doppelt so zu verlässig wie DienstB.
- DienstA Ist doppelt so teuer wie DienstB.
- DienstA hat eine Zuerlässigkeit von 0.8 d.h. 80% der Nachrichten kommen an.
- DienstB hat eine Zuerlässigkeit von 0.4 d.h. 40% der Nachrichten kommen an.
Fragestellung¶
Ist es besser einen Boten von DienstA zu beauftragen oder 2 Boten von DienstB?
Lösungsweg¶
Wahrscheinlickeit das DienstA erfolgreich ist. $$ P(DienstA+) = 0.8 $$ Wahrscheinlickeit das DienstA scheitert. $$ P(DienstA-) = 1 - P(DienstA+) = 0.2 $$
Wahrscheinlickeit das ein Bote von DienstB erfolgreich ist. $$ P(DienstB+) = 0.4 $$ Wahrscheinlickeit das ein Bote von DienstB scheitert. $$ P(DienstB-) = 1 - P(DienstB+) = 0.6 $$
DienstB hat eine doppelt so hohe Erfolgswahrscheinlichkeit wie DienstA. $$ P(DienstA+) = 2 * P(DienstB+) $$
Beide Boten von DienstB scheitern. $$ P(DienstB--) = 1 - P(DienstB+) * 1 - P(DienstB+) $$ $$ P(DienstB--) = 1 - 0,4 * 1 - 0,4 = 0.36 $$
Mindestens eine Bote von DienstB ist erfolgreich. $$ P(minDienstB+) = 1 - P(DienstB--) = 1 - 0.36 = 0.64 $$
Ergebnis¶
Die berechnete Erfolgswahrscheinlickeit von DienstB liegt bei 0.64. Die gegebene Wahrscheinlicket von DienstA liegt bei 0.8. Somit ist es besser DienstA zu nutzen.
Überprüfung - formel¶
Der ermittelte Wert P(minDienstB+) = 0.64 beinhaltet drei Szenarien.
Der ein oder andere Bote von DienstB ist erfolgreich P(DienstB+). Welches mit mit einer Wahrscheinlichkeit von 0.4 vorgegeben war.
Oder beide Boten von DienstB sind erfolgreich. $$ P(DienstB++) = P(DienstB+) * P(DienstB+) = 0.4 * 0.4 = 0.24 $$
Somit ist P(minDienstB+) = 0.64 auch das Gleich wie $$ P(DienstB+) + P(DienstB++) = 0.4 + 0.24 = 0.64 $$
Überprüfung - durch ausprobieren¶
Die Botengänge von DienstA und DienstB werden je 10.000 mal simuliert.
import random
iterations = 10000
countDienstBSuccess = 0
countDienstASuccess = 0
for i in range(iterations):
if(random.random() < 0.4 or random.random() < 0.4):
countDienstBSuccess += 1
if(random.random() < 0.8):
countDienstASuccess += 1
print('DienstA Erfolgswahrscheinlickeit: '+ str(countDienstASuccess/iterations))
print('DienstB Erfolgswahrscheinlickeit: '+ str(countDienstBSuccess/iterations))