In the Ising model, the energy of a lattice of spins is determined by the orientation of each spin with respect to its neighbors’ spins. Depending on the sign of the coupling coefficients, large scale ferromagnetic (aligned) or antiferromagnetic (anti-aligned) order emerges. Nonzero temperatures introduce fluctuations that can create local disruptions or overwhelm the order with entropy.
Each pad on the grid represents a lattice node. Each pad’s spin orientation (either up or down) is indicated by its LED brightness. Spin down LEDs are off, and spin up LEDs are on. Transitions between spin states are determined by a Metropolis algorithm: if it is energetically favorable to flip or if there is “enough” thermal energy, a pad’s spin will flip in the next generation.
Like zellen’s reborn/born/ghost options for sequencing, ising allows you to sequence on spin up pads, spin down pads, or spin flips. I’ve found the most useful settings to be large negative or positive coupling, sequencing on spin flips, and slowly turning temperature up from zero until you see a few spin flips per generation.
Grid (tested with 128, should work with other sizes)
The full README.md is on GitHub.
- Grid: enter/modify cell pattern
- KEY2: play/pause current generation (semi-manual mode), advance sequence (manual mode), play/pause sequence (automatic mode)
- KEY3: advance generation
- hold KEY1 and press KEY3: erase the board
- ENC1: set speed (bpm)
- ENC2: set play mode
- ENC3: set play direction
- hold KEY3 + ENC3: time jog
- hold KEY1 + ENC2: change temperature
- hold KEY1 + ENC3: change coupling constant
- Add quantities like the lattice’s total energy, magnetization, and entropy as CV outputs for crow
- Expand model to include external fields and interactions beyond nearest-neighbor