Как заставить Python (EMCEE) двигаться точно между заданным диапазоном - PullRequest
1 голос
/ 21 апреля 2019

Я написал следующий код для MCMC, используя пакет EMCEE Python

В функции log_prior я определил диапазон параметров, по которым EMCEE перемещается между ними, а не за их пределами. Но проблема в том, что в результатах я вижу, что, например, od0 имеет значение типа 0.64, которого нет в 0.68 < od0 < 0.70 У меня есть эта проблема даже для b.

Интересно, как заставить EMCEE находиться точно между диапазонами, которые я определил. Модель очень чувствительна к значениям, и я просто хочу исследовать между 0.68 < od0 < 0.70, не больше или меньше, чем это.

def log_prior(H0, od0, c, b, M): 
    if  not 0.68 < od0 < 0.70 and  60 < H0 < 80  and   -20 < M < -18.5 and 0.045 < b < 0.065 :
        #return 0.0
        return -np.inf
    mu = 0.878
    sigma = 0.0004
    return np.log(1.0/(np.sqrt(2*np.pi)*sigma))-0.5*(c-mu)**2/sigma**2

без Gaussian prior код:

 def log_prior(H0, od0, c, b, M): 
        if  0.68 < od0 < 0.70 and  60 < H0 < 80  and   -20 < M < -18.5 and 0.045 < b < 0.065 :
            return 0.0
        return -np.inf
...