Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


#ActualÁlvaro

Posted 18 February 2013 - 02:17 PM

I would start by designing a few houses by hand. You will probably find that you are using some sort of algorithm, and if your introspection skills are good you might be able to program it.

The way I think of these problems is by looking at design as a top-down process. If someone gives you the boundaries of the house and you have to put rooms there, think of how you would divide the house into rooms, and then think of the design of each individual room later on. Similarly you may need code that turns the problem of designing a town into several instances of designing a neighborhood, a neighborhood into blocks, a block into buildings... This hierarchical approach divides the design process into manageable chunks.

A relevant classic paper in architecture is "A city is not a tree", by Christopher Alexander. The main thesis of the paper is that a purely hierarchical approach can never produce a reasonable city, because there are relationships between elements at the same level of detail. I believe one can avoid the difficulties described in the paper by incorporating enough context when dividing the design problem into sub-problems. For instance, instead of "design a kitchen in this space", the task would be "design a kitchen in this space that connects to the dining area through this door, to the pantry through this other door and which has a view of the river through this window". That's what I mean by "enough context".

If you think of one design step (e.g., house -> rooms) as having to fulfill a bunch of preferences, you can encode those preferences in a utility function that needs to be maximized. You can then use some approximate optimizer (e.g., simulated annealing) to find a desirable configuration. Your utility function can encode things like the undesirability of having to enter a dormitory through the bathroom.

You can try to stop the design-refinement process at some level, for instance by using pre-authored rooms. You can either inform how you design the house of what pre-authored rooms are available and just assemble them, or you can make your pre-authored rooms somewhat flexible so you can change a couple of parameters and adjust it to the room you want to make.

#1Álvaro

Posted 18 February 2013 - 02:15 PM

I would start by designing a few houses by hand. You will probably find that you are using some sort of algorithm, and if your introspection skills are good you might be able to program it.

The way I think of these problems is by looking at design as a top-down process. If someone gives you the boundaries of the house and you have to put rooms there, think of how you would divide the house into rooms, and then think of the design of each individual room later on. Similarly you may need code that turns the problem of designing a town into several instances of designing a neighborhood, a neighborhood into blocks, a block into buildings... This hierarchical approach divides the design process into manageable chunks.

A relevant classic paper in architecture is "A city is not a tree", by Christopher Alexander. The main thesis of the paper is that a purely hierarchical approach can never produce a reasonable city. I believe one can avoid the difficulties described in the paper by incorporating enough context when dividing the design problem into sub-problems. For instance, instead of "design a kitchen in this space", the task would be "design a kitchen in this space that connects to the dining area through this door, to the pantry through this other door and which has a view of the river through this window". That's what I mean by "enough context".

If you think of one design step (e.g., house -> rooms) as having to fulfill a bunch of preferences, you can encode those preferences in a utility function that needs to be maximized. You can then use some approximate optimizer (e.g., simulated annealing) to find a desirable configuration. Your utility function can encode things like the undesirability of having to enter a dormitory through the bathroom.

You can try to stop the design-refinement process at some level, for instance by using pre-authored rooms. You can either inform how you design the house of what pre-authored rooms are available and just assemble them, or you can make your pre-authored rooms somewhat flexible so you can change a couple of parameters and adjust it to the room you want to make.

PARTNERS