Ising

Ising

ising is a sequencer based on a simple 2D Ising model of ferromagnetism. ising is based on zellen.

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.

Requirements

Norns 2.x
Grid (tested with 128, should work with other sizes)

Documentation

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

Future ideas

  • 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

Download

37 Likes

Unreal!
Been waiting for you to release this.
Have you had a chance to look at adding JF support?
I had a look to do it myself but the code is similar to Zellen and I don’t understand what “synth.crow” is :rofl:

1 Like

Thanks! Yeah ising is a fork of zellen. If you do end up figuring it out, I recommend submitting the change as a pull request to zellen. Then I can merge it into my ising fork.

I’ll try my hand at it this weekend, but since I don’t have a JF I can’t make any promises. @sbaio have you tried adding JF support to zellen?

1 Like

Looks amazing! Can’t wait to try it out (will have to find a Faraday Cage to hang out in though)

1 Like

This is really awesome! Will dig in deeper over weekend and read up on the Ising model.

If I find the time I’ll implement JF support for zellen over the weekend. I played with JF support in another script I’m working on and it shouldn’t take long to add it to zellen.

5 Likes

Hi is it connected to any synth engine?

Yep! Like zellen, it uses the PolyPerc engine.

1 Like

I played with ising a bit yesterday and found some interesting phenomena including spin waves for negative coupling and unstable antiferromagnetic-like equilibrium states for positive coupling.

Changing the “wrap board at edges” (or “periodic boundary conditions” in the math parlance) parameter affects how fluctuations from ferromagnetic/antiferromagnetic order propagate through the lattice; there are some interesting bulk/surface differences.

“God made the bulk; the surface was invented by the devil.” - Wolfgang Pauli

I’ll try to make some videos this weekend of what I found.

7 Likes

Finally merged @sbaio’s zellen update into ising to (theoretically) add support for Just Friends. I don’t have a JF, so I can’t actually test it. If anyone tries it and it doesn’t work feel free to let me know :slight_smile:

7 Likes

Amazing! I’ll test it out and report back.