Multi-objective optimisation of shells: a benckmark with GH, Karamba and Octopus

Octopus is a plug-in for Grasshopper that extends the functionality of Galapagos by introducing multiple fitness values (multi-objective) to the optimization process. It is based on the SPEA-2 multi-objective evolutionary algorithm, of which more information can be found here.

In order to test Octopus, let us consider a simple benchmark with 2 contrasting objective functions, related to concrete shells. A NURBS surface, defined by 9 control points, has been constrained at the 4 corners and subdivided into a 10×10 mesh. Gravity load and a uniform distributed load have been applied, and the structural model has been analysed with Karamba. Exception made for the 4 corners, the Z coordinates of the control points have been used as the design variables of the problem. Lightness and stiffness have been used as the contrasting fitness functions.

In this case, the final result cannot be considered as a single individual, because the multi-objective optimisation is producing a set of solutions which fit both the initial requirements. This group is generally called Trade-off or Pareto front. For more detailed information, please refer to DEB, Multi-Objective Optimization using evolutionary Algorithms.

The optimal solutions for the 2 separated fitness functions are well known and it is represented in the figure below. The planar configuration is the lightest, while the dome is the stiffest. Other screenshots from the pareto-front and from the remaining dominated solutions are also shown below.

The benchmark for this test is a reproduction of one of the problems studied to develop a conference proceeding (by Tomas Mendez Echenagucia, Alberto Pugnale and Mario Sassone), which will be presented at the ICSA 2013 in Portugal. In that paper, the NSGA-II algorithm used has been developed by Tomas Mendez Echenagucia and Mario Sassone.

Boundary and design variables


Pareto front Bechmark


Multi objective screenshot

0 14621


  1. Andrea

    Hi Alberto, I’m attending the course of prof. Sassone with Thomas and I’m now training with multi objective optimization for my thesis in urbanism. I’m just at the beginning and I would be very interested in giving a look to the .gh file of your experiment to understand a couple of things, could you publish it?
    Thank you ,


  2. Hello,
    Have fun with Mario Sassone and Tomas Mendez. They can surely help you to understand the logics of multi-objective optimization better than me. The file is here: . It is nothing special, just a dome which has been defined through 9 control points. Karamba is the structural solver and the two fitness functions have to be stored as a list (before that you plug them into Octopus).
    The most difficult part is usually in the interpretation of the results (the pareto-front).

  3. Andrea

    Thank you very much, it will be a very useful starting point to understand the optimization’s logic and the practical use of it.


  4. Nita

    Hi Alberto,

    Congratulations on your amazing work and thanks for sharing the file.I am also working on my masters thesis.
    I am a beginner in using Octopus in grasshopper and I am trying to optimize the Window to wall ratio for multiple objectives.

    What I want to achieve is like the results at this video, but in hs case he optimizes window size only for one objective, which is 500lux.
    I have difficulties connecting the geometry to the definition.

    I should put the geometries as sliders or in the genepole (and connect them with G)?
    – – – In this case should they be areas in GH or breps with assigned geometry, or with points?
    – – – for Objectives(or fitness) , I understand that I have to ‘translate’ any results I have into numbers?or these are variable too?

    you help will be very much appreciated,


  5. Hi Nita
    Thank you.

    Every optimisation process in based on boundary conditions, design variables (which have to be considered as sliders or gene pools), and objective functions or fitness (that is one or more performances).

    Having said that, it’s up to you ‘designing’ your optimisation strategy. What are the variables of your system (window dimensions, etc)? If yes, then define them through sliders, so that they vary within a specific solution domain. Regarding objectives, I would encourage you to read “An introduction to Genetic Algorithms”, by Mitchell. Of course they are expressed as numerical values. There are four types of fitness values: raw, standardised, adjusted and normalised. It’s good in this case to use a normalised value so that two objectives can be weighted properly.


  6. Nita

    Hi Alberto,

    Thank you for your input. I’m in a deadline panic now.I have skimmed through few papers to understand the principals, but it is so hard for me to work with octopus.
    I have developed a script about the WWR problem that I asked you previously.But I still have some problems on what to adjust at the solver window, Pareto front settings and how to present results.
    Questions: Are you using he Octopus component or OctopusE plugin?

    I also would like to have your opinion regarding the project you have presented at this post and your published paper “Computational Morphogenesis in architecture: structure and light as a multi-objective design/optimization problem”.
    In my study i am trying to do a similar process for form-finding but for other fitness values.Do you think that Octopus is the right solver?

    Aim of project: Optimize the geometry of a vertical façade in floor boundaries, form finding for early stage design, for a range of objectives(fitness values) both environmental and indoor comfort conditions for 5 different climates.
    Targeted performance(fitness values):
    – Maximize – Daylight iluminance levels to 500lux, Total radiation on the façade for heating period
    – Minimize – Total radiation on the façade for cooling period, Primary energy demand – 120 kWh/m2a, annual amount of Carbon emission per floor area.
    ? Not sure how to feed into the solver the 26°C (changes in different climates) thermal comfort fitness value.

    Workflow: Step1. Window to wall ratio optimization for only typical residential box room. Generate results for all climates.
    Step 2. Form finding for that particular room for the same fitness values. Generate results for all climates.
    Step 3. Compare results and continue further with form finding for building height, all NSWE orientations and climates.

    Boundary conditions: Free running simulation, no cooling. Worst case scenario with no surrounding buildings. Fixed internal gains, U-values and window transmittance(it has been done several times before) based on standards recommendations and references to published papers for each climate(Berlin, Moscow, New York, Dubai and Shanghai)
    Constrains: Structural analysis are not considered in this study. They are left to be further on the process on planning depending on the design decisions that the architect(or other decision makers) might take.

    Problems and Questions: I did a run of simulations with 3 fitness’: a simple sclarization (weighted sum of the criteria) into one number for the radiation and daylighting.
    – Number of generations and population size?
    – Does it make sense to scalarise all fitness values in one number ? How would this be plotted in the Pareto front, or any other kind of visualizing results?
    – I have attached a screenshot of the Pareto front in Octopus(and the guide that I used for the above mentioned simulation). Even though the WWR problem is simple I feel lost on determine how to adjust settings before starting the solver.

    Many thanks for reading and if you have time can I send to you my .gh file by email?


  7. Hi Nita,
    I am not using those solvers now. I know there are two different versions, but I made this file in 2013, with an old release of Octopus, and it was for purely illustrative purposes.
    I am sure you can use Octopus anytime you are able to formulate a problem in the right way. There are no limits, apart from that.
    Regarding the more specific aspects of your work, you should probably refer either to your supervisor, or to the solver developers. I guess it’s difficult via email grasping all the aspects, and replying within a reasonable timeframe.
    Kind regards

  8. Roberto

    Hi Alberto, amazing post! Is it possible to have your gh file? The dropbox directory you uploaded to Andrea doesn’t work anymore.
    Thanks a lot

  9. Hi Roberto,
    thanks for the kind words. Unfortunately, I can’t seem to find the file… It was done quickly, as a test file, more than four years ago.
    I don’t even think it would work with the recent releases of Gh and Octopus.

  10. Lara Alves

    Hi Alberto I’m from Brazil and I’m working with multi objective optimization os shells structures for my final graduation work and I would be very interested in giving a look to the .gh file of your experiments to understand a couple of things or know where i can find your articles to read.
    Best regards

    • Hi Lara,
      the files used in this post are downloadable for free (re-read the first paragraph).
      That’s all I’ve got. Other files might not be based on this plug-in, which I have never used for my own research.

Trackbacks for this post

  1. […] blog post by Alberto Pugnale explains a very simple and clear example of using Octopus for a shell structure […]

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.