sábado, 23 de fevereiro de 2008

[Anúncio] cl-randist

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/

Nenhum comentário: