Considere-se uma pequena forma parâmetro perto de 0, tal como α = 1 / 100 . No intervalo entre 0 e α , e - α é aproximadamente 1 , então o Gamma pdf é aproximadamente x α - 1 d x / Γ ( α ) . Isso pode ser integrado a um CDF aproximado, F α ( x ) = x ααα=1/100αe−α1xα−1dx/Γ(α) . Ao invertê-lo, vemos umapotência1/α: um enorme expoente. Paraα=1/100isso provoca alguma possibilidade de underflow (um valor de precisão dupla inferior a10-300, mais ou menos). Aqui está um gráfico da chance de ficar abaixo do fluxo em função do logaritmo da base dez deα:Fα(x)=xααΓ(α)1/αα=1/10010−300α
Uma solução é explorar essa aproximação para gerar variáveis logarítmicas (gama): na verdade, tente gerar uma variável gama e, se for muito pequena, gere seu logaritmo a partir dessa distribuição aproximada de energia (como mostrado abaixo). (Faça isso repetidamente até que o log esteja dentro do intervalo de subfluxo, de modo que seja um substituto válido para a variável original de subfluxo.) Para o cálculo do Dirichlet, subtraia o máximo de todos os logaritmos de cada um dos valores do log: a gama varia para não afetar os valores do Dirichlet. Trate qualquer log resultante que seja muito pequeno (digamos, menor que -100) como sendo o log de um zero verdadeiro. Exponencie os outros logs. Agora você pode prosseguir sem fluxo insuficiente.
Isso vai demorar ainda mais do que antes, mas pelo menos funcionará!
Para gerar um log aproximado gama variável com o parâmetro de forma , pré-calcule C = log ( Γ ( α ) ) + log ( α ) . Isso é fácil, porque existem algoritmos para calcular os valores do log Gamma diretamente . Gere uma flutuação aleatória uniforme entre 0 e 1, pegue seu logaritmo, divida por α e adicione C a ele.αC=log(Γ(α))+log(α)αC
Como o parâmetro de escala apenas redimensiona a variável, não há problema em acomodá-lo nesses procedimentos. Você nem precisa se todos os parâmetros de escala forem iguais.
Editar
Em outra resposta, o OP descreve um método no qual a potência de uma variável uniforme (uma variável B ( α ) ) é multiplicada por uma variável Γ ( α + 1 ) . Isso funciona porque o pdf da distribuição conjunta dessas duas variáveis é igual a ( α x α - 1 ) ( y α e - y d y / Γ ( α + 1 ) ) . Para encontrar o pdf de z = x y1/αB(α)Γ(α+1)(αxα−1)(yαe−ydy/Γ(α+1))z=xysubstituímos , dividimos pelo x jacobino e integramos x . A integral deve variar de z a ∞ porque 0 ≤ y ≤ 1 , de ondey→z/xxxz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
que é o pdf de uma distribuição .Γ(α)
O ponto principal é que, quando , é improvável que um valor extraído de Γ ( α + 1 ) seja insuficiente e somando seu log e 1 / α vezes o log de uma variável uniforme independente, teremos o log de um Varia ( α ) variável. É provável que o log seja muito negativo, mas teremos contornado a construção do seu antilog, que será transmitido em uma representação de ponto flutuante.0<α<1Γ(α+1)1/αΓ(α)