Anemone + Marmot Floor plan Generation

Hello,

at the moment im trying to create a script for a floorplan generation. I’ve internalized a floorplan we are testing the skript on. We are using a very new plugin called marmot. It can divide apartments into their rooms by moving points around. To move those points we brought in galapagos. I couldn’t figure out any other way.
For each room we have a set of conditions, that need to be true. Those need to pass a gate to be baken. To speed up the process we figured it would be usefull to use anemone and check each room after the other. anemone should only run, when the gate is true and since the floorplan has only 10 apartments the repeat is set to 9.
Every next time anemone would run, the counter would be set to next highter integer and would feed the list item index for the next apartment to be processed. Every apartment is only checked for one “true” configuration of rooms, before it jumps to the next aparment. In a future step i would want to restart the entire script to check for other configurations. Every “true” result will be instantly baked to rhino.
my guess is, that anemone is not stopping, but i have read every post about anemone i could find

green room = sleeping room
blue room = bathroom
white room = living + kitchen

Bake Floor Plan using marmot_anemone.gh (987.5 KB)

PlugIns:

Marmot - https://www.food4rhino.com/app/marmot
Actually the so called PlugIns: planSettings, PlanMaker, DeGraph and Graph are all the single ocmponents used in marmot

Pufferfish - https://www.food4rhino.com/app/pufferfish

Human - https://www.food4rhino.com/app/human

I would really appreciate your help, because i did nearly every thing i could imagine to solve this problem by myself.
Kind regards
Loy

@Michael_Pryor maybe you have got an idea.

up…

up…

Hi @loy.doenne,

LOL

I don’t mean to be rude, but that seems to be quite the undertaking with vanilla Grasshopper. I wonder how many more Plugins you’ll need?
You’d be better off scripting this (i.e. Python, C#, etc.), since you want maximum control over the generative data!
I also imagine that running multiple solvers (i.e. Galapagos, Anemone) is quite the performance killer?

OK, so you have one loop that iterates 10 times to evaluate all “apartments”?
What you probably need is a second, nested loop that is triggered at each iteration of the outer loop, to do the evaluation of the current “flat”.

So what if not all or not even a single “apartment” passes your test (and thus gets baked)? Do you rearrange everything and re-evaluate? This would entail the use of some kind of recursive mechanisms.

Is this really necessary? Anemone does keep track of the loop iterations itself!
Also the outer loop, which iterates over the “apartments” is already limited to run 10 times only?

Yeah, but what is this “true” room configuration? And what if none of your conditions are met? The nested loop, which would run as long as the “true” configuration is not met, would descend here into an infinite loop, since it wouldn’t know when to stop.
You’d have to come up with some kind of security measure to exit the loop, thus preventing this.

This step seems counterproductive in the scope of things!

Each and every single one? :wink:

So what is the violet room? Why is the part of the corridor above the violet and beside the white room not part of the “apartment”? Seems like a waste of space!

Loy, you’re just at the start of this journey. Also why do you want to do this? Are you working for Finch3D? What have I done to you that you want to replace my job with a GH-file?

1 Like

Hi @diff-arch ,
im in love with your answer :smiley:
I know what you mean, and i also know that i would be much easier and better to solve it by scripting. But i am not able to script till now and i only have some weeks left to get it finished for my bachelorthesis. So im not working for finch3d :smiley: After my bachelorthesis i would like to learn skripting but for now its not an opportunity.
Galapagos and Anemone are working fine together at least on my computer, but ofc. it would be better to find a less computationally intensive way.
I thought that these iterations should be the same number as the number of apartments (10). So that for every apartment one solution can be baked or arranged. Would you mind to help me with this second nested loop? Till now i have no idea how to do it. The script should search or generate as long possibilities until every apartment got a working solution. So if you got an solution for aparment 1 its not necessary to search for other solutions for apartment 1.
The “true” room configuration is on the one hand based on the connection between living room and sleep- and bathroom and on the other hand based on the minimum edge length of each room. Further that the living room has to get in touch with the corridor and the last one are the squaremeters of the sleeping room.
The loop could run 24 hours and if it wont generate any results i could stop it manuelly if needed.
The violet room is the access core (stairwell).

I want to do this for my bachelorthesis. If i would work for finch3d i guess i wouldnt need to ask how to do it :smiley: What did you have done to not replacing your job with a GH-File?
Just joking, i dont want to take any jobs. My bachelorthesis should just show some approaches to create fast and good living room.

It would be great if you could help me with this somehow. It is really important for the next steps of my bachelorthesis. Thank you for your long and funny answer, i really appreciate it.

Cheers
Loy

Yes, the outer loop should iterate the apartment count, but the inner loop should run as long as it takes to find a desired solution for the current apartment, or continue if no solution could be found, to prevent the much dreaded infinite loop. You have to come up with an exit parameter here. It can be as simple as for instance giving the inner loop a limit amount of iterations (i.e. 50) until it breaks.

Sure, you simply run the inner loop for each iteration of the outer loop.
Here’s a simple example using Anemone:

The outer loop runs 150 times or until the both points have met. The points move toward each other and their movement is driven by the inner loop.

nested_loop.gh (11.2 KB)

In Python, it could be as simple as this:

limit = 50

for i in range(len(apartments)):
    for j in range(limit):
         # Evaluate something here

Yes, and if no solution is found within a certain number of iterations, you also want to move on to the next apartment to avoid the inner loop running infinitely.

OK, so you can use all these parameters to check at each iteration of the inner loop, if they meet a requirement, and if all parameters meet their respective requirements, the loop can bake the geometry to Rhino and move onto the next iteration/apartment of the outer loop.
If none meet the requirements and the inner loop has hit its iteration limit, it moves on anyways, without a solution.

That seems really excessive! You will also probably run out of memory beforehand and Rhino will crash.

OK, weird placement though. :wink:

Or you could be a Finch3D undercover agent looking for ideas? :wink:

This seems like quite the undertaking for a bachelor thesis. Respect.

4 Likes

@diff-arch thank you a lot for your answer and also for the example how to script the nested loop. It makes really sense to stop the loop at a specific point or to go the next apartment.
The position of the access core is just an example. That is the advantage of grasshopper :smiley: you can everything if needed :smiley:
Not the worst job in my eyes :smiley:
Thank you, but is only a part of my thesis :smiley:

1 Like