I covered this a bit with Alexandra Nelson from Perkins Eastman in the AU 2020 session Generative Design At Hogwarts. There is a package with the same name which has a permutation node you can utilize as well.
In a list of 5 items there are 5! or 120 possible ways to sort the list. Using a seeded shuffle it takes 473 searches to find all 120 possible orders. Thatâs almost 4x the amount of work. Worse yet because the results at seed 326 have no correlation to 327 or 325, generative designâs optimize feature is flying entirely blind - the optimization method might as well be tossed for REALLY BIG randomized methods from a standpoint of effective design exploration.
Meanwhile with a permutation-based solution you not only explore the space more rapidly (the 1/4 ratio expands to larger values as there is no pattern in the seeds), but there is a pattern (albeit not an easily identifiable one) in the exploration.
However the limitations to permutation-based exploration which may make it impractical. Currently the largest number which can be completely exposed by Dynamoâs Number Slider is 999,999,999,999,999 (999 trillion). Now this is a HUGE number, but it can rapidly be dwarfed by the scale of possible list permutations as youâre working in factorial space, which is indicated by the notation !
. For a sense of scope, this is how that content scales up:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 355687428096000
18! = 6402373705728000
As you can see, by the time we hit a list 18 items deep we exceed the limit of a slider in Dynamo, which means we are missing out on at least 6,000,000,000,000,000 possible sort orders, more than 90% of the options in the set. I did build the nth permutation
node in the Generative Design at Hogwarts
package to allow feeding a list of slider values summing each as a 10^15th in succession (effectively performing (slider1* 10^15) + slider 2
so you get up to 30 digits). However because all sliders are mutated evenly, optimize doesnât implement well here as the value of the first slider has more impact on the net result. If memory serves, I was effectively capped at 19 items.
There are other ways to explore larger sets, but generally speaking you should try and group items into bins, optimize the sequence of the bins, and then optimize the items in each bin, before finally merging and doing a fill or relaxation tool to âoccupyâ the voids left over.
Hope this helps!