File size: 4,027 Bytes
3cf288d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import enum
import datetime
# enum classes
class ArchStyles(enum.Enum):
    New_York = 1
    Human_Centered_AI = 2
    Customized = 3
class ParcelType(enum.Enum):
    O = 0 # oversize
    A = 1
    B = 2
    C = 3
    U = 4 # undersize

# main run input args
MAIN_MAP_ADDR = 'inputs/Sample_test120-70_total_map_fringe.bmp'
MAIN_MAP_FILLED_BLOCK_MASK = 'inputs/Sample_test120-70_boundry_mask_fringe.bmp'
MAIN_MAP_FILLED_F_F_MASK = 'inputs/Sample_test120-70_FiFa_mask_fringe.bmp'
PARCELS_COUNT = 12
ARCH = ArchStyles.Human_Centered_AI
ARCH_FIRST_INPUT = (44, 119) #(70, 120) #(Y,X) or None

# Axis finding args
VALID_POINT_DISTANCE = 10
ROAD_SIZE_MAX = 3 # can be: 1,3,5,7,...
ROAD_SIZE_MIN = 1 # can be: 1,3,5,...
ROAD_STEP = 2 # can be multiplication of 2

ACCESS_RATIO = 0.6 # 0.55 for newyork # 0.7 for star

AXIS_MIN_AREA = 1000 # 12000 for newyork # 75000 for star

FACILITY_SAFE_DIST = 2
TREE_SAFE_DIST = 1

# axis finder fitness weights
A_ACCESS_SPLIT_WEIGHT  = 1
A_AREA_SPLIT_WEIGHT = 1
A_FIXED_FACILITIES_WEIGHT = 1
A_CARBON_WEIGHT = 1

# Partitioning args
PROCESSING_CORES = 8

P_GA_LOSS_THOLD = 0.3

TYPE_A_AREA = 700
TYPE_B_AREA = 500
TYPE_C_AREA = 400

TYPE_AREA_STEP = 100

# partiotioning fitness weights
P_FF_WEIGHT = 2
P_AREA_WEIGHT = 2
P_TREE_WEIGHT = 1

# location finding args
BUILDING_ADDR = ['inputs/rectangle_6-15.bmp','inputs/rectangle_6-15.bmp','inputs/rectangle_6-15.bmp','inputs/white.bmp']
BUILDING_BORDER_GAP = 10

# location finding fitness weights
L_DIST_WEIGHT = 1
L_OUT_BORDER_WEIGHT = 2
L_CARBON_WEIGHT = 1
L_ON_ROAD_WEIGHT = 2

def building_sel(p_type:ParcelType):
    if p_type == ParcelType.O: return BUILDING_ADDR[0]
    if p_type == ParcelType.A: return BUILDING_ADDR[0]
    if p_type == ParcelType.B: return BUILDING_ADDR[1]
    if p_type == ParcelType.C: return BUILDING_ADDR[2]
    if p_type == ParcelType.U: return BUILDING_ADDR[3]

# output args and loggers
WRITE_UNNECESSARY = False
WRITE_LOGS = True
def log_axis_finding_settings():
    log(f'====== Axis Finding inputs ======')
    log(f'PARCELS_COUNT : {PARCELS_COUNT}')
    log(f'ARCH : {ARCH}')
    log(f'ARCH_FIRST_INPUT : {ARCH_FIRST_INPUT}')
    log(f'VALID_POINT_DISTANCE : {VALID_POINT_DISTANCE}')
    log(f'ROAD_SIZE_MAX : {ROAD_SIZE_MAX}')
    log(f'ROAD_SIZE_MIN : {ROAD_SIZE_MIN}')
    log(f'ROAD_STEP : {ROAD_STEP}')
    log(f'ACCESS_RATIO : {ACCESS_RATIO}')
    log(f'AXIS_MIN_AREA : {AXIS_MIN_AREA}')
    log(f'FACILITY_SAFE_DIST : {FACILITY_SAFE_DIST}')
    log(f'TREE_SAFE_DIST : {TREE_SAFE_DIST}')
    log(f'A_ACCESS_SPLIT_WEIGHT : {A_ACCESS_SPLIT_WEIGHT}')
    log(f'A_AREA_SPLIT_WEIGHT : {A_AREA_SPLIT_WEIGHT}')
    log(f'A_FIXED_FACILITIES_WEIGHT : {A_FIXED_FACILITIES_WEIGHT}')
    log(f'A_CARBON_WEIGHT : {A_CARBON_WEIGHT}')
def log_partitioning_settings():
    log(f'====== Partitioning inputs ======')
    log(f'PARCELS_COUNT : {PARCELS_COUNT}')
    log(f'PROCESSING_CORES : {PROCESSING_CORES}')
    log(f'P_GA_LOSS_THOLD : {P_GA_LOSS_THOLD}')
    log(f'TYPE_A_AREA : {TYPE_A_AREA}')
    log(f'TYPE_B_AREA : {TYPE_B_AREA}')
    log(f'TYPE_C_AREA : {TYPE_C_AREA}')
    log(f'TYPE_AREA_STEP : {TYPE_AREA_STEP}')
    log(f'P_FF_WEIGHT : {P_FF_WEIGHT}')
    log(f'P_AREA_WEIGHT : {P_AREA_WEIGHT}')
    log(f'P_TREE_WEIGHT : {P_TREE_WEIGHT}')
def log_location_finding_settings():
    log(f'====== Location Finding inputs ======')
    log(f'PARCELS_COUNT : {PARCELS_COUNT}')
    log(f'BUILDING_ADDR : {BUILDING_ADDR}')
    log(f'BUILDING_BORDER_GAP : {BUILDING_BORDER_GAP}')
    log(f'TYPE_A_AREA : {TYPE_A_AREA}')
    log(f'TYPE_B_AREA : {TYPE_B_AREA}')
    log(f'TYPE_C_AREA : {TYPE_C_AREA}')
    log(f'TYPE_AREA_STEP : {TYPE_AREA_STEP}')
    log(f'L_DIST_WEIGHT : {L_DIST_WEIGHT}')
    log(f'L_OUT_BORDER_WEIGHT : {L_OUT_BORDER_WEIGHT}')
    log(f'L_CARBON_WEIGHT : {L_CARBON_WEIGHT}')
    log(f'L_ON_ROAD_WEIGHT : {L_ON_ROAD_WEIGHT}')
def log(msg):
    if WRITE_LOGS:
        with open('./outputs/logs.txt', 'a') as f:
            f.writelines(f'{datetime.datetime.now()} : {str(msg)}\n')
    print(str(msg))