graph_tool.dynamics.IsingMetropolisState#
- class graph_tool.dynamics.IsingMetropolisState(g, beta=1, w=1, h=0, s=None)[source]#
Bases:
DiscreteStateBase
Metropolis-Hastings dynamics of the Ising model.
- Parameters:
- g
Graph
Graph to be used for the dynamics
- beta
float
(optional, default:1.
) Inverse temperature.
- w
EdgePropertyMap
orfloat
(optional, default:1.
) Edge interaction strength. If a scalar is provided, it’s used for all edges.
- h
VertexPropertyMap
orfloat
(optional, default:0.
) Vertex local field. If a scalar is provided, it’s used for all vertices.
- s
VertexPropertyMap
(optional, default:None
) Initial global state. If not provided, a random state will be chosen.
- g
Notes
This implements the Metropolis-Hastings dynamics [metropolis-equations-1953] [hastings-monte-carlo-1970] of the Ising model [ising-model] on a network.
If a node
is updated at time , the transition to state is done with probabilityotherwise we have
.References
[metropolis-equations-1953]Metropolis, N., A.W. Rosenbluth, M.N. Rosenbluth, A.H. Teller, and E. Teller, “Equations of State Calculations by Fast Computing Machines,” Journal of Chemical Physics, 21, 1087–1092 (1953). DOI: 10.1063/1.1699114 [sci-hub, @tor]
[hastings-monte-carlo-1970]Hastings, W.K., “Monte Carlo Sampling Methods Using Markov Chains and Their Applications,” Biometrika, 57, 97–109, (1970). DOI: 10.1093/biomet/57.1.97 [sci-hub, @tor]
Examples
>>> g = gt.GraphView(gt.collection.data["polblogs"].copy(), directed=False) >>> gt.remove_parallel_edges(g) >>> g = gt.extract_largest_component(g, prune=True) >>> state = gt.IsingMetropolisState(g, beta=.1) >>> ret = state.iterate_async(niter=1000 * g.num_vertices()) >>> gt.graph_draw(g, g.vp.pos, vertex_fill_color=state.s, ... output="metropolis-ising.pdf") <...>
State of a Metropolis-Hastings Ising dynamics on a political blog network.#
Methods
copy
()Return a copy of the state.
Returns list of "active" nodes, for states where this concept is used.
Returns the internal
VertexPropertyMap
with the current state.iterate_async
([niter])Updates nodes asynchronously (i.e. single vertex chosen randomly), niter number of times.
iterate_sync
([niter])Updates nodes synchronously (i.e. a full "sweep" of all nodes in parallel), niter number of times.
Resets list of "active" nodes, for states where this concept is used.
- copy()#
Return a copy of the state.
- get_active()#
Returns list of “active” nodes, for states where this concept is used.
- get_state()#
Returns the internal
VertexPropertyMap
with the current state.
- iterate_async(niter=1)#
Updates nodes asynchronously (i.e. single vertex chosen randomly), niter number of times. This function returns the number of nodes that changed state.
- iterate_sync(niter=1)#
Updates nodes synchronously (i.e. a full “sweep” of all nodes in parallel), niter number of times. This function returns the number of nodes that changed state.
If enabled during compilation, this algorithm runs in parallel (i.e. using more than one thread.)
- reset_active()#
Resets list of “active” nodes, for states where this concept is used.