Help with Magnetizing Floor Plan and "Random" parameter


I am trying to create floor plans using a generative design engine. I have most of the stuff under control, but I have run into a problem.

Whenever I am creating the floor plan using MAGNETIZING FLOOR PLAN GENERATOR I input a “random” selected entry point in the boundary. (See image below)


My problem is:

I can change the entry point to something different, and whenever I return to that initial point, the floorplan won’t be the same as the first one. Even though it was created on the exact same entry point.

The plugin I am using is running through iterations of different floor plans, but it might not hit the exact same output even though you run the same parameters. This is a problem when I export my generations/iterations from my generative engine, since it might show me the correct data, but the floor plan will not match the data.

Is there any workaround for this?

Thank you.

(I have attached a simple floor plan generator script, using the plugin, so you can test yourself.) (6.9 KB)

Unfortunately, whatever random number generator is actually performing the iterations within the optimizer component doesn’t seem to have its seed value accessible. If you can’t pre-prime the PRNG with anything there’s no way to run the component twice and get the same result.

This is one of the reasons that when I was doing research into generative layout design for my thesis I built most of this stuff from the ground up so I could have complete control over the data. Not that I’m suggesting you do that, it took months.

I figured out a workaround for this. Not the best, but it gets the job done.

I start by generating alot of floorplans using my generative engine, that doesn’t have any objectives to them. And then I use the outputted floorplans in a “List item” component, to simulate all the stuff afterwards.

It gives me the results that I want, but it also limits the number of options that I can have.

Thank you for your input though.

i also started making from scratch can you help me to solve some issues.

space (15.9 KB)

  1. how i can build relationship between spaces

  2. opennest place biggest objects first and rest in decreasing order but i want to randomise it.

  3. How to lock position of certain curve (like stairs position) in opennest so they dont change with seed value.

  4. Opennest randomly rotate rectangle but what if we want to lock rotation of rectangle.

  5. Use any attractor method to define their position of object in the list.

You can’t use OpenNest for this kind of work, it’s an algorithm that just inherently doesn’t care about relationships between objects. If you want to try and build an approach that has worked for me in the past, look at the paper Computer Generated Residential Building Layouts by Paul Merrell.

I will also caution you that building an algorithm like this one is impossible to do using grasshopper components and control flows alone. You’ll need to write come actual code to perform iterative processes.

you mean i have to dig deep into programming apart from grassshopper ? i actually inspired from the new thing on internet called “finch 3d” which use grasshopper for that algorithmic generation of building but maybe you are saying so means i have to do extra out of grasshopper.

Finch3D is being marketed as a stand alone application, and so doesn’t use Grasshopper for any of its implementation.

Grasshopper is a purely functional programming language which doesn’t have any out-of-the-box support (outside of custom scripts) for iterative control flows. All generative optimization algorithms I am aware of require iterative processes and are thus impossible to implement in Grasshopper using native components. This is why Grasshopper these days comes packaged with Galapagos. If you need generic optimization, it exists as a separate application within Grasshopper.

There are two paths forward for getting something usable working within Grasshopper. You can create a fairly complex definition that constrains and defines spaces within a building and then try to run Galapagos on this definition. (Personally, I’d use Wallacei instead because space design tends to be a multi-variable optimization problem) I also know it’s possible to implement the algorithm found in Paul Merrell’s paper using C# components in grasshopper, so you could learn C# or Python and try to implement that or some other equivalent algorithm. (I have actually accomplished this, but I relied on some extra control flow plugins that really tanked the speed of the algorithm and haven’t gone back since to rewrite that functionality in C# myself)

If you had done such things why not start a proper discussion for that as this is a very common problem in architecture and it should be developed open-source to handle all sort of possibilities and constraint. Corporate solution don’t work beyond some limit. Open source is slow but gives consistent and discussed development.
You should share your progress so far… I also watch “DCO parametric” YouTube channel for the same purpose

All of my research is publicly available to those who wish to look for it. However I am not interested in releasing identifying information about myself on this forum.