Być może będziesz w stanie użyć binomial distribution, jeśli jesteś zadowolony z kształtu tego rozkładu. Ustaw n = 12 i p = 0,25. Daje to wartość od 0 do 12 ze średnią 3. Po prostu dodaj 2 do każdego wyniku, aby uzyskać zakres i średnią, której szukasz.
Edycja: Jeśli chodzi o implementację, prawdopodobnie można znaleźć bibliotekę dla wybranego języka, która obsługuje nierównomierne dystrybucje (mam written one myself for Java).
Rozkład dwumianowy może być dość łatwo przybliżony za pomocą jednolitego RNG. Po prostu wykonaj próby i zanotuj liczbę sukcesów. Więc jeśli masz n = 10 i p = 0,5, to tak jak rzucanie monetą 10 razy z rzędu i zliczanie liczby głów. Dla p = 0.25 wystarczy wygenerować równomiernie rozproszone wartości pomiędzy 0 a 3 i tylko zliczenia zerowe jako sukcesy.
Jeśli chcesz bardziej wydajną implementację, istnieje sprytny algorytm ukryty w ćwiczeniach drugiego tomu Knuth's The Art of Computer Programming.
Czy jesteś pewien, że podałeś wystarczająco dużo informacji na temat dystrybucji? Wierzę, że średnia wartość to za mało. Rozważmy następujący przykład: załóżmy, że generujemy losowe liczby z '{0, 1, 2}' z 1 średnią. Teraz spójrz na te dwa generatory: 'Generator1 (0: 40%, 1: 20%, 2: 40%)', 'Generator2 (0: 10%, 1: 80%, 2: 10%)'. W przypadku obu z nich średni wynik byłby 1. –
A w pobliżu duplikatu: http://stackoverflow.com/questions/977354/generating-non-uniform-random-numbers. A nie płaskie repliki pseudolosowe są standardowym tematem, który był adresowany więcej niż jeden raz na SO. Podaj więcej informacji i wskażemy ci właściwy kierunek. – dmckee
Jeśli dystrybucja docelowa nie jest łatwo reprezentowana przez całkowity wygląd PDF na: http://stackoverflow.com/questions/423006/how-do-i-generate-points-that-match-a-histogram – dmckee