LiftedTASEPCompact.py
From Werner KRAUTH
Revision as of 23:14, 10 June 2024 Werner (Talk | contribs) (→Python program) ← Previous diff |
Revision as of 13:39, 11 June 2024 Werner (Talk | contribs) Next diff → |
||
Line 108: | Line 108: | ||
==References== | ==References== | ||
+ | * Essler F. H. L, Krauth W., Lifted TASEP: a Bethe ansatz integrable paradigm for non-reversible Markov chains, [https://arxiv.org/pdf/2306.13059 arXiv:2306.13059] (2023) | ||
+ | * Kapfer S. C. and Krauth W., Irreversible Local Markov Chains with Rapid Convergence towards Equilibrium, Phys. Rev. Lett. 119, 240603 (2017). |
Revision as of 13:39, 11 June 2024
This page is part of my 2024 Beg Rohu Lectures on "The second Markov chain revolution" at the Summer School "Concepts and Methods of Statistical Physics" (3 - 15 June 2024).
My Lecture 3 is concerned with the Symmetric Simple Exclusion Process (SSEP), and its liftings, the TASEP (totally asymmetric simple exclusion process) and the lifted TASEP, treated here. All these dynamical systems carry the word "Process" in their descriptions. This is because, it is usually described in continuous time. We rather use a formulation in descrete time, where at each time step, a single move is attempted. In fact, each move consists in the choice of a random particle and the choice of a random direction.
Here, we are thus concerned with the lifted TASEP. With periodic boundary conditions, we may separate the forward-and-backward moving TASEP, as discussed in Lecture 3, into two independent copies. At each time step, the TASEP samples the random particle to be moved (forward). This, as discussed, is one half of a lifting of the SSEP.
Contents |
Python program
import math import random alpha = 0.8 exponent = 2.0 prefactor = 1.0 NPart = 100; NSites = 2 * NPart NIter = int(prefactor * NPart ** exponent) NStrob = NIter // 40 Conf = [1] * NPart + [0] * (NSites - NPart) Active = random.randint (0, NSites - 1) while Conf[Active] != 1: Active = random.randint(0, NSites - 1) Text = 'Periodic lifted TASEP, N= ' + str(NPart) + ', L= ' + str(NSites) + ', alpha= ' + str(alpha) print(' ' * (NSites// 2 + 1 - len(Text) // 2) + Text + ' ' * (NSites// 2 + 1 - len(Text) // 2)) print('-' * (NSites + 2)) for iter in range(NIter): NewActive = (Active + 1) % NSites if Conf[NewActive] == 0: Conf[Active], Conf[NewActive] = 0, 1 Active = NewActive if random.uniform(0.0, 1.0) < alpha: while True: Active = (Active - 1) % NSites if Conf[Active] == 1: break if iter % NStrob == 0: PP = '|' for k in range(NSites): if Conf[k] == 0: PP += ' ' elif Active == k: PP += '^' else: PP += 'X' print(PP + '|') print('-' * (NSites + 2)) Text = 'Total time = ' + str(prefactor) + ' * N ^ ' + str(exponent) print(' ' * (NSites// 2 + 1 - len(Text) // 2) + Text + ' ' * (NSites// 2 + 1 - len(Text) // 2))
Output
Here is output of the above Python program for the lifted TASEP with, for simplicity, N=32, L=64 and only 20 configurations over the length of the simulation. The caret ^ indicates the active particle in the sample space that is lifted with respect to the SSEP.
For alpha = 0.8
Periodic lifted TASEP, N= 32, L= 64, alpha= 0.8 ------------------------------------------------------------------ |XXXXXXXXXXXXXXXXXXXXXXXXXXX^XXXX | |XXXXXXXXXXXXXXXXXXXXXXXXXX X^XXXX | |XXXXXXXXXXXXXXXXXXXXX^ XXXXXXX XXX | |XXXXXXXXXXXXXXXXXX X XXXXXXXX^ XXXX | |XXXXXXXXXXXXXXXXXX X XXXXXXX^XXXXX | |XXXXXXXX^ XXXXX XXXX X XXXXXXXXXXXX X | |XXXXX XXXXXXX XX^XXX X XXXXXXXXXXXX X | |XXXXX ^XXXXXX XX XXXXXXXXXXXXXXXXX X | |XXXXX X X^XXXXXX XXXXXXXXXXXXXXXXX X | |XXXXX X XXXXXX XXXX^XXXXXXXXXXXXXX X | |XXXXX X XXXXXX XXXXXXXXXXXXXXXX^XX X | |XXXXX X XXXXXX XXXX XXXXXX^XXXXXXXXX | |XXXXX X XXXXXX XXXX XXXXXXXXXXX^ X XXX | |XXXXX X XXXXXX XXXX X ^XX XXXXXXXXXXXX | |XXXXX X XXXXXX XXXX XXXXXXXX^XXXXXXX | |XXXXX X XXXXXX XXXX XXXXXXXXX XX^XXXX | |XXXXX X XXXXXX XXXX XXXXXXXXX XXX XXX^ | |XXXXX X XXXXXX XXXX XXXXXXX ^ XXXX X XXX | |XXXXX X XXXXXX XXXX XXXXXX^ X XXXX XXXX | |XXXXX X X XXXXXX^XX XXXXXXX X XXXX XXXX | |XXXXX X X ^XXXXX XXX XXXXXXX X XXXX XXXX | ------------------------------------------------------------------ Total time = 1.0 * N ^ 2.0
Clearly, N^2 steps are not sufficient to relax to equilibrium (as the right part of the box remains empty.
For alpha = 0.5
Periodic lifted TASEP, N= 32, L= 64, alpha= 0.5 ------------------------------------------------------------------ |XXXXXX^XXXXXXXXXXXXXXXXXXXXXXXXX | |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX^ | |XXXXXXXXXXXXXXXXXXXXXX XXXXX X X^ XX | |XXXXXXXXXXXXXXXXXXXXXX X^ XXX X X XX X | |XXXXXXXXXXXXXXXXXXXXXX X X X X ^ XXXX X | |XXXXXXXXXXXXXXXXXX ^ X XX XX XX XXXXX X | |XXXXXXXXXXXXXXXXX XX XXXXX^ XXXXXX X | |XXXXXXXXXXXXXXXXX XX XXXXX XXXX ^ X XX | |XXXXXXXXXXXXXXXXX XX XXXXX XX X XX X^ X | |XXXXXXXXXXXXXXXXX XX XXXXX XX ^ XX X X X | |XXXXXXXXXXXX X^X X X X X X XXXX X X XXX X X X | |XXXXXXXXXX X XXX XX X ^X X XXXX X X XXX X X X | |XXXXXXXXXX X XXX XX X XX XX XX^ X X XXX X X X | |XXXXXXXXXX X XXX XX X XX X^X XX XXXXX X X X | |XXXXXXXXXX X XXX XX X XX XX XX XX ^ XX X XX X | |XXXXXXXXXX X X XX ^ XX X X XX X X XXX XX X XX X | |XXXXXXXX X X ^X X XXXXX X XX X X XXX XX X XX X | | XXXX XX XX XXXX X XXXXX X XX X X XXX XX X XX ^ | | XXXX XX XX XXXX X XXXXX X XX X X X^ X XXXXX X | | XXXX XX XX XX X XX^X X XXX X X X X XX X XXXXX X | | XXXX XX XX XX X XX X X XXX X X ^ XX XX X XXXXX X | ------------------------------------------------------------------ Total time = 1.0 * N ^ 2.0
At the special value alpha = 0.5 (in general alpha = N / L), N^2 steps appear to be sufficient to relax the system to equilibrium, and we conjecture the mixing time of the lifted TASEP to equal N^2.
Further Information
References
- Essler F. H. L, Krauth W., Lifted TASEP: a Bethe ansatz integrable paradigm for non-reversible Markov chains, arXiv:2306.13059 (2023)
- Kapfer S. C. and Krauth W., Irreversible Local Markov Chains with Rapid Convergence towards Equilibrium, Phys. Rev. Lett. 119, 240603 (2017).