CJ Price

Module 6 Overview

The two new metrics I decided to evaluate were:

  1. Value per square foot
  2. Directness of view to two objects

I chose these two metrics because they represent value to the owner and the tenant, respectively. Value per square foot is important to the owner, and directness of view is important to the tenants. Therefore, I felt these two metrics gave a well-rounded representation of the building’s value.

The two inputs I flexed were the middle polygon’s height and the top polygon’s rotation. The first screenshot below shows the original building form. The second screenshot shows the recommended building form.

Original Building Form -                                          Middle Height: 300ft          Top Rotation: 45 degrees
Original Building Form - Middle Height: 300ft Top Rotation: 45 degrees

Recommended Building Form -                         Middle Height: 450ft     Top Rotation: 45 degrees
Recommended Building Form - Middle Height: 450ft Top Rotation: 45 degrees

Discussion of Dynamo Code

Below is a screenshot of my code, with the main custom node in orange. The structure of my code is very similar to what it was in Module 5. In the bottom left, I included additional inputs for the locations of two objects of interest. The custom node in orange has also been updated two output my two new metrics (along with the original three metrics).

Overall View of Code
Overall View of Code

Again, I decided to flex the middle polygon’s height and the top polygon’s rotation. The values I cycled through can be seen in the light blue group.

Close-Up of Code
Close-Up of Code

Close-Up of Code
Close-Up of Code

As I will explain further down, each of the two objects has a “Desirability Factor”, which determines how influential each object will be on the total Directness of View Score.

Close-Up of Code
Close-Up of Code

Most of my work this week went into creating this new custom node. A more in depth explanation of how it works can be found below.

Close-Up of Code
Close-Up of Code

Close-Up of Code
Close-Up of Code

This is an overview of the main custom node. The overall layout is very similar to the custom node I created in Module 5. The differences can be seen in the bottom third of this screenshot, where I calculate the two new metrics.

Tower_Polygon_With_New_Metrics Custom Node Overview
Tower_Polygon_With_New_Metrics Custom Node Overview

Tower_Polygon_With_New_Metrics Custom Node Close-Up
Tower_Polygon_With_New_Metrics Custom Node Close-Up

To compute the total directness of view score, I panelized the wall surfaces using a custom node BuildingForm_PanelizeWallSurfaces, and then I computed the directness of view score for each object using custom nodes Panels_ComputeDirectnessToObject. Then, I added these two separate scores to compute the total directness of view score.

Tower_Polygon_With_New_Metrics Custom Node Close-Up
Tower_Polygon_With_New_Metrics Custom Node Close-Up

As seen in the fourth output value, I computed the value by floor area using a custom node BuildingForm_ComputeValueByFloorArea. I will explain this in more detail below.

Tower_Polygon_With_New_Metrics Custom Node Close-Up
Tower_Polygon_With_New_Metrics Custom Node Close-Up

This is a screenshot of the BuildingForm_PanelizeWallSurfaces custom node. I first select the wall surfaces of my building, and then I panelize them using PanelQuad.

BuildingForm_PanelizeWallSurfaces Custom Node Overview
BuildingForm_PanelizeWallSurfaces Custom Node Overview

This is a screenshot of the Panels_ComputeDirectnessToObject custom node. I take my panelized surfaces and compute the panel center points and normals. I then create a vector from the center of my building to the object of interest. Using a dot product, I compute the strength of directness to the object. Finally, I scale the directness score by the desirability factor input. In the case that one object is much more desirable than the other, this allows you to make the more desirable object more heavily influence the total directness of view score.

Panels_ComputeDirectnessToObject Custom Node Overview
Panels_ComputeDirectnessToObject Custom Node Overview

This is a screenshot of the BuildingForm_ComputeValueByFloorArea custom node. Instead of using a linear equation like the example on Canvas, I decided to have a more curved value function (as seen in the chart below). I believe in reality, the value per square foot will not change significantly from the first floor to the second, but there will be a big difference between the 59th and 60th floors. Therefore, this curved value function is more representative of reality.

BuildingForm_ComputeValueByFloorArea Custom Node Overview
BuildingForm_ComputeValueByFloorArea Custom Node Overview

Graph of Value Function Used in BuildingForm_ComputeValueByFloorArea Custom Node
Graph of Value Function Used in BuildingForm_ComputeValueByFloorArea Custom Node

Single-Objective Optimization Scheme

Below is my chart of the results. I ran 36 total trials, flexing two inputs and outputting 5 different metrics. Once this chart was generated, I needed to decide how to combine these outputs into a useful score. I ultimately computed the overall building score using this formula:

(min surface area / actual surface are) + (actual value by floor area / max value by floor area) + (actual directness of view score / max directness of view score)

I chose to only include these three metrics because they represent the following:

  1. Minimizing surface area increases building performance/energy efficiency
  2. Maximizing value by floor area helps the owner
  3. Maximizing directness of view helps the tenants

Using one metric each that focuses on energy efficiency, the owner, and tenants felt like a fair and well-rounded way of evaluating the ‘best’ building. I excluded the floor area metric because floor area was already accounted for in the value metric, and I excluded volume because the floor-to-floor height and overall building height were already determined, so volume and surface area would change in similar ways. Therefore, these two extra metrics would have been redundant.

I decided to normalize each of the three included metrics by their maximum or minimum values as a way to compare the trials to one anther. I also decided to weight the three metrics evenly because I feel they are equally important to the overall building score. Therefore, the maximum building score is a 3 (with the maximum for each of the three metrics being a 1). Once I calculated the building score for each of the 36 trials, I sorted the data table by the building score, which clearly shows the top 3 trials. They are as follows:

Top Choice - Middle Height: 450 Top Rotation: 45 degrees Overall Building Score: 2.8177

Tied for Second - Middle Height: 450 Top Rotation: 40 degrees Overall Building Score: 2.8158

Tied for Second - Middle Height: 450 Top Rotation: 50 degrees Overall Building Score: 2.8158

Choosing the top recommendation was fairly easy - it had the highest score. It had a slightly larger surface area than the second and third options, but a higher total value.

One interesting note is that the directness of view score remains constant for each of the 36 trials. I looked at the code extensively but cannot find an error. I supposed it is possible that it is functioning correctly and really does remain constant, but I suspect something is not functioning quite right. I just have no idea what it is. Otherwise, I am very happy with my building score calculation, and I feel that my top recommendation is representative of my goals.

Table of Results
Table of Results