| |
|
|
p.specht
| Man steht bekanntlich immer in der langsameren Schlange. Beim Supermarkt billig einkaufen und sich dann wundern, daß die Kassen nur spärlich besetzt sind - naja... Man muß halt das Beste aus solchen Situationen machen, und dabei hilft die sog. Warteschlangen-Statistik, ein eigener Zweig des "Operations Research".
Mit nachfolgende Programm können beispielsweise folgende Fälle behandelt werden: Bsp. A) "Unendliche Warteschlange": Die Kunden werden an 2 Kassen bedient, welche eine gemeinsame Wartschlange haben. Jeder Geschäftsfall an einer Kasse wird in durchschnittlich 40 Sekunden abgewickelt. Im Mittel stellt sich alle 25 Sekunden ein neuer Kunde an. Wie groß ist die Wahrscheinlichkeit, daß ein Kunde länger als 150 Sekunden in der Schlange steht oder abgefertigt wird? Ergebnis: 15.867 %
Bsp. B) "Endliche Warteschlange": Ein Autoverleih hat 150 Fahrzeuge, die im Mittel alle 30 Tage in der betriebseigenen Werkstatt gewartet werden müssen. Die Werkstatt hat vier Arbeitsstationen, an denen pro Tag jeweils 2 Autos bewältigt werden (Servicedauer 0.5 Tage/Auto). Ergebnis: Im Mittel stehen 2.89 Autos gerade beim Service, und ein Fahrzeug wartet etwa einen halben Tag (0.44 Tage) auf die Hebebühne.
WindowTitle "Berechnung für 1 Warteschlange und N Abfertigungsstellen"
'Q: BASIC-Programme für die angewandte Statistik, Oldenbourg Vlg, S.298 ff
'(D) 2017-11 Demo zur Transkription nach XPROFAN-11.2a by P.Specht, Wien
'OHNE JEDE GEWÄHR! NUR FÜR PRIVATE TESTZWECKE!
WindowStyle 24:CLS
Declare A!,A1!,D$,E&,E$,EO&,Ii!,J&,K$,L!,M&,N&,N1!
Declare P1!,P2!,P3!,Q!,R1!,R2!,S!,S1!,S2!,S0!,T!,T1!,T2!,T3!,T4!
' *** Eingabeteil
font 2:D$=date$(0)
Print "\n Datum: ";D$
G90:
K$="XProfan-PC"
Print " Kennung: ";K$
font 0:PRINT
PRINT " 1 = Endliche Anzahl von Fällen [z.B. Autoverleih]"
PRINT " 2 = Unendliche Anzahl von Kunden [z.B. Supermarkt]"
PRINT
G140:
Print " Gewünschte Wahl: ";:INPUT E&
PRINT
case (E&<1) OR (E&>2):goto "G140"
case E&=1:GOTO "G180"
case E&=2:Goto "G200"
G180:
Print " Gesamtzahl der Fälle?: ";:INPUT M&
case M&<=0:goto "G180"
G200:
Print " Anzahl der Abfertigungsstellen?: ";:INPUT N&
case N&<1:goto "G200"
PRINT
PRINT " 1 = Abfertigungsrate + Ankunftsrate (pro Zeiteinheit)"
PRINT " 2 = Bedienungsdauer + Mittlerer Ankunftszeitabstand"
PRINT
G260:
print " Gewünschte Nr.: ";:INPUT EO&
PRINT
case (EO&<1) OR (EO&>2):goto "G260"
case EO&=1:GOTO "G300"
case EO&=2:goto "G340"
G300:
print " Mittlere Abfertigungsrate?: ";:INPUT R1!
print " Mittlere Ankunftsrate?: ";:INPUT R2!
case (R1!<0) OR (R2!<0):goto "G300"
G330:
GOTO "G370"
G340:
print " Mittlere Bedienungszeit?: ";:INPUT T1!
print " Mittlerer Abstand der Ankunftszeiten?: ";:INPUT T2!
case (T1!<0) OR (T2!<0):goto "G340"
G370:
' --------------------------------------------
' Ausdrucken
cls:PRINT:PRINT:font 2
PRINT " ";D$;" / ";K$
PRINT
case E&=1:GOTO "G430"
case E&=2:goto "G450"
G430:
PRINT " Endliche Warteschlange"
GOTO "G460"
G450:
PRINT " Unendliche Warteschlange"
G460:
PRINT
case E&=1:GOTO "G480"
case E&=2:goto "G490"
G480:
PRINT " Gesamtzahl der Personen: ";M&
G490:
PRINT " Anzahl der Abfertigungsstellen: ";N&
PRINT
case EO&=1:GOTO "G520"
case EO&=2:goto "G540"
G520:
PRINT " Variante Abfertigungsrate / Ankunftsrate "
GOTO "G550"
G540:
PRINT " Variante Bedienungszeit / Ankunftszeitabstand "
G550:
PRINT
case EO&=1:GOTO "G570"
case EO&=2:goto "G600"
G570:
PRINT " Mittlere Abfertigungsrate: ";format$("%g",R1!)
PRINT " Mittlere Ankunftsrate: ";format$("%g",R2!)
GOTO "G620"
G600:
PRINT " Mittlere Bedienungszeit : ";format$("%g",T1!)
PRINT " Mittlerer Zeitabstand zwischen Ankünften: ";format$("%g",T2!)
G620:
' Rechenteil
Case EO&=1:GOTO "G820"
case EO&=2:goto "G850"
G820:
Ii!=R2!/R1!
T2!=1/R2!
GOTO "G880"
G850:
Ii!=T1!/T2!
R2!=1/T2!
R1!=1/T1!
G880:
case E&=1:GOTO "G890"
case E&=2:goto "G1040"
G890:
Q!=1
S1!=0:S2!=Q!
whileloop m&:j&=&Loop
Q!=Q!*(M&-J&+1)*Ii!
case J&>N& : Q!=Q!/N&
case J&<=N&: Q!=Q!/J&
S1!=S1!+Q!*J&
S2!=S2!+Q!
endwhile
A!=S1!/S2!
T!=T2!*A!
A1!=M&*((Ii!+1)*(A!/M&-1)+1)
T3!=T2!*A1!
L!=-(Ii!+1)*(A!/M&-1)
GOTO "G1200"
G1040:
S!=1:S0!=1:S1!=1:N1!=N&
case N&=1:goto "G1120"
whileloop n&-1:j&=&Loop
N1!=J&*N1!
S0!=S0!*Ii!/J&
S!=S!+S0!
endwhile
P1!=1/(S!+Ii!^N&/(N1!*(1-Ii!/N&)))
G1120:
P2!=Ii!^N&*P1!/(N1!*(1-Ii!/N&))
A1!=Ii!*P2!/(N&-Ii!)
A!=A1!+Ii!
T3!=A1!/R2!
T!=A!/R2!
' -----------------------------------------------,
G1200:
' *** Ausgabeteil
PRINT:PRINT:PRINT
case E&=1:GOTO "G1270"
case E&=2:goto "G1230"
G1230:
PRINT " Wahrscheinlichkeiten [ % ]"
PRINT " Alle Schalter unbesetzt: ";format$("%g",P1!*100)
PRINT " Alle Schalter besetzt: ";format$("%g",P2!*100)
PRINT
G1270:
PRINT " Mittlere Anzahl Wartender: ";format$("%g",A1!)
PRINT " Mittlere Anzahl Kunden: ";format$("%g",A!)
PRINT " Mittlere Wartezeit: ";format$("%g",T3!)
PRINT "Mittlere Gesamtdurchlaufzeit: ";format$("%g",T!)
PRINT
case E&=1:GOTO "G1460"
case E&=2:goto "G1330"
G1330:
PRINT:PRINT
G1340:
PRINT " Soll die Wahrscheinlichkeit für eine bestimmte Warte- "
print " dauer von über x Zeiteinheiten berechnet werden (j/n)?: ";:INPUT E$
PRINT
case E$="j":goto "G1400"
case E$="n":goto "G1480"
GOTO "G1340"
G1400:
print " Wartezeit länger als x Zeiteinheiten, x=?: ";:INPUT T4!
P3!=P2!*EXP((R2!-N&*R1!)*T4!)
PRINT
PRINT " Wahrscheinlichkeit dieser Mindestwartezeit [%]: ";P3!*100
PRINT
GOTO "G1340"
G1460:
PRINT " Gesamtleistungsfaktor ";L!
PRINT
G1480:
print " Weitere Berechnung durchführen (j/n)?: ";:INPUT E$
PRINT
if E$="j":Cls:font 0:goto "G90":endif
Case E$="n":goto "G1530"
GOTO "G1480"
G1530:
END
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 25.05.2021 ▲ |
|
|
|