latentspace.

Analysis of Apt state-spaces

Objectives

This analysis aims to develop a prototype for deriving the apartment layout starting point for the street housing maintenance project (가로주택정비사업) solution called LBDeveloper (at Spacewalk). The plots under analysis and the corresponding layout analysis are visualized in the images below. A further objective is to define the parameters and the range of each parameter used to optimize the apartment complex layout.

Objectives Objectives Objectives
Objectives Objectives Objectives
Objectives Objectives Objectives
Plots to analyze and visualized layout analysis


Axes rules

Because the orientation of street houses must account for the south-facing of all units, the orientation and the placement axis can be treated separately. The array axes are therefore divided broadly into the following:
The rules governing the array axes, derived from the layout analysis, are as follows:

Parameterize


Parameter Type Range
param_axis discrete 0, 1, 2, 3, 4
param_axis_count discrete 1, 2
param_axis_flip discrete 0, 1
param_axis_positions continuous [0 ~ 1] * param_axis_count
param_south_facing_degree discrete 0, 1, 2 ... len(SOUTH_FACING_DEGREE_LIST)
param_offset_distance discrete 0, 1, 2 … len(SITE_BOUNDARY_OFFSET_DISTANCE_LIST)
param_building_positions continuous Refer the get_param_building_positions function
param_building_positions_count discrete Refer the get_param_building_positions function


Parameter descriptions:
State spaces by randomly distributed parameters
State spaces by randomly distributed parameters

Parameters definition:

    class Parameters:
        # Enums.LONGEST_ARRAY_AXIS, 
        # Enums.BOUNDARIES_ARRAY_AXIS
        # Enums.FULL_SOUTH_ARRAY_AXIS
        param_axis = random.randint(0, 2)
        
        # whether flip or not flip when the longest axis selected
        param_axis_flip = random.randint(0, 1)
        param_axis_count = random.randint(1, 2)
            
        @staticmethod
        def get_param_axis_positions(param_axis_count):
            return [random.random() for _ in range(param_axis_count)]
        
        @staticmethod
        def get_param_building_positions(array_axis):
            param_building_positions = []
                    
            for ax in array_axis:
                param_building_positions_count = 1
                
                ax_length = ax.GetLength()
                if ax_length >= Consts.ARRAY_AXIS_LENGTH_BASELINE_HIGHEST:
                    param_building_positions_count = random.randint(2, 3)
                    
                elif ax_length >= Consts.ARRAY_AXIS_LENGTH_BASELINE_MIDDLE:
                    param_building_positions_count = random.randint(1, 2)
                
                each_positions = [
                    random.random() for _ in range(param_building_positions_count)
                ]
                
                param_building_positions.append(each_positions)
            
            return param_building_positions
        
        @staticmethod
        def get_param_south_facing_degree(array_axis):
            param_south_facing_degree = [
                random.randrange(0, len(Consts.SOUTH_FACING_DEGREE_LIST))
                for _ in array_axis
            ]
            
            return param_south_facing_degree
            
        @staticmethod
        def get_param_offset_distance(axis_offset):
            param_offset_distance = [
                random.randrange(
                    0, len(Consts.SITE_BOUNDARY_OFFSET_DISTANCE_LIST)
                ) for _ in axis_offset
            ]
            
            return param_offset_distance


Searching placement starting points

1. Creation sequence of Enums.LONGEST_ARRAY_AXIS
2. Creation sequence of Enums.BOUNDARIES_ARRAY_AXIS
3. Creation sequence of Enums.FULL_SOUTH_ARRAY_AXIS
4. Creation sequence of Enums.N_DEGREE_SOUTH_FACING_ARRAY_AXIS
5. Creation sequence of Enums.N_DEGREE_SOUTH_FACING_ARRAY_AXIS