Saturday, 6 April 2013

Volatile Territories

Over the past couple months I've been gearing up for Smart Geometry 2013 which is taking place at the Bartlett/UCL in a little over a week. I'll be running a cluster this year alongside Bruce Davison and Elizabeth Tweedale entitled Volatile Territories. Here's a brief description straight from the cluster page:

"Volatile Territories will explore speculative urban design solutions through the self-organization of spatial boundaries within a set of hypothetical, yet measurable, political, economic and technological constructs."

Most of the preparatory work has revolved around establishing a line of communication between a few different software platforms that we'll be providing. Those who've been following along with the last few posts may have already guessed that one of those platforms is an expansion of my recent thesis work on multi-agent space planning. Here's a look at the tool in its current state.




Below are some screen grabs of an output test in Rhino which we'll be using as a handy middle man of sorts. Importing is handled through Grasshopper which spits out the floor space belonging to each agent and an isosurface defining their respective territories. The latter proved to a be a but of a tricky endeavor since the marching cubes algorithm had to be generalized to handle any number of spatial regions rather than just inside or outside a single threshold. Hopefully it won't have been in vain and we'll be able to do some colour 3d prints during the workshop.


















Platforms: Java, Processing, C#, Grasshopper, Rhino

Tuesday, 22 January 2013

Pheromone Targets

In the previous post I went over some recent work on a multi-agent approach to space planning. I mentioned "pheromone targets" as the basis for agent decision-making without going into much detail on what a pheromone actually is so I figured I'd follow up with a bit of necessary unpacking.

In the context of this model, pheromone concentration refers to a three dimensional rgb value held by each node in the network. This value is under constant modification as nodes participate in ongoing pheromone diffusion by pulling their own concentration towards that of their immediate neighbors. Through diffusion, pheromones propagate through space acting as a communication medium amongst a population of agents.

Similarly, a pheromone target is a three dimensional rgb value held by each agent that informs which node an agent decides to occupy or release at each step. If an agent hasn't reached its spatial quota, it evaluates all unoccupied nodes that lie adjacent to its current territory by comparing their pheromone concentration to its own pheromone target. The node with smallest deviation is then chosen. If an agent already has enough nodes, it evaluates each node it has accumulated in the same way before releasing the one with the largest pheromone deviation.




Pheromone targets also determine how an agent goes about modifying its local environment. Each agent pulls the pheromone concentration of all owned nodes towards its pheromone target, essentially "painting" its portion of the node network with its preferred colour. Through diffusion, other agents within the system are able to sense these changes - encouraging compatible ones (those with similar targets) to occupy space next door and the incompatible ones to settle elsewhere. To give a better sense of compatibility within an agent population, their pheromone targets can be plotted in rgb space as seen above.

Below is a look at two distinct families of agents in action. One family has pheromone targets in the cyan range while the other prefers concentrations in the magenta range. Adjacencies form within each family but the two remain distinctly separate, occupying opposite corners of the bounding volume.




The next video introduces pheromone sources as a means of templating external influences. Nodes along opposite faces of the bounding volume pull their own pheromone concentration towards white and black respectively. The gradient produced could represent the transition from public to private as imposed by a hypothetical context for example.




The final video below elaborates further on this idea of templating external influences by removing certain nodes from the network through volumetric masking. Agents are thus constrained to a subset of the total volume as they develop their territories.




Platforms: Eclipse, Processing

Friday, 18 January 2013

Thecal Matter

The last few months I've been more than a bit preoccupied with thesis work so the blog has suffered from some serious neglect. I'm sorry blog. Having defended last week though, I'm ready to get back in the swing of things and what better way to start than posting some of the fruits of my labour. Ripeness not guaranteed.

In short, my work centered on the development of bottom-up space planning software - borrowing mechanisms of self-organization from ants, termites, slime moulds and other social organisms to solve spatial adjacencies amongst elements of a given programmatic brief. The model treats each programmatic element as an autonomous agent whose goal is to territorialize some portion of a shared three dimensional node network. Agents communicate indirectly through the modification of this mutual environment via virtual "pheromones". Each agent both pursues and emits a specific pheromone concentration or "target" in its occupation of space. As such, agents with similar targets congregate while those with disparate targets avoid each other as they expand and refine their respective territories.




In due time, adjacencies between compatible programs self-organize producing an informed schematic design solution. The trick lies in defining compatibility ie. determining the appropriate pheromone target of each element in the programmatic brief. For now I've left this up to manual input - targets can be changed in real time if space is settling in undesirable ways. Moving forward however, I'd be interested in giving the agents the ability to refine their own targets if they find themselves in uncomfortable configurations.

In any case, spatial organization becomes the emergent product of a competitive ecology - agents negotiate with one another, carving out their own niches within a finite volume. The task of space planning, one that is typically carried out by a singular high-level decision-maker (aka the architect), is handed off to the distributed decision-making of low-level collective intelligence - a common approach to solving problems that exceed a certain level of complexity. Much like the slime mould mentioned a few posts back, the individuals of this collective brain are quite stupid - following only the simplest of rules - yet the result of their collective efforts can be remarkably clever.

Platforms: Eclipse, Processing

Friday, 14 September 2012

Woolier Paths

It was recently brought to my attention that my old wooly paths definition no longer works with the latest version of Grasshopper (0.9+) so I thought I'd take the opportunity to include some improvements in the update which you can grab here.




For one, paths now have bending resistance which helps considerably avoid tangling. Attractive forces between threads have also been reworked in an effort to keep positive feedback in check. Hopefully explosive spaghetti is a problem of the past. If anyone stumbles upon any bugs let me know and I'll do my best to exterminate.

dave.Out();








Platforms: C#, Grasshopper, Rhino

Tuesday, 19 June 2012

Mouldy Networks

Physarum polycephalum is a type of slime mould with a certain knack for graph theory. Like most of us, the organism spends the majority of its life searching for something to eat. Unlike us however, it has the ability to exploit multiple food sources simultaneously. Upon discovering a number of edible options within it's environment, the Physarum constructs remarkably efficient transport networks between them as a means of distributing nutrients amongst its many nuclei. By way of this special talent, the brainless amoeba has managed to offer up some pointers to infrastructure engineers in recent years.

It's misleading to talk about Physarum as a singular entity however. The mould's apparent design intelligence isn't the product of a singular higher level brain. Rather it is an ecological property of many lower level decision-making entities acting in parallel. It is a classic example of decentralized problem solving. The Physarum's infrastructure emerges from local interactions amongst it's nuclei population - none of which have any idea of the global state of the system they belong to. While the specific details of these local interactions are beyond my limited knowledge of biology, as it turns out modelling them isn't so different from the chemotaxis based multi-agent systems that I've been playing with recently.




The above is based on a multi-agent approximation of Physarum network formation put forward by Jeff Jones in his paper "Characteristics of Pattern Formation and Evolution in Approximations of Physarum Transport Networks". What is most interesting about Jones's approach is the complexity differential between the agent behaviors and their emergent output. Once again agent interaction is strictly indirect. They communicate only through detection and deposition of "pheromone" gradients within their shared environment. The decision-making routines themselves are surprisingly discrete - each agent samples in 3 forward biased locations and picks only the one with the highest pheromone concentration to move towards. With a large enough population of agents however, this behaviour produces self-minimizing networks similar to those seen amongst the organism they aim to emulate. 

In implementing it myself in Processing, I've stayed mostly true to the source material. Where I did deviate a bit was in making the agent's sampling routine less discrete. Each of the 3 pheromone samples play into a weighted vector sum that determines the agent's new heading. I also added a foraging behaviour where each agent seeks out regions of low pheromone concentration rather than high (00:09).
















Platforms: Processing