Theater sightlines
C - Value 馃憖
When watching a performance in a theater, visual discomfort often occurs when the person seated in front blocks part of the stage.
C-Value is a quantitative index used to evaluate this
viewing quality. This project
evaluates and
optimizes viewing quality in theaters numerically using Galapagos and ghPython.
To evaluate the fitness, a
state space was designed based on predefined parameters and constants. A state space is equivalent in concept to a parametric model.
It is a parametric model in which the state of the model can be scored according to its current parameters.
Designing the state space
From the left, C - Value 路 State space
Set constraints
Optimization without constraints is rarely meaningful in architectural design, so constraints were introduced to specify the scope of the exploration.
The aim was to derive the
optimal C-Value within these limits by setting the ceiling height of the theater and the width of the stairs as constraints.
Set constraints
From the left,
Ceiling constraint 路
Step constraint
The C-Value is determined by the width and height of the stairs. Without the constraints described above, the optimizer tends to produce steep and narrow steps, since such geometry can easily improve the visibility score, even though these solutions would be unrealistic in terms of usability and safety.
For this reason, an
exception handling conditional statement is required within the state space.
Since the purpose of this project is to
maximize the C-Value, the state space was configured to
return a very low score when the constraints are violated.
Evaluating the state space
Based on the predefined constraints and the penalty score returned when the constraints are violated, the C-Value, which serves as the
fitness(or objective) of the project, was evaluated for each state space.
The
C-Value is evaluated by measuring the distance between two sight points, and Galapagos is used in place of an explicit genetic algorithm implementation.
Calculating the C-Value for each state space
def calculate_cvalue(self):
"""calculating C-Value of current state space"""
curr_ceil_height = self.calculate_ceil_height()
curr_step_width = self.calculate_step_margin()
sight_elements = self.generate_sight()
cal_crv = sight_elements[0]
cal_pt_1 = sight_elements[1]
cal_vect = Point(0,0,1).generate_point()
cal_line = gh.LineSDL(cal_pt_1, cal_vect, 30)
cal_pt_2 = gh.CurveXLine(rs.coercecurve(cal_crv), cal_line)[0][1]
if curr_ceil_height == 0 or curr_step_width == 0:
cvalue = 0
else:
cvalue = rs.Distance(cal_pt_1, cal_pt_2) * self.SCALE
return round(cvalue, 1)
Record & Result
The Galapagos
record shown below illustrates how the C-Value increases with each generation.
C-Value at each generation
In this project, the optimal value could be inferred intuitively. The primary aim was to verify whether it is possible to define the desired constraints and
explore in the desired direction.
For this reason, the exploration scope of the parameters was deliberately extended beyond what was strictly necessary. The source code for this project is available at this
link.
C-Value standard