I’ve recently started to use Wallacei. It’s a great tool, thank you very much for sharing your fantastic work!
I have a generative script that makes building masses. My priority objective is to meet the area programme requirement. Secondarily, I would like to optimize other objectives, such as daylight, horizontal view and view to the park.
I have a couple of question on the possibility of setting objective priorities:
In the old forum I read that you werere working on a new feature that applies weights to objectives. Is this feature available?
In the meantime, I’ve tried to force the priority by adding a penalty to all the other objectives, when the difference between total area and requirement exceeds a threshold. The analysis results are finally calculated as: result + result *penalty. Now I’m doing some tests, trying multiple solutions for calculating the penalty (squared, linear and cubic).
Generally, it works because almost all the final solutions have the correct area but the problem is that in each study the options in the Pareto front are too similar to each other. By Changing the seed, I obtain new results, different from the previous study, but similar to each other. I guess that this penalty makes hard to the algorithm to get out of local minimums.
Do you think that this system of penalties can work? Do you have any other suggestion on how to prioritize objectives?
We’re still working on the objective weighting… we have a few things in the works at the moment and so we’re hoping to be able to release the weighting feature soon (but please dont hold me to that!).
With regards to your approach to applying weighting, its interesting, but as you/ve discovered, it skews the results slightly so that the pareto front is similar… now this could be down to the design problem itself and not your weighting approach - the first thing i’d do is run the simulation without your weighting function, do you get similar pareto results?
An alternative approach that i always use is to apply weighting in the selection process after you run the simulation - so for example, after you run the simulation without weighting, you select the top 50 solutions for your biased objective, and then from those 50 you choose the solution that performs best according to the other objectives - ive found this a good method that allows the simulation to run without your bias (i.e. directing it to one part of the landscape over the other) giving you results from the peaks the simulation has found to be optimal, and then you apply your weighting criteria to results through selection (giving you more control over how/why you select solutions) which can be supported through the Wallacei Analytics components… especially the parallel coordinate plot.
Thanks for replying! I’m looking forward to the weighting feature, whenever it will be ready.
I did many tests. Looks like there is no big difference between the two methods. After running the simulation without bias and filtering the pareto solutions by the priority objectives (small area error), I end up finding the same solutions that I found with biased method (penalties). The only difference is that, with the penalties method, the optimization is more focused on the solution with correct area, so I get more similar solutions with small variations.
Anyway, now I’m trying to make a new generative algorithm that gets always the correct area, so I can use Wallacei without tricks.
Is there any way to filter the solution directly on the parallel plot axis inside wallacei X? Right now, in order to do design space exploration, I’m filtering the exported phenotypes with sliders directly inside grasshopper.
I recommend you use the parallel coordinate plot component that is part of the Wallacei Analytics toolset - (found under Wallacei tab in grasshopper). The component is highly customisable, and allows you to filter through a subset of fitness values - so for example, from Wallacei X component, extract the fitness values of the last generation (no need to export the phenotypes) and feed them into the parallel coordinate plot component - this will allow you to only analyse the last gen… see image below (fyi, I’m using the wallacei x example file in the image).