PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘Glockenkurve’ tag

Diskrete begrenzte Glockenkurven-Verteilung?

with 22 comments

An der Überschrift kann man schon erkennen dass ich nicht genau weiß wie der Terminus lautet, zu dem ich eine Lösung suche. Ich versuche es mal zu erklären:

Ich habe einen Zahlenbereich, beispielsweise die ganzen Zahlen zwischen 10 und 15 (beide inklusive). Nun benötige ich eine Funktion, um einen Zufallswert in diesem Bereich zu erhalten, der aber „normalverteilt“ sein soll. Klarer wird es vielleicht mit Hilfe zweier Beispielgrafiken:

Beispiel 1:

Beispiel 2:

Im zweiten Beispiel soll also zu 30% die Zahl 3 zurückgeliefert werden, zu jeweils 20% die 2 oder 4 usw.

Ich benötige also eine Funktion, der ich einen Minimal- und einen Maximalwert übergebe, und ich erhalte eine Zahl aus dem Bereich, jedoch „glockenkurvenverteilt“, sprich die mittleren Werte haben eine höhere Wahrscheinlichkeit, zurückgegeben zu werden.

Irgendwie ist das mit der Gauss’schen Glockenkurve verwandt, allerdings ist die Gaussverteilung nicht „nach rechts und links“ begrenzt und liefert zu einem gegebenen X einen Y-Wert. Ich benötige einfach nur Zufallszahlen.

Meine erste (und bisher einzige) Idee ist die folgende (siehe auch auf GitHub):

<?

class RandomDiscreteGaussianNumbers
{
    protected $_iterations = 5;

    public function getNumber($min, $max)
    {
        $sum = 0;
        for ($i = 0; $i < $this->_iterations; $i++) {
            $sum += rand($min, $max);
        }

        return round($sum/$this->_iterations);
    }
}

$class = new RandomDiscreteGaussianNumbers();
for ($i=0; $i<10; $i++) {
    echo $class->getNumber(0, 7)."\n";
}

Es werden also Zufallszahlen aus dem Bereich ermittelt, und davon der Durchschnitt errechnet. Mit Hilfe der $_iterations kann ich die Kurve flacher oder steiler machen (beispielsweise liefert $_iterations=50 nur noch die Zahlen 3 und 4). Nach wie vor weiß ich aber nicht den Fachbegriff für das Problem und wie normalerweile ein Algorithmus dazu aussieht.

Written by Michael Kliewe

Februar 21st, 2011 at 9:56 am

Posted in PHP

Tagged with , ,