Generation of surfaces according to certain conditions

i have already read through almost the whole internet and the forum but found nothing comparable.
I would like to generate the base area and placement of apartments according to certain conditions.
My idea is to use the Galapagos or Opossum plugin to achieve a fitness of 0(best value) after adding all conditions.
I have created a script that allows to arrange large areas on a grid. But I don’t know how to add more conditions (see Grasshopper script).
Furthermore I have two more approaches how to solve the problem. One could be to create a generative script based on a raster and the areas could be developed by the centroids. (See picture 1.Possibility)

On the other hand, it might be possible to fulfil the conditions by packing. For example, the areas could be opened up to create a corridor. The areas that do not have to be used for the corridor would then be used as living space again. (See picture2.Possibilty)

principle of (50.2 KB)

Necessary conditions: each apartment must have a view outside or to the atrium. Each apartment must be connected to the corridor. The corridor must overlap at one point to allow stairs to the next floor. On the next floor the apartments can be rearranged, but should have at least one equal wall position for the kitchen and the bathroom.

I would be very grateful for helpful approaches or solutions.
Have a nice weekend

Has anybody some approaches?

Will be impossible and not robust with only Grasshopper components. The best approach would be to code this. There are a bunch of papers you can find of people trying to solve similar things since the 1960’s

okay, thank you for you answer. But i still hope to get some approaches for the solution in grasshopper :smiley:

But i still hope to get some approaches for the solution in grasshopper

Take @rawitscher-torres advice. This is a task greater than just standard Grasshopper (and not at all simple). Here of some info of people doing this kind of stuff but they are scripting, using evolutionary solvers, physics engines, machine learning, etc.


Hello Michael Pryor, thank you for your answer. I know that its not standard Grasshopper, thats why i am asking in the forum :smiley: Thank you for the links!

And this is my current attempt, its more of an “autonomous” program distribution. Its built from a paper called Stigmergic Space by David Reeves. The only problem is that it is a greedy algorithm, meaning that is always picks the best solutions at each iteration, this can cause the system to settle down quickly in any local minima or maxima. So what I will do next is try to add in another optimization technique called simulated annealing.

So in short, these types of algorithms are more towards the category of optimization , which in essence is what architects like to call “generative design”. Grasshopper was written by David Rutten, thinking more about parametric modeling, hence relationships between geometric entities. This is why people have written many other plugins to extend this functionality in order to not only be restricted to the parametric realm. So basically parametric modeling is not the same as generative design.

I personally think that problems of space planning, or autonomous floor plan design is a job that Machine Learning can tackle best. It is very difficult to approach it from a rule-based algorithmic system. I think you should research more on layout generation so you can see for yourself. As I said before people have been thinking about this for a long time and there are a lot of papers you can read. Definitely the references that Michael gave you, should be a good start for you to get your feet wet.


Hi Nicholas this is excellent work as I am working on a similar project may I know if you could provide the definition or starter code for this project. Proper referencing to your work will be provided. Thank you in advance!