O meu primeiro projeto em lisp é uma biblioteca para a geração de variáveis aleatórias segundo distribuições probabilísticas. O código esta disponível no repositório:
http://www.lambdatau.com/git/cl-randist.git
Para obter uma copia da biblioteca utilize o git[1], com o comando:
git clone http://www.lambdatau.com/git/cl-randist
Acho que o código já esta em uma condição utlizado por outras pessoas em fase beta (por conta e risco de cada um, eu testei a média e a variância de cada função para um número grande de valores, e os valores estão razoavelmente próximos do esperado).
Ainda não existe documentação, mas a biblioteca disponibiliza as seguintes funções:
random-uniform (Utiliza o gerador de números aleatórios da implementação, que no caso do SBCL é o Mersene Twister)
random-normal (implementa o algoritmo zigurate)
random-gamma (implementa oa algoritmo Marsaglia and Tsang)
random-beta
random-binomial
random-negative-binomial
random-poisson
random-exponential
random-multinomial
random-f
random-pareto
random-chi-square
Todas as função implementadas são traduções manuais do código em C da biblioteca GSL[2].
Com execeção da função para a geração de variáveis aleatórias discretas, que eu peguei o código do Mario S. Mommer[3]:
make-discrete-random-var
Exemplo de uso:
(asdf:oos 'asdf:load-op :cl-randist)
(use-package :randist)
(random-normal 10d0 2d0)
(let ((discrete (make-discrete-random-var #p(0.5 0.3 0.1 0.1))))
(print (funcall discrete)))
Bom proveito para quem se interessa por probabilidade e simulações.
[1] http://git.or.cz/
[2] http://www.gnu.org/software/gsl/
[3] http://prxq.wordpress.com/2006/04/17/the-alias-method/
sábado, 23 de fevereiro de 2008
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário