Die Simulation von Kunden

Um einen Besucherstrom oder ähnliches möglichst realitätsnah zu simulieren, verwenden viele Programme die sogenannte "Negative Exponentialverteilung". Aber ein kleines Simulationsskript in Perl tut es auch:

Wir simulieren einfach eine gewisse Anzahl von Geschäftslokalen, die wir durchnumerieren, und überprüfen, wann ein Kunde ein bestimmtes (oder auch eines von mehreren) betritt. Dazu erzeugten wir sukessive die eintreffenden Kunden, und lassen sie, gesteuert durch den Zufall, eines der Lokale betreten. Wenn einer in unseres gefunden hat, dann messen wir nun einfach die Zeit, bis der nächste eintrudelt.

Die Funktion "delay()" im folgenden kleinen Programm liefert genau diese Zeit zwischen zwei auf einander folgenden Kunden, in Abhängigkeit von der Gesamtanzahl der Geschäftslokale und der uns davon interessierenden.

#!/usr/bin/perl

use strict; use warnings;

sub delay {
  my ($max,$left,$right) = @_;
  my $clock = 0;
  while (1) {
    my $pos = 1 + int rand $max;
    $clock++;
    if (($left <= $pos) and ($pos <= $right)) {
     return $clock;
    }
  }
}


my %table;

srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

my $sum = 0;
my $tests = 100;

foreach (1 .. $tests) {
  my $delay = &delay(10,1,1);
  $table{$delay}++;
  $sum += $delay;
}

# Auswertung

print "\nAnz:   ";

foreach (sort {$a <=> $b} keys %table) {
  print $table{$_}."\t"; 
}

print "\nHaeuf: ";

foreach (sort {$a <=> $b} keys %table) {
  print $table{$_}/$tests."\t"; 
}

print "\nSek:   ";

foreach (sort {$a <=> $b} keys %table) {
  print $_+0.0."\t";
}

print "\nDurchschnitt = ",$sum/$tests;

print "\n";

Also: "delay(10,1,2)" ergibt die Zeit bis zum Eintreffen des nächsten Kundens (oder "der nächsten Kunde" auf Wienerisch bzw. "der nächsten Kundin" im Sinne des Gleichbehandlungsgesetzes) im Geschäft "1" oder "2" von insgesamt 10 Geschäftslokalen.

Etwas Mathematik sei noch erlaubt: Wenn uns von 10 Geschäftslokalen eine gehört (also zum Beispiel simuliert mit "delay(10,1,1)"), dann ist die Wahrscheinlichkeit, dass ein Kunde unser Geschäft betritt, 1/10. Daraus ergibt sich ein durchschnittlicher Abstand von 10 Sekunden zwischen zwei bei uns eintretenden Kunden (wenn jede Sekunde ein Kunde vor der Entscheidung steht, welche Lokalität er betreten soll).

Interessant ist noch, die erzeugten Werte grafisch auszuwerten (etwa mittels Balkendiagramm) und mit der negativen Exponentialverteilung zu vergleichen.

Alle Touren

Schneebergwege

Raxsteige

Geführte Touren

Perl

Literatur

Musik