Clean an good looking Marionette.
I think you have to make it a little more nuanced. Most of all we need numbers and not terms like fast or slow speed up etc.
Not the first time we discuss here. There are the following Processes we can seperate:
1. Regenerate the Object.(Changing parameter)
2. Duplicate and/or Regenerate the Network
3. Change after Duplication (Depends on #2)
#1 can be optimized by strategy of Object creation. As example doing first the math and then placing objects. Not placing Objects and then move as example. But normally there is not wo much potential to speed up the code itself.
I have the following measurements with your Marionette:
4. Duplicate Array 50 pieces > 5s
5. Move those 50 Duplicates > 53s (because after duplicate array the network is not completely reset and the pio is not resetting)
6. Changing parameter for all > 36s
As i told #6 could be improved by optimize the network. First math, then Geometry. But not sure how much potential it has. Not so much i think.
What you could do is, to make a stile out of your network. Then i got the following numbers:
7. Duplicate 50 PIOs > 2s
8. Move those duplicates > 21s
9. Change Parameter > 35s
And if you use those PIOs as a Marionette, the #8 and #5 are relevant. Because the cabinet insert the Netkwork, then regenerate the network, then regenerate the code and then explode the PIO.
With a stiled Marionette you can speed up 100% i would guess