Embryo

The Embryo project aims to apply genetic programming concepts to grasshopper, offering an alternative to manual graph generation.

Latest release available on github (link below). Click on releases tab to find it.

Embryo

I've decided to release at least an alpha version of Embryo for people to play with. It's been too long, and my dreams to get all bugs ironed out have faded away like tears in rain. Anyway, here it is :)

Embryo introduces ideas from Genetic Programming (GP) (not to be confused with genetic algorithms) to Grasshopper. It would be nice to get people thinking about working at higher levels of abstraction in a design computing context. It was the late Paul Coates who introduced me to GP in architectural design ten years ago.

Simply put, the idea is to write a program that writes a program (or in Grasshopper, generates a dataflow-based definition). There are good reasons I believe for looking into this outlined in my thesis (a kind of manual for Embryo is given in Chapter 6).

The three examples included should give an idea of what can be done, although I will upload more in due course as these only scratch the surface. Getting Embryo to work with Galapagos proved to be a bit of a challenge. The example included in the zip only shows a simple combinatorial problem that can be solved with Embryo, but the potential to find new parametric definitions for existing geometry is an exciting one.

Please note that there are some known bugs. For example, attempting to delete the component whilst active will crash Grasshopper, an event that I haven't been able to deal with yet. Also, I would advise not creating more than 1,000 components if you can help it!

One final point - I am not a software engineer and nor do I want to become one. Embryo should be seen as an idea more than a polished piece of software, but I'm curious to see if anyone cares or can use it in a meaningful way.

I will put the source up on git in due course if anyone is interested in how to manipulate components on the canvas and the suchlike, or branching to create their own Embryos.

Copyright 2015 John Harding and released under the GNU General Public License

(typical Embryo setup with random input)

(using gene pools and galapagos)

(component list)

Load Previous Replies
  • up

    Daniel González Abalde

    Hi John,
    Thank you for your fascinating work. Some considerations:


    1. How can I pick up the curve geometry type? The GetGeometry component seems does not to want help me.
    2. When you do not use the override random, the workflow is fucking hard. I understand the scheme topology/function, but is difficult to handle. Could you, when you can, publish some example more about this?.
    3. Would it not be possible (and easy) adding a component that blocks the use of a parameter? That is, in the ingredients, inserting a component to the inputs that will not be used (and not considered by the topology).

    4. Would it be useful to add a couple of components that act as magnets to add probabilities of connection between two components? That is, between output of a component of the ingredients, and the input of another component.
    5. Would it be possible to add groups of connected components, rather than individual components in the ingredients? It's a nuisance having to individually deduct the map of connections. It would be nice to have the option of using a piece of definition as a component itself.
    6. Why you have implemented this topology/function format? Did you take into consideration do with tree-path format? But I do not really know what I'm talking about.
    7. Can you establish a list of intervals, rather than a single possible for the sliders domain?

    It was cool to get into that, although I have seen just a little your thesis, some of my neurons have been exploited by overheating. Thank you, what do you currently do?

    3
    • up

      enrique soriano

      Congratulations. SciFi

      1
      • up

        Hairault

        Hi John !

        The division between metric, topology and function genes looks incredible, I've been looking for this kind of plug-in for Grasshopper for 6 months...

        Have you tried to combine it with Octopus / Octopus Explicit ? It uses genetic algorithms but as all the crossover/mutation operators are components (in the explicit version) it should be easy to adapt them to Embryo !

        http://www.grasshopper3d.com/group/octopus

        http://www.food4rhino.com/project/octopusE?etx

        Looking forward to test it

        1