Pseudo multi-objective optimization with native components

Hello everyone,

For some time now, especially with the advent of Pollinate and DesignExplorer components, I have been dubbling with how to best take advantage of the parametric (and not generative) part of the optimization process. The main strategy is simple, deep search of the design space and assessment/visualization of building performance using the above mentioned components.

I wanted however to also get an idea, quantitatively, of the performance of the different combinations of design parameters. And I wanted to do this within the framework of a search process and without using any of the well known (and certainly superior) optimization tools like Octopus. To do that I created this ridiculously simple definition, replicating the Desirability function for multivariate optimization introduced by Harrington (1965).

The math is quite rudimentary:

  • in case of minimization of a parameter, the function takes the form

                   0,                             if x > B
    

d(min) = [(x-B)/(A-B)]^s, if A <= x <=B

                 1,                             if x &lt; A  
  • in case of maximization of a parameter, the function takes the form

                   0,                             if x &lt; A
    

d(max) = [(x-A)/(B-A)]^s, if A <= x <=B

                 1,                             if x &gt; B

where:

A, B, and s chosen by the user.

A and B are the lower and upper limits for a specific parameter and are therefore completely subjective. Additionally, s is a value that makes the criterion easier or more difficult to satisfy (e.g. lower s values during minimization assign greater importance to a criterion, etc.).

Additional variables can be added by reproducing (i.e. copy/pasting) the individual functions and assigning a new parameter, limits and s values. The overall desirability of the model is given by a simple geometric mean of all the variables (the example is developed for 2 but you can quickly understand the logic).

Again, this is a very primitive definition so there are no checks for any kind of errors (e.g. A and B selected the same, not connecting variables values to the geometric mean calculation, not getting the length of parameter list, etc). Also, I am well aware that a beginner to medium level of programming can transform this definition into an actual useful thing (if it is indeed smth useful). Finally, I am not even sure of the appropriateness of this method to the kind of analyses we perform with LB/HB.

Despite all that, it seemed very simple to use, extremely easy to understand, and a really good way to put me to sleep. I hope someone finds it interesting!

Kind regards,

Theodore.

Desirability.gh (15.1 KB)

Theodore,

I just wanted to let you know that the simple multi-objective operation that you have here is very similar to that used by the shade benefit components:

https://github.com/mostaphaRoudsari/Honeybee/blob/master/src/Honeyb…

You can see a similar set of formulas on page 4 of the shaderade paper where this type of shade benefit idea originally came from:

http://web.mit.edu/tito_/www/Publications/BS2011_Shaderade.pdf

In the case of the shade benefit, the two competing variables are shade benefit and shade harm and I see how this generalizable description that you gave here is useful for any case where you have two optimization criteria that competing against each other. The exponent “s” has always been 1 in all of the cases I have worked with but I realize that changing this could be super-useful in the comfort shade benefit to account for the fact that people are usually better at adapting to extreme cold stress than to extreme heat stress. I will try to work this in at some point:

https://github.com/mostaphaRoudsari/ladybug/issues/242

Thanks for the thoughtful post,

-Chris