I think the SynthDef graph has to be fixed at run-time - similar to the age-old question about having a SynthDef with a flexible number of partials or channels.
// doesn't work in a SynthDef
FM7.arAlgo(Rand(0, 31), ctls, 0.0);
// does
FM7.arAlgo(rrand(0, 31), ctls, 0.0);
Mads’ code in the OP isn’t changing the algo in one synth def - he’s generated 32 SynthDefs and is working through them.
With that said, if anyone has better understanding of this I’m happy to be corrected!