I compared Wallacei’s optimization results with Tunny’s optimization results.
The results are very different for the same SBX crossover. The difference in mutation is particularly interesting.
If mutation is applied to all possible ranges of the variables, as in the case of Tunny, the results would be sampled in areas that have nothing to do with the previous trend, but the Wallacei results show that only ranges that are not far removed from the previous trend are sampled.
What kind of mutation calculations are you doing?
The following graph compares the results of the Ackley function with three different seed values.
The trends are generally similar for the minimum values, but Wallacei performs better.
This is an interesting experiment! However, before I address your questions, I would like to clarify a few aspects of your experimental setup.
Specifically, could you share what mutation settings you used in Wallacei? I’m particularly interested in the distribution index and the seed value chosen for these three experiments. Did you keep the seed value at 1 in the Wallacei UI, or was it modified?
Now, in response to your question—while I cannot speak on behalf of Tunny, I can provide insight regarding Wallacei. Wallacei’s mutation operator is designed with a strategic, bounded, and generation-aware approach. It employs polynomial mutation, which is sensitive to both the proximity of parent solutions and the current state of the evolutionary process. This results in more localized mutations that support smoother convergence and reduce the occurrence of disruptive outliers—something clearly reflected in your plots.
That said, Wallacei does provide user-configurable settings in the UI, such as the distribution index, which directly influences mutation behaviour. This adaptive mutation mechanism enables a better balance between exploration and exploitation throughout the evolutionary process.
I’m particularly interested in seeing how your results might change if you modify the random seed in the UI from 1 to 0. Using a seed of 0 ensures a different seed is generated for each run, introducing variability. Conversely, keeping the seed fixed at 1 allows you to replicate the same run conditions each time. This is especially important in architectural design contexts, as it enables designers to precisely isolate and understand the impact of specific changes in the design problem—without being misled by initial randomness.
Wallacei supports this capability, which is critical for designers aiming to rigorously evaluate the influence of each design decision on the final outcomes.
I am actually the developer of Tunny. I asked this question because of feedback from my users that Wallacei’s GA is superior. Thank you very much for your answer.
I was wondering if something was wrong with my NSGAII implementation, but it is good to know that the mutation algorithm is different.
In the graph above, I calculated with three values of 1,2,3 for different values of seed. But from your response, it seems that setting 0 was appropriate.
A Crossover Distribution Index of 2 and a Mutation Distribution Index of 20 were used.
I am assuming that the Crossover Distribution Index is equivalent to eta, which determines the distribution of the offspring generated by SBX.
I am almost certain there is nothing wrong with your NSGA-II implementation. We have made several internal modifications to the core algorithm to better tailor it for architecture and urban design applications. That was one of the key reasons behind the development of Wallacei. Specifically, we’ve adjusted key components such as the mutation and crossover to enhance performance in solving optimization problems relevant to the AEC industry.