Hi @noonespecific ,
I haven’t really looked at it yet, but my first idea would be to use the Sine of the Time, plugged into the Z Translation, something like this:

Then use the Index of the heads (or poles) modulo 2 to offset half of them.
You’ll have to fill in the details (and the exact numbers in the Math Nodes, you’ll have to make some of them dependant of the number of poles) yourself, of course.