コード例 #1
0
def samples_logs():
    x = np.array([100., 100.])
    mu = np.zeros(2)
    sigma = np.array([[12., 10.], [10., 16.]])
    samples, logs = metropolis.metropolis(x, mu, sigma, n_samples=2500)
    plt.plot(samples[:,0], samples[:,1], '.')
    plt.savefig('samples.pdf')

    plt.clf()
    plt.plot(logs)
    plt.savefig('logprobs.pdf')
コード例 #2
0
 def test_metropolis( self ):
     """
     Testing metropolis algorithm using KS test.
     """
     
     metropolisGen = metropolis.metropolis( self.desiredDistribution.pdf, 0, self.computableGen, self.skipSteps )
     
     #sample from generator
     x = []
     for i in xrange( self.n ):
         x.append( metropolisGen.next()[0] )
         
     #check using KS test, that produxed sample is from given distribution
     KSPValue = scipy.stats.kstest( x, self.desiredDistribution.cdf )[ 0 ]
     
     #if p value is greater than 0.05, we should accept hypotisys, that sample from given distribution
     self.assertGreater( KSPValue, 0.05 )
コード例 #3
0
def test():
    num_chars = 1
    key = gen_key()
    print('[INF] Permutation: ', key)
    plain_text = read_text(PLAIN_TEXT_FILENAME)
    train_text = read_text(TRAIN_TEXT_FILENAME)
    cipher_text = encrypt(plain_text, key)
    print('[INF] Texts are read and encrypted.')
    stat = get_statistics(train_text, num_chars)
    sampler = metropolis.metropolis(
        desiredPDF=ft.partial(get_pdf, text=cipher_text, stat=stat, num_chars=num_chars),
        initValue=rm.uniform(26),
        computableRVS=lambda t: rm.applyedTranspostions(t),
        skipIterations=2)
    print('[INF] Initialization')
    samples = [sampler.next()[0]]
    print('[INF] Sampling...')
    samples += [sampler.next() for i in xrange(1000)]
    for sample in samples:
        print(sample)
コード例 #4
0
# exemplo, a distribuição de proposta foi
# um passeio aleatório simétrico.

import numpy as np
from passeio_aleatorio import PasseioAleatorio
from metropolis import metropolis

# Definir Parâmetros do Problema
problema_2 = PasseioAleatorio()

# Definir Parâmetros do Método
estado_inicial_2 = 2
num_iteracoes_2 = 1000000

# Executar Algoritmo de Metropolis-Hastings
cadeia_2 = metropolis(problema_2, estado_inicial_2, num_iteracoes_2)

# Calcular Frequências de Estados na Cadeia Resultante
estados, contagem = np.unique(cadeia_2, return_counts=True)
frequencia = contagem / len(cadeia_2)

# Somar incidência de estados acima de 9
soma_acima_9 = np.sum(frequencia[8:])
freq_finais = np.append(frequencia[:8], soma_acima_9)

# Exibir Resultados
print("\n----------------- Exemplo 2 -----------------\n")
print("Frequências da Cadeia Obtida:")

for i in range(0, 8):
    print("{} : {}".format(i + 1, freq_finais[i]))
コード例 #5
0
init = 0.2
epsilon = 1.1
L = 10
chain_L = 350
hmc = hmc_sampler(post1, prior1, epsilon, L, numpy.array([init]))
#output = hmc.sample()
#print(output)
#exit()
store_array = numpy.zeros(shape=(chain_L, 2))
for i in range(0, chain_L):
    jitt = numpy.random.normal(size=1) * 0.01
    hmc = hmc_sampler(post1, prior1, epsilon + jitt, L, numpy.array([init]))
    output = hmc.sample()
    init = output[1]
    #print(init)
    store_array[i, 0] = output[0]
    store_array[i, 1] = output[1]

print(sum(store_array[:, 0]) / chain_L)
import matplotlib.pyplot as plt
plt.plot(range(0, chain_L), store_array[:, 1], 'ro')
plt.show()
#exit()
# RW Metropolis Sampling
temp_f = lambda x: post1.log_lik(x)
RW_sampler = metropolis(numpy.array([0.05]), 3.21, temp_f, chain_L)
RW_sampler.sample()
print(sum(RW_sampler.store_matrix[:, 0]) / chain_L)
plt.plot(range(0, chain_L), RW_sampler.store_matrix[:, 1], 'ro')
plt.show()
コード例 #6
0
ファイル: mfmcg.py プロジェクト: cationly/MFMCG
lcir = int(log10(ncir)) + 1
dpath = 'data/'
ddir = dpath + datname(T,h.g) + '/'

print 'data stored in', ddir
try:
   mkdir(dpath)
except:
   print dpath,'exist'
try:
   mkdir(ddir)
except:
   raise OSError('Directory ' + ddir + ' exists.')

mt = metropolis(h,T=T*RT,cutoff=cutoff)
for i in xrange(ncir):
   df = open(ddir + 'c' + str(i).zfill(lcir) + '.dat', 'w')
   d, n, en, a = mt.next()
   dump((i,d,n,en,a), df, -1)
   print ''
   print '*****************'
   print '   Cycle %s      ' % (i)
   print '*****************'
   print ''
   print 'Acceptance rate:', a
   print ''
   print 'Average energies:', en
   print ''
   df.close()
コード例 #7
0
y = data[:, 1]

# choix des paramètres initiaux
p_init = [1000, 25e3, 2e3]
plt.subplot(221)
plt.plot(x, y, 'o')
x_ = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_, model(p_init, x_), '-')
plt.title("initial guess")

# p_var : in python, this parameter is only used to initialize the walkers.
#         then you can put small values when you are sure about the p_init.
p_var = [500, 1e3, 0.2e3]

# fit :
p = metropolis(model, x, y, p_init, p_var, 2000)

# moyennes et écarts types :
w0 = np.mean(p[:, 1])
dw0 = np.std(p[:, 1])

print "pulsation propre = {} +- {} rad/s".format(w0, dw0)

# plots
plt.subplot(222)
plt.plot(x, y, 'o')
x_ = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_, model(np.mean(p, axis=0), x_), '-')
plt.title("fit")

plt.subplot(223)
コード例 #8
0
from metropolis import metropolis
import numpy as np
import matplotlib.pyplot as plt


# création du modèle :
def model(p, x):
    return p[0] * x + p[1]


# génération aléatoire des données :
x = np.linspace(-5, 15, 30)
y = 4.5 * x + 12 + 2 * np.random.randn(len(x))

# fit :
p = metropolis(model, x, y, [5, 10], [0.5, 1])

# moyennes et écarts types :
a = np.mean(p[:, 0], axis=0)
da = np.std(p[:, 0], axis=0)
b = np.mean(p[:, 1], axis=0)
db = np.std(p[:, 1], axis=0)

print "pente = {} +- {}".format(a, da)
print "ordonnée à l'origine = {} +- {}".format(b, db)

# plots
plt.figure()
plt.plot(x, y, 'o')
x_ = np.linspace(-6, 16, 1000)
plt.plot(x_, model(np.mean(p, axis=0), x_), '-')
コード例 #9
0
ファイル: test9.py プロジェクト: kumkee/MFMCG
from hamiltonian import ham
from metropolis import metropolis

cutoff = 0.003
h = ham(length=5, width=4, holes=[[2, 1]])
mt = metropolis(h, cutoff=cutoff)
for i in xrange(10):
    d, n, en, a = mt.next()
    print ""
    print "*****************"
    print "   Cycle %s      " % (i)
    print "*****************"
    print ""
    print "Acceptance rate:", a
    print ""
    print "Average particle densities:"
    print n
    print ""
    print "Average displacements:"
    print d
コード例 #10
0
lcir = int(log10(ncir)) + 1
dpath = 'data/'
ddir = dpath + datname(T, h.g) + '/'

print 'data stored in', ddir
try:
    mkdir(dpath)
except:
    print dpath, 'exist'
try:
    mkdir(ddir)
except:
    raise OSError('Directory ' + ddir + ' exists.')

mt = metropolis(h, T=T * RT, cutoff=cutoff)
for i in xrange(ncir):
    df = open(ddir + 'c' + str(i).zfill(lcir) + '.dat', 'w')
    d, n, en, a = mt.next()
    dump((i, d, n, en, a), df, -1)
    print ''
    print '*****************'
    print '   Cycle %s      ' % (i)
    print '*****************'
    print ''
    print 'Acceptance rate:', a
    print ''
    print 'Average energies:', en
    print ''
    df.close()
コード例 #11
0
ファイル: example3.py プロジェクト: mariogeiger/metropolis
# -*- coding: utf-8 -*-
# plot de la marche aléatoire
from metropolis import metropolis
import numpy as np
import matplotlib.pyplot as plt


# création du modèle :
def model(param, x):
    return param[0] * x + param[1]


# génération des données :
x = np.linspace(-5, 15, 120)
y = 4.5 * x + 12 + 5 * np.random.randn(len(x))

# fit :
p = metropolis(model, x, y, [5, 10], [0.1, 0.2], 5000, 500, 20)

# plot de la marche aléatoire
plt.figure()
plt.plot(p[:, 0], p[:, 1], 'x')
plt.title("{} points".format(p.shape[0]))
plt.xlabel("slope")
plt.ylabel("intercept")
plt.show()

# ce plot permet d'observer la correlation entre les paramètres
コード例 #12
0
from hamiltonian import ham
from metropolis import metropolis

cutoff=0.003
h = ham(length=5,width=4,holes=[[2,1]])
mt = metropolis(h,cutoff=cutoff)
for i in xrange(10):
   d, n, en, a = mt.next()
   print ''
   print '*****************'
   print '   Cycle %s      ' % (i)
   print '*****************'
   print ''
   print 'Acceptance rate:', a
   print ''
   print 'Average particle densities:'
   print n
   print ''
   print 'Average displacements:'
   print d