<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Erickc</id>
	<title>Física Computacional - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Erickc"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Especial:Contribui%C3%A7%C3%B5es/Erickc"/>
	<updated>2026-06-12T14:48:57Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9026</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9026"/>
		<updated>2022-10-19T04:25:51Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas, na Fig. 2 vemos exemplos destas distribuições. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\varepsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig. 1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. Para as Figs. 1,2,3,4,5,6 os valores exatos estão sobrepostos aos valores obtidos em simulação como uma linha pontilhada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9025</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9025"/>
		<updated>2022-10-19T04:25:27Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas, na Fig. 2 vemos exemplos destas distribuições. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\varepsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. Para as Figs. 1,2,3,4,5,6 os valores exatos estão sobrepostos aos valores obtidos em simulação como uma linha pontilhada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9024</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9024"/>
		<updated>2022-10-19T04:24:28Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas, na Fig. 2 vemos exemplos destas distribuições. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\varepsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. Para as Figs. 1,2,3,4,5,6 os valores exatos estão sobrepostos aos valores obtidos em simulação como uma linha pontilhada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9023</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9023"/>
		<updated>2022-10-19T04:20:53Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\varepsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. Para as Figs. 1,2,3,4,5,6 os valores exatos estão sobrepostos aos valores obtidos em simulação como uma linha pontilhada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9022</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9022"/>
		<updated>2022-10-19T04:18:54Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\varepsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9021</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9021"/>
		<updated>2022-10-19T04:18:14Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\epsilon(X) = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9020</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9020"/>
		<updated>2022-10-19T04:17:56Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9019</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9019"/>
		<updated>2022-10-19T04:17:37Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para o parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9018</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9018"/>
		<updated>2022-10-19T04:17:26Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação para um parâmetro e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9017</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9017"/>
		<updated>2022-10-19T04:17:06Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;X_{sim}&amp;lt;/math&amp;gt; é o valor obtido na simulação e &amp;lt;math&amp;gt;X_{exato}&amp;lt;/math&amp;gt; é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9016</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9016"/>
		<updated>2022-10-19T04:16:46Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
onde $X_{sim}$ é o valor obtido na simulação e $X_{exato}$ é o valor exato para o mesmo parâmetro. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9015</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9015"/>
		<updated>2022-10-19T04:15:38Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. &lt;br /&gt;
----&lt;br /&gt;
Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9014</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9014"/>
		<updated>2022-10-19T04:14:27Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. &lt;br /&gt;
----&lt;br /&gt;
Podemos calcular os erros entre os valores obtidos através da simulação e os valores exatos conhecidos para esse sistema através da seguinte expressão]&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon{X} = \frac{|X_{sim}-X_{exato}|}{X_{exato}}&amp;lt;/math&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9013</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=9013"/>
		<updated>2022-10-19T04:09:05Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity2.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs2.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU2.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC2.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF2.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS2.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickC2.png&amp;diff=9012</id>
		<title>Arquivo:ErickC2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickC2.png&amp;diff=9012"/>
		<updated>2022-10-19T04:08:29Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF2.png&amp;diff=9011</id>
		<title>Arquivo:ErickF2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF2.png&amp;diff=9011"/>
		<updated>2022-10-19T04:08:21Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickS2.png&amp;diff=9010</id>
		<title>Arquivo:ErickS2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickS2.png&amp;diff=9010"/>
		<updated>2022-10-19T04:08:14Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs2.png&amp;diff=9009</id>
		<title>Arquivo:ErickProbs2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs2.png&amp;diff=9009"/>
		<updated>2022-10-19T04:08:07Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU2.png&amp;diff=9008</id>
		<title>Arquivo:ErickU2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU2.png&amp;diff=9008"/>
		<updated>2022-10-19T04:07:59Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity2.png&amp;diff=9007</id>
		<title>Arquivo:ErickStateDensity2.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity2.png&amp;diff=9007"/>
		<updated>2022-10-19T04:07:50Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF.png&amp;diff=9005</id>
		<title>Arquivo:ErickF.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF.png&amp;diff=9005"/>
		<updated>2022-10-19T04:06:48Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickF.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF.png&amp;diff=9004</id>
		<title>Arquivo:ErickF.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickF.png&amp;diff=9004"/>
		<updated>2022-10-19T04:06:28Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickF.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs.png&amp;diff=9003</id>
		<title>Arquivo:ErickProbs.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs.png&amp;diff=9003"/>
		<updated>2022-10-19T04:05:38Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickProbs.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9002</id>
		<title>Arquivo:ErickStateDensity.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9002"/>
		<updated>2022-10-19T04:04:55Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickStateDensity.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9001</id>
		<title>Arquivo:ErickStateDensity.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9001"/>
		<updated>2022-10-19T04:04:22Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickStateDensity.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9000</id>
		<title>Arquivo:ErickStateDensity.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=9000"/>
		<updated>2022-10-19T04:03:58Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickStateDensity.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8999</id>
		<title>Arquivo:ErickU.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8999"/>
		<updated>2022-10-19T04:02:44Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickU.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8998</id>
		<title>Arquivo:ErickU.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8998"/>
		<updated>2022-10-19T04:02:28Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickU.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8997</id>
		<title>Arquivo:ErickU.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickU.png&amp;diff=8997"/>
		<updated>2022-10-19T04:01:07Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickU.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs.png&amp;diff=8996</id>
		<title>Arquivo:ErickProbs.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickProbs.png&amp;diff=8996"/>
		<updated>2022-10-19T04:00:59Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickProbs.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=8995</id>
		<title>Arquivo:ErickStateDensity.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:ErickStateDensity.png&amp;diff=8995"/>
		<updated>2022-10-19T04:00:41Z</updated>

		<summary type="html">&lt;p&gt;Erickc: Erickc enviou uma nova versão de &amp;amp;quot;Arquivo:ErickStateDensity.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8994</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8994"/>
		<updated>2022-10-19T01:10:18Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 4&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 4&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8993</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8993"/>
		<updated>2022-10-19T01:08:28Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Grandezas Termodinâmicos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversas grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estas grandezas dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade do método de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8992</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8992"/>
		<updated>2022-10-19T01:07:56Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Grandezas Termodinâmicos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos grandezas termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8991</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8991"/>
		<updated>2022-10-19T01:07:32Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Parâmetros Termodinâmicos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Grandezas Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8990</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8990"/>
		<updated>2022-10-19T01:07:14Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Normalização */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos a baixas temperaturas.&lt;br /&gt;
&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8989</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8989"/>
		<updated>2022-10-19T01:04:27Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Fator de modificação f */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado (Ising 2D), resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8988</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8988"/>
		<updated>2022-10-19T01:04:06Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Observações sobre o algoritmo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para o sistema estudado, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8987</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8987"/>
		<updated>2022-10-19T00:59:37Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
(com uma versão didática publicada em 2004 por D.P Landau, Shan-Ho Tsai e M. Exlerem), &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem depender do método de repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8985</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8985"/>
		<updated>2022-10-19T00:51:31Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Implementação paralela */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;Vogel, Thomas, et al. &amp;quot;Generic, hierarchical framework for massively parallel Wang-Landau sampling.&amp;quot; Physical review letters 110.21 (2013): 210603.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8984</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8984"/>
		<updated>2022-10-19T00:47:42Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Descrição do algoritmo de Wang Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (O critério de 10000 passos é arbitrário e pode ser modificado de acordo com o propósito da simulação).&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;1B. J. Schulz, K. Binder, M. Mu¨ller, and D. P. Landau, ‘‘Avoiding boundary&lt;br /&gt;
effects in Wang-Landau sampling,’’ Phys. Rev. E 67, 067102 !2003&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8983</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8983"/>
		<updated>2022-10-19T00:46:17Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
&amp;lt;ref&amp;gt;1B. J. Schulz, K. Binder, M. Mu¨ller, and D. P. Landau, ‘‘Avoiding boundary&lt;br /&gt;
effects in Wang-Landau sampling,’’ Phys. Rev. E 67, 067102 !2003&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8622</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8622"/>
		<updated>2022-10-17T18:40:33Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo de código */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código do Exemplo==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8621</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8621"/>
		<updated>2022-10-17T18:37:51Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Parâmetros Termodinâmicos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8620</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8620"/>
		<updated>2022-10-17T18:37:20Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
&amp;lt;div id=&amp;quot;equações para parâmetros termodinâmicos&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;\div&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das [[#equações para parâmetros termodinâmicos]], podemos calculá-los para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8619</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8619"/>
		<updated>2022-10-17T18:34:25Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;equação de distribuição de probabilidade canônica&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das equações supracitadas, podemos calcular os parâmetros termodinâmicos para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8618</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8618"/>
		<updated>2022-10-17T18:32:44Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;dpc&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das equações supracitadas, podemos calcular os parâmetros termodinâmicos para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8617</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8617"/>
		<updated>2022-10-17T18:31:38Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;dpc&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da [[#dpc equação de distribuição de probabilidade canônica]], podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das equações supracitadas, podemos calcular os parâmetros termodinâmicos para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8616</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8616"/>
		<updated>2022-10-17T18:29:34Z</updated>

		<summary type="html">&lt;p&gt;Erickc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;dpc&amp;quot;&amp;gt; &amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pf&amp;quot;&amp;gt; &amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da equação de distribuição de probabilidade canônica, podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das equações supracitadas, podemos calcular os parâmetros termodinâmicos para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8615</id>
		<title>Amostragem de Wang-Landau</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Amostragem_de_Wang-Landau&amp;diff=8615"/>
		<updated>2022-10-17T18:26:51Z</updated>

		<summary type="html">&lt;p&gt;Erickc: /* Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O [https://pt.wikipedia.org/wiki/Algoritmo algoritmo] de amostragem de Wang-Landau é um método de amostragem para simulações de [https://pt.wikipedia.org/wiki/Monte_Carlo Monte Carlo] introduzido por D.P Landau, Shan-Ho Tsai e M. Exlerem em 2004 &lt;br /&gt;
&amp;lt;ref&amp;gt;Landau, D. P., Shan-Ho Tsai, and M. Exler. &amp;quot;A new approach to Monte Carlo simulations in statistical physics: Wang-Landau sampling.&amp;quot; American Journal of Physics 72.10 (2004): 1294-1302.&lt;br /&gt;
&amp;lt;/ref&amp;gt; &lt;br /&gt;
com suas primeiras concepções traçadas por F. Wang and D. P. Landau em 2001&lt;br /&gt;
&amp;lt;ref&amp;gt;F. Wang and D. P. Landau, ‘‘Efficient, multiple-range random walk algorithm to calculate the density of states,’’ Phys. Rev. Lett. 86, 2050–2053&lt;br /&gt;
!2001&amp;quot;; ‘‘Determining the density of states for classical statistical models:&lt;br /&gt;
A random walk algorithm to produce a flat histogram,’’ Phys. Rev. E 64,&lt;br /&gt;
056101 !2001&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que apresenta diversas vantagens sobre outros métodos para sistemas de [https://pt.wikipedia.org/wiki/Spin spins]. Dentre eles podemos citar o algoritmo de Metropolis&lt;br /&gt;
&amp;lt;ref&amp;gt;N. Metropolis, A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E.&lt;br /&gt;
Teller, ‘‘Equation of state calculations by fast computing machines,’’ J.&lt;br /&gt;
Chem. Phys. 21, 1087–1092 !1953&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, o algoritmo de &#039;&#039;clustering&#039;&#039; de Wolff&lt;br /&gt;
&amp;lt;ref&amp;gt;U. Wolff, ‘‘Collective Monte Carlo updating for spin systems,’’ Phys. Rev.&lt;br /&gt;
Lett. 62, 361–364 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, ou em um modelamento de &#039;&#039;ensamble&#039;&#039; multi-canônico&lt;br /&gt;
&amp;lt;ref&amp;gt;B. A. Berg and T. Neuhaus, ‘‘Multicanonical ensemble: A new approach to&lt;br /&gt;
simulate first-order phase transitions,’’ Phys. Rev. Lett. 68, 9–12 !1992&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
. Nestes dois últimos métodos são utilizados métodos de repesagem de [https://pt.wikipedia.org/wiki/Histograma histogramas]&amp;lt;ref&amp;gt;&lt;br /&gt;
A. M. Ferrenberg and R. H. Swendsen, ‘‘New Monte Carlo technique for&lt;br /&gt;
studying phase transitions,’’ Phys. Rev. Lett. 61, 2635–2638 !1988&amp;quot;; ‘‘Optimized Monte Carlo data analysis,’’ ibid. 63, 1195–1198 !1989&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
que são limitados em sistemas grandes devido as baixa qualidade estatística nas asas do histograma. &lt;br /&gt;
Dentro deste contexto, o algoritmo Wang-Landau promete resolver problemas encontrados em amostragens convencionais como o &#039;&#039;critical slowing down&#039;&#039; para temperaturas próximas da temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; utilizando-se de caminhadas aleatórias controladas para mapear a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; de um sistema, sem fazer uso de qualquer repesagem de histogramas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A maioria dos algoritmos de amostragem convencionais geram uma [https://pt.wikipedia.org/wiki/Conjunto_can%C3%B3nico distribuição canônica] não normalizada &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P(E,T) = g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, Geralmente estas distribuições são estreitas e se faz necessário múltiplas simulações para obter algum parâmetro [https://pt.wikipedia.org/wiki/Termodin%C3%A2mica termodinâmico] para uma distribuição significantemente grande de temperaturas. &lt;br /&gt;
Como &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;não depende de temperatura do sistema, se pudermos encontrá-lo para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, podemos encontrar a [https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_de_parti%C3%A7%C3%A3o_(mec%C3%A2nica_estat%C3%ADstica) função de partição] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Z(T) = \sum_E g(E)e^{-E/K_BT}, &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
e o sistema esta essencialmente resolvido, uma vez que grande parte dos parâmetros termodinâmicos podem ser derivados de &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Além disso, a amostragem de Wang-Landau é provada ser útil em diversas aplicações como o [https://pt.wikipedia.org/wiki/Antiferromagnetismo antiferromagneto] de Potts&lt;br /&gt;
&amp;lt;ref&amp;gt;C. Yamaguchi and Y. Okabe, ‘‘Three-dimensional antiferromagnetic&lt;br /&gt;
q-state Potts models: application of the Wang-Landau algorithm,’’ J. Phys.&lt;br /&gt;
A 34, 8781– 8794 !2001&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas de spins aleatórios&amp;lt;ref&amp;gt;Y. Okabe, Y. Tomita, and C. Yamaguchi, ‘‘Application of new Monte Carlo&lt;br /&gt;
algorithms to random spin systems,’’ Comput. Phys. Commun. 146, 63– 68&lt;br /&gt;
!2002&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
, sistemas [https://pt.wikipedia.org/wiki/Mec%C3%A2nica_qu%C3%A2ntica quânticos]&amp;lt;ref&amp;gt;&lt;br /&gt;
2M. Troyer, S. Wessel, and F. Alet, ‘‘Flat histogram methods for quantum&lt;br /&gt;
systems: Algorithms to overcome tunneling problems and calculate the&lt;br /&gt;
free energy,’’ Phys. Rev. Lett. 90, 120201 !2003&amp;quot;. &amp;lt;/ref&amp;gt;, etc... .&lt;br /&gt;
&lt;br /&gt;
==Descrição do algoritmo de Wang Landau==&lt;br /&gt;
Descreveremos o funcionamento do algoritmo de Wang-Landau num sistema de spins clássicos de 2 estados numa grade bidimensional com valores discretos de energia e sem [https://pt.wikipedia.org/wiki/Campo_magn%C3%A9tico campo magnético]([https://pt.wikipedia.org/wiki/Modelo_de_Ising Modelo de Ising]2D). Portanto quando nos referirmos a &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; como densidade de estados, interpretamos como o número de estados com energia E.&lt;br /&gt;
A amostragem de Wang-Landau faz caminhadas aleatórias no espaço de energia mudando os estados de spins aleatoriamente selecionados, porém esta mudança só é aceita com probabilidade proporcional a reciproca da densidade de estados. Durante a caminhada também se acumula o número de vezes que uma energia é visitada durante a caminhada &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt;, isto é, ao visitarmos a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; faz-se a atualização da variável &amp;lt;math&amp;gt; H(E_1) \rightarrow H(E_1) + 1 &amp;lt;/math&amp;gt;. Por outro lado, a atualização da densidade de estados &amp;lt;math&amp;gt;g(E_1)&amp;lt;/math&amp;gt; se da por um fator multiplicativo &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt; g(E_1) \rightarrow g(E_1) \times f &amp;lt;/math&amp;gt;) controlado ao longo da simulação para que seja muito próximo de 1 ao final das caminhadas. &lt;br /&gt;
&lt;br /&gt;
Podemos descrever os passos do algoritmo da seguinte maneira:&lt;br /&gt;
# Inicializamos as densidades de energias com &amp;lt;math&amp;gt;g(E) = 1&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, da mesma forma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; para todo &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Inicializamos &amp;lt;math&amp;gt;f = f_0 = e \approx 2.71828&amp;lt;/math&amp;gt; e um sistema &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; de spins de valor 1 e -1 aleatoriamente distribuídos.&lt;br /&gt;
#*O valor de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; é arbitrário e deve ser escolhido não muito pequeno, pois irá fazer com que a simulação demore muito tempo para explorar diversas energias, por outro lado se escolhido muito grande, levará a erros estatísticos significativos.&lt;br /&gt;
# Começamos a caminhada inicial escolhendo aleatoriamente um dos spins e mudando o seu estado. &lt;br /&gt;
# Se denotamos &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; como a energia antes da mudança de estado do spin selecionado e &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt; como a energia após, aceitamos este novo estado com a seguinte probabilidade: &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2) = \text{min}\left(\frac{g(E_1)}{g(E_2)},1\right)&amp;lt;/math&amp;gt; &lt;br /&gt;
#*Se aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_2) \rightarrow g(E_2) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_2) \rightarrow H(E_2) +1&amp;lt;/math&amp;gt; respectivamente. &lt;br /&gt;
#*Se não aceitarmos a mudança de estado do spin, fazemos as atualizações de &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; como &amp;lt;math&amp;gt;g(E_1) \rightarrow g(E_1) \times f&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;H(E_1) \rightarrow H(E_1) +1&amp;lt;/math&amp;gt; respectivamente, de maneira a recontar o estado &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt;. &lt;br /&gt;
#*Destaca-se que em ambos os casos usamos &amp;lt;math&amp;gt;\ln(g(E)) = \rightarrow \ln(g(E)) + \ln(f)&amp;lt;/math&amp;gt;, pois ao longo da simulação acabamos usando números muito grandes. &lt;br /&gt;
#Faz-se esta caminhada aleatória nos diferentes estados do sistema até que o histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; esteja aproximadamente plano. &lt;br /&gt;
#*O critério para decidir se um histograma está plano é arbitrário. Para um [https://pt.wikipedia.org/wiki/Hamiltoniano_(mec%C3%A2nica_qu%C3%A2ntica) hamiltoniano] de Ising 2D este critério pode ser definido tão alto quanto 95% (i.e. todos os valores de &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; devem ser pelo menos 95% de &amp;lt;math&amp;gt; \langle H(E) \rangle &amp;lt;/math&amp;gt;), porém valores mais altos que isso podem resultar no programa nunca identificando o histograma como plano.&lt;br /&gt;
#Checa-se se &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; está plano a cada 10000 passos MC. Quando está plano, podemos dizer que todos os estados foram visitados uma quantidade de vezes aproximadamente igual e a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; converge ao valor real com precisão da ordem de &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
#*Um passo MC corresponde a &amp;lt;math&amp;gt;L^2 = N&amp;lt;/math&amp;gt; passos.&lt;br /&gt;
#Reduz-se o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; da seguinte maneira &amp;lt;math&amp;gt;f_1 \rightarrow \sqrt{f_0}&amp;lt;/math&amp;gt;, reinicia-se o histograma &amp;lt;math&amp;gt;H(E) = 0&amp;lt;/math&amp;gt; e recomeça-se a caminhada aleatória com este novo fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;. (Todos os parâmetros não mencionados neste passo permanecem intocados).&lt;br /&gt;
#Continuamos executando os passos 5-7, reduzindo o fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; segundo a seguinte expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Encerra-se a simulação quando &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; estiver da ordem do erro desejado. &lt;br /&gt;
#*Claro que &amp;lt;math&amp;gt;f_{final}&amp;lt;/math&amp;gt; pode ser escolhido arbitrariamente pequeno, mas sempre com um certo limite razoável &amp;lt;math&amp;gt;(10^{-6}-10^{-8})&amp;lt;/math&amp;gt;, ou a simulação pode tomar tempos não razoáveis para completar.&lt;br /&gt;
&lt;br /&gt;
==Observações sobre o algoritmo==&lt;br /&gt;
Nesta seção discutimos algumas observações importantes a se levar em conta na implementação do método de amostragem de Wang-Landau&lt;br /&gt;
===Fator de modificação f===&lt;br /&gt;
Quando tratamos da atualização do fator &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, a expressão &amp;lt;math&amp;gt;f_{i+1} = \sqrt{f_{i}}&amp;lt;/math&amp;gt; é apenas uma recomendação, uma vez que outros valores de &amp;lt;math&amp;gt;n&amp;gt;1&amp;lt;/math&amp;gt; podem ser escolhidos para uma atualização do tipo &amp;lt;math&amp;gt;f_{i+1} = f_{i}^{(1/n)}&amp;lt;/math&amp;gt;. Não obstante, &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; é adequado para grande parte dos sistemas estudados, resultando em boa acurácia em relativamente pouco tempo de simulação.&lt;br /&gt;
===Implementação paralela===&lt;br /&gt;
A simulação pode ser melhorada ainda fazendo múltiplas caminhadas aleatórias paralelamente no espaço de energias. Restringindo o alcance das caminhadas proporcionalmente com o número de caminhantes em paralelo (e.g. No caso de 2 caminhantes simultâneos, dividimos o espaço de energias em 2 e restringimos um caminhante para a metade inferior das energias, e o outro para a parte superior) e depois juntando as densidades de estados resultantes.&lt;br /&gt;
===Balanço detalhado===&lt;br /&gt;
A condição de balanço detalhado inicialmente não é satisfeita uma vez que &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; é constantemente modificada durante a caminhada aleatória. Porém após várias iterações, a condição é satisfeita a medida que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; se aproxima de 1. Observa-se que se &amp;lt;math&amp;gt;P(E_1 \rightarrow E_2)&amp;lt;/math&amp;gt; é a probabilidade de transição da energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; para a energia &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;, utilizando a equação do passo 4 do algoritmo  temos que: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{P(E_1 \rightarrow E_2)}{P(E_2 \rightarrow E_1)} = \frac{g(E_1)}{g(E_2)}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos reescrever a equação de uma forma mais familiar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   \frac{1}{g(E_1)}P(E_1 \rightarrow E_2) = \frac{1}{g(E_2)}P(E_2 \rightarrow E_1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a condição de balanceamento detalhado, uma vez que interpretamos que &amp;lt;math&amp;gt;1/g(E_1)&amp;lt;/math&amp;gt; como a probabilidade do sistema possuir a energia &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; e analogamente para &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;. Concluímos então que a condição de balanço detalhado é satisfeita com precisão proporcional a &amp;lt;math&amp;gt;\ln(f)&amp;lt;/math&amp;gt;.&lt;br /&gt;
===Escalabilidade===&lt;br /&gt;
Quando analisamos um modelo de Ising 2D de tamanho &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt;, temos que o número de configurações &amp;lt;math&amp;gt;(2^N, N = L^2)&amp;lt;/math&amp;gt; aumenta exponencialmente com &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, enquanto o número de possíveis energias é por volta de &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; e aumenta linearmente com N. Implicando que temos uma escalabilidade muito boa para as caminhadas no espaço de energia quando o objetivo é estimar &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; uma vez que um aumento no tamanho da grade não implica em um aumento exponencial, mas sim linear, no tempo de execução.&lt;br /&gt;
===Normalização===&lt;br /&gt;
É necessário ressaltar que após a simulação completa, o algoritmo de Wang-Landau nos fornece apenas a densidade de estados relativa. Para extrairmos a real densidade de estados &amp;lt;math&amp;gt;g_n(E)&amp;lt;/math&amp;gt; é necessário que utilizemos uma das duas condições: Que o número total de estados possíveis é &amp;lt;math&amp;gt;\sum_Eg_n(E) = Q^N&amp;lt;/math&amp;gt; ou que o numero de estados fundamentais é &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; (onde &amp;lt;math&amp;gt;Q = 2&amp;lt;/math&amp;gt; para o modelo de Ising 2D pois os spins possuem apenas dois estados). &lt;br /&gt;
&lt;br /&gt;
Pela primeira condição, podemos obter a densidade de estados normalizada através da equação&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[\sum_Eg(E)] + N\ln(2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
enquanto pela segunda condição temos que  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln[g_n(E)] = \ln[g(E)] - \ln[g(E = -2N)] + \ln(2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A segunda normalização é preferível pois garante precisão para estados de menor energia, o que é necessário para o calculo de parâmetros termodinâmicos há baixas temperaturas.&lt;br /&gt;
===Parâmetros Termodinâmicos===&lt;br /&gt;
Uma vez que temos a densidade de estados, podemos calcular diversos parâmetros termodinâmicos, como a [https://pt.wikipedia.org/wiki/Energia_interna energia interna] &amp;lt;math&amp;gt;U(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Calor_espec%C3%ADfico calor especifico] &amp;lt;math&amp;gt;C(T)&amp;lt;/math&amp;gt;, [https://pt.wikipedia.org/wiki/Energia_livre_de_Helmholtz energia livre de Helmholtz] &amp;lt;math&amp;gt;F(T)&amp;lt;/math&amp;gt; e [https://pt.wikipedia.org/wiki/Entropia entropia] &amp;lt;math&amp;gt;S(T)&amp;lt;/math&amp;gt; através das seguintes equações:&lt;br /&gt;
       &amp;lt;math&amp;gt;U(T) = \frac{\sum_EEg(E)e^{-E/k_BT}}{\sum_Eg(E)e^{-E/k_BT}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;C(T) = \frac{\langle E^2\rangle - \langle E\rangle^2}{k_BT^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;F(T) = -k_BT\ln\left(\sum_Eg(E)e^{-E/k_BT}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;math&amp;gt;S(T) = \frac{U(T) - F(T)}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
Estes parâmetros termodinâmicos dependem apenas da temperatura uma vez que já foi encontrado a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt;, o que contorna os problemas de &#039;&#039;critical slowing down&#039;&#039; na temperatura crítica pois a simulação não precisa ser refeita para cada uma das temperaturas, por consequência também dispensa a necessidade de repesagem de histogramas, contornando o problema de estatística fraca nas asas dos histogramas.&lt;br /&gt;
&lt;br /&gt;
==Exemplo: Modelo de Ising 2D por amostragem de Wang-Landau==&lt;br /&gt;
Podemos aplicar o algoritmo de Wang-Landau para um sistema [https://pt.wikipedia.org/wiki/Ferromagnetismo#:~:text=Ferromagnetismo%20%C3%A9%20o%20mecanismo%20b%C3%A1sico,diferentes%20de%20magnetismo%20s%C3%A3o%20distinguidos. ferromagnético] 2D de Ising com interação de primeiros vizinhos e uma grade quadrada &amp;lt;math&amp;gt;L\times L&amp;lt;/math&amp;gt; com [https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%B5es_de_fronteira_peri%C3%B3dicas condições de contorno periódicas] no qual o hamiltoniano é dado por&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathcal{H} = -\sum_{\langle i,j\rangle}\sigma_{i}\sigma_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &amp;lt;math&amp;gt;\sigma_{i} = +1&amp;lt;/math&amp;gt; para spin para cima, &amp;lt;math&amp;gt;\sigma_{i} = -1&amp;lt;/math&amp;gt; para baixo e &amp;lt;math&amp;gt;\langle i,j\rangle&amp;lt;/math&amp;gt; indica a soma entre os primeiros vizinhos. Na Fig.1 temos a densidade de estados &amp;lt;math&amp;gt;g(E)&amp;lt;/math&amp;gt; para um sistema &amp;lt;math&amp;gt;16 \times 16&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;f_{final} \sim 10^{-6}&amp;lt;/math&amp;gt; e com critério para um histograma &amp;lt;math&amp;gt;H(E)&amp;lt;/math&amp;gt; plano de 80%. Com esses parâmetros, a &#039;&#039;Google Compute Engine&#039;&#039; padrão para [https://pt.wikipedia.org/wiki/Python Python3] do Google Colab realiza a simulação em &amp;lt;math&amp;gt;\sim 40s&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickStateDensity.png|400px|thumb|center| Figura 1: Logaritmo da densidade de estados &amp;lt;math&amp;gt;\ln(g(E))&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;, há uma brusca queda na densidade de estados perto das pontas uma vez que as energias &amp;lt;math&amp;gt;-2L^2 + 8&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;2L^2 - 8&amp;lt;/math&amp;gt; são inalcançáveis pelo sistema.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso da equação de distribuição de probabilidade canônica, podemos encontrar a distribuição de probabilidade das energias para uma determinada temperatura &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Devido a natureza do algoritmo, estas distribuições que por meios convencionais levariam tempo demasiadamente grande para ser calculado ou necessitariam de repesagem de histograma são instantaneamente calculadas com o algoritmo de Wang-Landau independentemente da temperatura. Na Fig.2 temos um exemplo das distribuições, incluindo uma próxima da temperatura critica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo: erickProbs.png|400px|thumb|center| Figura 2: A distribuição canônica &amp;lt;math&amp;gt;P(E,T) = g(E)e^{-E/K_BT}&amp;lt;/math&amp;gt; em 3 temperaturas, incluindo a temperatura crítica &amp;lt;math&amp;gt;T_c&amp;lt;/math&amp;gt; para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Fazendo uso das equações supracitadas, podemos calcular os parâmetros termodinâmicos para este sistema em função da temperatura quase que instantaneamente. Estes são ilustrados nas Figs. 3,4,5,6.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickU.png|400px|thumb|center| Figura 3: A Energia interna do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickC.png|400px|thumb|center| Figura 4: O Calor Específico do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o pico se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickF.png|400px|thumb|center| Figura 5: A Energia Livre do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que o começo da queda se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;[[Arquivo: erickS.png|400px|thumb|center| Figura 6: A Entropia do sistema em função da temperatura para o modelo de Ising 2D com &amp;lt;math&amp;gt;L = 16&amp;lt;/math&amp;gt;. Perceba que a inflexão se da aproximadamente na temperatura crítica &amp;lt;math&amp;gt;k_BT_c \approx 2.3&amp;lt;/math&amp;gt;.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplo de código==&lt;br /&gt;
[[Exemplo de código para a amostragem de Wang-Landau em Python3]]&lt;br /&gt;
==Referências==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Erickc</name></author>
	</entry>
</feed>