Lassen Sie uns einen kurzen Blick auf die Warteschlange werfen und sie mit einem Python-Programm simulieren und überprüfen.
Überlastungsphänomen eines Systems, das sich probabilistisch verhält Eine Theorie zur Analyse anhand eines mathematischen Modells. Ein Feld der Operationsforschung.
In der Warteschlange werden diejenigen, die Dienste bereitstellen, als Server bezeichnet, und diejenigen, die Dienste bereitstellen, werden als Kunden (Clients) bezeichnet. Kunden treten probabilistisch (oder deterministisch) auf und richten sich in einer FIFO-Matrix (First In First Out) aus. Dann dauert es von Anfang an eine probabilistische (oder bestimmte) Zeit, um den Dienst zu erhalten, und nach Beendigung des Dienstes wird er beendet. Ein solcher Mechanismus wird als System oder System bezeichnet.
Das einfachste Modell in der Warteschlange ist das M / M / 1-Modell.
In der Warteschlange sind (A) wie es ankommt, (B) wie es gewartet wird und (C) wie viele Server es hat wichtig. Schreiben Sie diese drei Teile in einem Format wie A / B / C Kendalls Symbol Es heißt 83% 89% E3% 83% BC% E3% 83% AB% E3% 81% AE% E8% A8% 98% E5% 8F% B7). Mit anderen Worten bezieht sich M / M / 1 auf die folgenden Systeme.
M ist [Markov](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%81%8E%E7 % A8% 8B) (Markov), das Intervall ist [Exponentialverteilung](https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86% Wenn es sich um E5% B8% 83 handelt, beträgt die Anzahl der Ankünfte Poisson-Verteilung. % B3% E5% 88% 86% E5% B8% 83), und das Verhalten ist der Markov-Prozess.
--λ (Lambda): ** Durchschnittliche Ankunftsrate ** = Durchschnittliche Anzahl der Kunden, die in Zeiteinheit [^ 1] ankommen (Umkehrung des durchschnittlichen Ankunftsintervalls) --μ (Mu): ** Durchschnittliche Servicerate ** = Durchschnittliche Anzahl der Kunden, die den Service in einer Zeiteinheit beenden (Umkehrung der durchschnittlichen Servicezeit)
[^ 1]: Die Zeiteinheit ist die Standardzeit, die 1 Stunde oder 1 Minute betragen kann, und der Modellersteller kann entscheiden, was ihm gefällt.
Es kann berechnet werden, dass ρ, das unter Verwendung dieser Parameter wie folgt berechnet wird, ** die durchschnittliche Auslastungsrate des Servers ** ist (später beschrieben).
--ρ (niedrig): = $ \ frac {\ lambda} {\ mu} $
[Kleiner Beamter](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%88%E3%83%AB%E3%81%AE%E6%B3%95%E5 % 89% 87) bedeutet, dass die langfristig gemittelte Anzahl von Kunden $ L $ in einem stabilen System das Produkt der langfristig gemittelten Ankunftsrate $ λ $ und der langfristig gemittelten systeminternen Zeit $ W $ ist. Das Gesetz der Gleichheit. (Auch wenn das System in der Warteschlange steht)
L = \lambda W L_q = \lambda W_q
Diese Formel gilt für jede Ankunft oder Serviceverteilung. Diese Formel ist auch intuitiv leicht zu verstehen. Das ist,
Empirisch kommen jede Stunde drei Personen ins Allgemeinkrankenhaus. Es ist auch bekannt, dass durchschnittlich 6 Personen im Wartezimmer warten. Die durchschnittliche Wartezeit beträgt 2 Stunden.
Dies bedeutet, dass wir $ W_q = L_q / \ lambda = 6/3 = 2 $ berechnet haben. Diese Berechnung gilt für Durchschnittswerte. Die erwartete Wartezeit für "6 Personen standen an, als ich ankam" beträgt 6 x durchschnittliche Servicezeit (wenn der Service M ist).
Mit M / M / 1 kann der theoretische Wert des statistischen Wertes relativ leicht erhalten werden. Auch wenn Sie sich den theoretischen Wert nicht merken, können Sie ihn berechnen, indem Sie sich an die folgenden zwei Punkte erinnern.
Erstens ist die Wahrscheinlichkeit $ P_i $, dass sich $ i $ Personen im System befinden, von (1) bis $ \ alpha \ rho ^ i $. Wenn Sie alle Wahrscheinlichkeiten addieren, ist es 1, sodass Sie wie folgt berechnen können.
\ alpha (1 + \ rho + \ rho ^ 2 + \ rho ^ 3 + \ cdots) = \ frac {\ alpha} {1- \ rho} = 1 bis \ alpha = 1- \ rho i Wahrscheinlichkeit, im System zu sein P_i = (1- \ rho) \ rho ^ i
Sie können dies auch verwenden, um zu sehen, dass die durchschnittliche Serverauslastung = $ \ sum_ {i = 1} {P_i} = 1 --P_0 = 1- (1- \ rho) = \ rho $ ist.
Sie können auch die Formel von Little verwenden, um Folgendes zu berechnen:
Durchschnittliche Anzahl von Personen im System ($ L $) = $ \ sum_ {i = 0} {i P_i} = (1- \ rho) (\ rho + 2 \ rho ^ 2 + 3 \ rho ^ 3 + \ cdots) = \ frac {\ rho} {1- \ rho} $ Durchschnittliche Warteschlangenlänge ($ L_q $) = $ Durchschnittliche Anzahl der Personen im System - Durchschnittliche Serverauslastung = L- \ rho = \ frac {\ rho ^ 2} {1- \ rho} $ Durchschnittliche Systemzeit ($ W $) = $ L / \ lambda = \ frac {1} {\ mu- \ lambda} $ Durchschnittliche Wartezeit ($ W_q $) = $ L_q / \ lambda = \ frac {\ rho} {\ mu- \ lambda} $
Die Warteschlangensimulation ist mit Pythons $ \ mbox {simpy} $ nützlich. Die Installation kann mit "pip install simpy" erfolgen. Die Ankunftsrate λ = 1/5 und die Servicerate μ = 1/3.
python3
import simpy, random, numpy as np
random.seed(1)
env = simpy.Environment() #Simulationsumgebung
queue, intime = [], [] #Warteschlange(Liste der Ankunftszeiten)Und eine Liste der systeminternen Zeiten
#Ankunftsveranstaltung
def arrive():
while True:
yield env.timeout(random.expovariate(1.0 / 5)) #Durchschnittliche Ankunftsrate 1/5
env.process(into_queue())
#Warteschlange
def into_queue():
global queue
queue.append(env.now)
if len(queue) > 1:
return
while len(queue) > 0:
yield env.timeout(random.expovariate(1.0 / 3)) #Durchschnittliche Servicerate 1/3
tm, queue = queue[0], queue[1:]
intime.append(env.now - tm)
#Lauf
env.process(arrive())
env.run(1000000)
print('total = %d clients, W = %.2f' % (len(intime), np.average(intime)))
>>>
total = 199962 clients, W = 7.53
Der theoretische Wert ist $ W = \ frac {1} {\ mu- \ lambda} = \ frac {1} {\ frac {1} {3} - \ frac {1} {5}} = 7,5 $, was ungefähr entspricht Sie können sehen, dass sie übereinstimmen.
das ist alles
Recommended Posts