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')
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 )
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)
# 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]))
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()
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()
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)
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_), '-')
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
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()
# -*- 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
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