Domanda

Dire che ho 100 record, e voglio prendere in giro fuori la data created_at modo che si adatta su qualche curva. C'è una libreria per fare questo, o quello che la formula ho potuto usare? Penso che questo sia lungo la stessa traccia:

generare numeri casuali con distribuzione probabilistica

Non so molto su come sono classificati in matematica, ma sto guardando le cose come:

  • curva a campana
  • logaritmica (tipico biologia / evolution) della curva? ...

Solo in cerca di alcune formule in codice in modo che posso dire questo:

  • Dato 100 record, un periodo di 1.week, e un intervallo di 12.hours
  • Set created_at per ogni record in modo tale che si adatta, grosso modo, a curve

Grazie mille!

Aggiorna

questo post del forum A proposito di Ruby algoritmi , che mi ha portato a rsruby , un R / ponte rubino, ma che sembra troppo.

Aggiorna 2

Ho scritto questo piccolo frammento provare la biblioteca gsl, arrivando ...

generare dati di test in Rails dove created_at cadute lungo una distribuzione statistica

È stato utile?

Soluzione

È possibile generare timestamp UNIX, che sono in realtà solo numeri interi. In primo luogo capire quando si desidera avviare, per esempio ora:

start = DateTime::now().to_time.to_i

Scopri quando la fine del l'intervallo dovrebbe essere (dire dopo 1 settimana):

finish = (DateTime::now()+1.week).to_time.to_i

questo algoritmo per generare numeri casuali. E 'quasi uniforme. Poi generare numeri casuali tra i due:

r = Random.new.rand(start..finish)

Poi convertire che torna a una data:

d = Time.at(r)

Questo sembra essere molto promettente, nonché: http://rb-gsl.rubyforge.org/files/rdoc/randist_rdoc.html

E anche questo: http://rb-gsl.rubyforge.org/files/rdoc/rng_rdoc.html

Altri suggerimenti

Recentemente ho imbattuto croupier , una gemma rubino che mira a generare numeri a seconda di una serie di statistiche distribuzioni.

devo ancora provarlo ma suona molto promettente.

wiki :

Ci sono un paio di metodi per generare un numero casuale sulla base di un densità di probabilità. Questi metodi prevedono la trasformazione di un uniforme numero casuale in qualche modo. Per colpa di questo, questi metodi funzionano ugualmente bene nel generare sia pseudo-casuali e veri numeri casuali.

Un metodo, chiamato inversione Metodo , comporta integrare fino a una maggiore area o uguale al numero casuale (che dovrebbe essere generato tra 0 e 1 per la corretta distribuzioni).

Un secondo metodo, chiamato metodo di accettazione-rifiuto , comporta la scelta di un valore X e Y e verificando se la funzione di x è maggiore del valore y. Se è, il valore x viene accettato. Altrimenti, il valore x viene respinta e il algoritmo ci riprova.

Il primo metodo è quello usato nella risposta accettata nella sua domanda SO collegato: generare numeri casuali con distribuzione probabilistica

Un'altra opzione è la Distribuzione gioiello in SciRuby . È possibile generare numeri normali da:

require 'distribution'

rng = Distribution::Normal.rng
random_numbers = Array.new(100).map { rng.call }

Ci sono RNG per varie altre distribuzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top