Coherent Ising Machines

Every lesson in this module so far computed something linear — transforms, convolutions, projections — with the nonlinearity outsourced to electronics. This one goes after a different beast entirely: combinatorial optimization. Portfolio selection, chip placement, network partitioning, scheduling — thousands of industrial problems reduce to picking the best of 2^N configurations, and for all of them exhaustive search dies by N \approx 40. The previous lesson used optical dynamics as a feature map; the coherent Ising machine (CIM) uses optical dynamics as the solver: build a network of light pulses whose physics naturally seeks a minimum-energy configuration, encode your problem as that energy, switch on, and let the machine relax toward an answer. The machine's key component is a strange kind of laser — a parametric oscillator — whose defining quirk is that it can only shine in one of two phases. Two phases, two spin states: hardware that is binary by physics, analog in how it decides.

The Ising language of hard problems

The lingua franca of this field is borrowed from magnetism. Take N binary "spins" s_i \in \{+1, -1\}, couple pairs of them with weights J_{ij}, and score a configuration by its energy:

Worked micro-example: three spins in a triangle, every pair coupled by J_{ij} = -1 (each pair "wants" to disagree). Two spins can disagree, but the third must then agree with one of them. Try (+1,-1,+1): the 1–2 and 2–3 pairs are happy (s_i s_j = -1), the 1–3 pair is not (s_1 s_3 = +1), so

H \;=\; -\big[J_{12}s_1s_2 + J_{23}s_2s_3 + J_{13}s_1s_3\big] \;=\; -\big[(-1)(-1) + (-1)(-1) + (-1)(+1)\big] \;=\; -1 .

Check the other configurations and you find only two possible scores: -1 (one unhappy pair — six configurations are tied at this optimum) and +3 (all spins aligned, every pair unhappy). No configuration satisfies all three pairs. That irreducible dissatisfaction — frustration — multiplied across thousands of spins, is what makes the landscape rugged and the problem hard.

A laser that can only say + or −

The CIM's spin is a pulse of light in a degenerate optical parametric oscillator (OPO): a nonlinear crystal in a cavity, pumped at frequency 2\omega, converting pump photons into pairs of signal photons at \omegastimulated emission's stranger sibling. Because two signal photons are born from each pump photon, the signal field is phase-locked to half the pump phase — and half of a phase has exactly two solutions, 0 and \pi. Below pump threshold the signal is essentially noise; as the pump power p crosses threshold, the field must commit, and the steady-state amplitude follows a pitchfork: the "off" state destabilises and two mirror-image branches — phase 0, phase \pi — open up. Which branch a pulse takes is the machine's binary decision:

One OPO is one spin. For a network, the standard trick is time multiplexing (the same move as the last lesson's virtual nodes): N pulses circulate in a kilometre-scale fibre loop, each pulse one spin. The couplings J_{ij} are imposed by measurement and feedback: a tap siphons off a little of each pulse, homodyne detection measures its amplitude x_j, an FPGA computes \sum_j J_{ij} x_j for every spin, and a modulator injects that sum back into pulse i on its next round trip. The physics then does something lovely. Feedback means the pulses share gain and loss: configurations of phases that satisfy the couplings experience lower round-trip loss than frustrated ones. As the pump ramps up, the first configuration to reach threshold — the first to out-earn its losses — is the one with minimum loss, which by construction is the minimum of H. The machine doesn't search the 2^N corners; it holds all of them in superposed analog amplitudes below threshold and lets gain competition promote the cheapest one first. That is the minimum-gain principle — and also, as the "Watch out!" below explains, a promise the hardware only approximately keeps.

The honest benchmark: race it against a CPU

Any proposed optimizer must beat the boring baseline: simulated annealing (SA) — flip random spins, accept improvements always and regressions with probability e^{-\Delta H/T}, cool T slowly. The program below builds a random 10-spin Max-Cut problem and lets three solvers at it: brute force (ground truth), SA, and a CIM-style analog descent — the mean-field dynamics \dot x_i = (p - 1)x_i - x_i^3 + \varepsilon \sum_j J_{ij} x_j that approximate a measurement-feedback machine, with the pump ramped through threshold:

// One Ising problem, three solvers. const N = 10; let seed = 7; const rand = (): number => { seed = (seed * 1664525 + 1013904223) % 4294967296; return seed / 4294967296; }; // Random Max-Cut instance: J[i][j] = -1 on edges (each pair an edge with prob 1/2). const J: number[][] = []; for (let i = 0; i < N; i++) J.push(new Array(N).fill(0)); let edges = 0; for (let i = 0; i < N; i++) for (let j = i + 1; j < N; j++) if (rand() < 0.5) { J[i][j] = J[j][i] = -1; edges++; } const energy = (s: number[]): number => { let e = 0; for (let i = 0; i < N; i++) for (let j = i + 1; j < N; j++) e -= J[i][j] * s[i] * s[j]; return e; }; const cutOf = (e: number): number => (edges + e) / 2; // for J = −1 on edges // 1) Brute force: the true optimum (fix s[0] = +1 by symmetry). let bestE = Infinity; for (let m = 0; m < 2 ** (N - 1); m++) { const s = [1]; for (let b = 0; b < N - 1; b++) s.push((m >> b) & 1 ? 1 : -1); bestE = Math.min(bestE, energy(s)); } console.log("edges: " + edges + " | optimal cut (brute force): " + cutOf(-bestE)); // 2) Simulated annealing on a CPU: the boring baseline. let s = Array.from({ length: N }, () => (rand() < 0.5 ? 1 : -1)); let e = energy(s), saBest = e; let T = 3.0; for (let step = 0; step < 4000; step++) { const i = Math.floor(rand() * N); s[i] = -s[i]; const e2 = energy(s); if (e2 <= e || rand() < Math.exp((e - e2) / T)) e = e2; else s[i] = -s[i]; saBest = Math.min(saBest, e); T *= 0.998; } console.log("simulated annealing best cut: " + cutOf(-saBest)); // 3) CIM-style dynamics: analog amplitudes, pump ramped through threshold. const x: number[] = Array.from({ length: N }, () => 0.01 * (rand() - 0.5)); const dt = 0.02, eps = 0.35; for (let step = 0; step < 3000; step++) { const p = step / 1500; // pump ramp: 0 → 2 const nx = x.slice(); for (let i = 0; i < N; i++) { let fb = 0; for (let j = 0; j < N; j++) fb += J[i][j] * x[j]; nx[i] += dt * ((p - 1) * x[i] - x[i] ** 3 + eps * fb); } for (let i = 0; i < N; i++) x[i] = nx[i]; } const spins = x.map((v) => (v >= 0 ? 1 : -1)); console.log("CIM-style dynamics final cut: " + cutOf(-energy(spins)));

On a toy instance all three typically find the optimum — which is exactly the point. Solution quality on small problems distinguishes nothing; the argument is about speed and scale. A fibre-loop CIM holds 100,000 pulse-spins circulating at gigahertz rates, updating every spin every round trip (microseconds), with the all-to-all coupling computed in the feedback loop. Published head-to-heads on dense 2,000-spin problems have shown CIMs reaching good solutions orders of magnitude faster than a D-Wave quantum annealer of the same era, and competitive with — the honest phrase is "trading blows with" — well-tuned digital heuristics. But the comparison cuts both ways: SA on a modern CPU is embarrassingly fast, GPU/FPGA "simulated bifurcation" machines — digital simulations of the CIM's own equations — match or beat the optical hardware on many published instances, and time-to-solution contests are notoriously sensitive to parameter tuning, instance selection and what one counts as "solved". The defensible claim for optical Ising machines is not supremacy; it is a favourable scaling of speed and energy for dense, large-N problems, and an architecture whose costliest operation — the N^2 coupling sum — rides on physics rather than arithmetic.

The marketing sometimes hints at it; the honest answer is "not in the way you'd hope". Below threshold, an OPO's signal field genuinely is a squeezed vacuum state — a quantum object, and in principle each pulse passes through a moment of superposition between its two phases as it crosses threshold. But in the measurement-feedback architecture the pulses interact only through a classical channel — a homodyne measurement and an FPGA — which destroys any entanglement between spins as fast as it could form. Numerical studies find the machine's behaviour is reproduced well by semiclassical equations like the ones you just ran; indeed that is precisely why "simulated bifurcation" on GPUs works so well as a competitor. There are proposed all-optical coupling schemes where quantum correlations might genuinely help, and measuring whether they do is an active research question. For now, classify the CIM as a quantum-inspired analog computer: its binary states are enforced by quantum optics, its computation is (semi)classical dynamics. If that feels deflationary, note that Module 9 covers photonic machines whose quantumness is not in doubt — and whose engineering difficulties are correspondingly not in doubt either.

The minimum-gain argument quietly assumed every pulse oscillates at the same amplitude, so that the analog energy landscape the machine descends matches the Ising energy H(\mathbf{s}) evaluated on the signs. Real machines break this assumption: strongly-coupled spins settle at different amplitudes than weakly-coupled ones, and this amplitude heterogeneity deforms the landscape — the machine can happily relax into an analog minimum whose sign pattern is not the Ising ground state. It is the CIM's version of a systematic bug, and the field's countermeasures are worth knowing: error- feedback schemes that dynamically adjust each pulse's gain to equalise amplitudes, chaotic- amplitude variants that deliberately keep the system restless, and simply re-running with fresh noise. The general lesson generalises across this whole module: an analog computer solves the problem its physics defines, which is only ever an approximation of the problem you wrote down. Quantifying that gap — not wiring the machine — is usually the hard part.

Where this goes next

The CIM completes this module's tour of analog optical computing at its most ambitious: not just evaluating a fixed transform but steering a physical system through an exponentially large search space. Every machine in the tour, though, kept colliding with the same walls — precision, drift, I/O, cascading error. The final lesson faces those walls squarely: what analog optics can never do, what it does better than anything else, and the design rules that separate the two.