增加了HSMO整线优化方法,读取数据增加了供料器部分

This commit is contained in:
2025-08-10 16:58:42 +08:00
parent 045f2f394d
commit 4fd5560650
17 changed files with 1765 additions and 352 deletions

View File

@@ -73,9 +73,9 @@ class DataMgr:
lineinfo += '\t' + '{:.3f}'.format(pcb_data['x'].max() - pcb_data['x'].min()) + '\t' + '{:.3f}'.format(
pcb_data['y'].max() - pcb_data['y'].min())
# part_position = defaultdict(list)
# for _, data in pcb_data.iterrows():
# part_position[data['part']].append([data['x'], data['y']])
part_position = defaultdict(list)
for _, data in pcb_data.iterrows():
part_position[data['part']].append([data['x'], data['y']])
point_counter, component_counter = 0, 0
nozzle_type = set()
@@ -94,8 +94,8 @@ class DataMgr:
if data.points == 0:
continue
lineinfo += '\t' + data.part + '\t' + data.nz + '\t' + str(data.points)
# lineinfo += '\t' + '{:.3f}'.format(np.ptp([pos[0] for pos in part_position[data.part]]))
# lineinfo += '\t' + '{:.3f}'.format(np.ptp([pos[1] for pos in part_position[data.part]]))
lineinfo += '\t' + '{:.3f}'.format(np.ptp([pos[0] for pos in part_position[data.part]]))
lineinfo += '\t' + '{:.3f}'.format(np.ptp([pos[1] for pos in part_position[data.part]]))
lineinfo += '\n'
file_handle.write(lineinfo)
@@ -173,7 +173,7 @@ class DataMgr:
return data
def heuristic_objective(self, cp_points, cp_nozzle):
if len(cp_points.keys()) == 0:
if len(cp_points.keys()) or sum(cp_points.values()) == 0:
return 0, 0, 0, 0
nozzle_heads, nozzle_points = defaultdict(int), defaultdict(int)
for idx, points in cp_points.items():
@@ -417,18 +417,18 @@ class DataMgr:
# assembly time data
time_data.append(float(items[0]))
cp_data.append([cp_points, cp_nozzle, board_width, board_height])
cp_data.append([cp_points, cp_nozzle, board_width, board_height, cycle, nozzle_change_data, pickup_data])
line = file.readline()
if data_filter:
cph_data = [point_data[idx] / time_data[idx] * 3600 for idx in range(len(time_data))]
# cph_data = [point_data[idx] / time_data[idx] * 3600 for idx in range(len(time_data))]
w_quart = 0.6
Q1, Q3 = np.percentile(np.array(cph_data), 25), np.percentile(np.array(cph_data), 75)
w_quart = 0.3
Q1, Q3 = np.percentile(np.array(time_data), 25), np.percentile(np.array(time_data), 75)
indices = [i for i in range(len(cph_data)) if
Q1 - w_quart * (Q3 - Q1) <= cph_data[i] <= Q3 + w_quart * (Q3 - Q1)]
indices = [i for i in range(len(time_data)) if
Q1 - w_quart * (Q3 - Q1) <= time_data[i] <= Q3 + w_quart * (Q3 - Q1)]
filter_cp_data, filter_time_data = [], []
for idx in indices:
@@ -465,8 +465,8 @@ class DataMgr:
def neural_encode(self, input_data):
train_data = []
for cp_points, cp_nozzle, board_width, board_height in input_data:
train_data.append(self.encode(cp_points, cp_nozzle, board_width, board_height))
for cp_points, cp_nozzle, board_width, board_height, cy, nz, pu in input_data:
train_data.append(self.encode(cp_points, cp_nozzle, board_width, board_height, cy, nz, pu))
return train_data
def get_feature(self):