增加单机优化方法
This commit is contained in:
@ -1,11 +1,9 @@
|
||||
import random
|
||||
|
||||
from optimizer_common import *
|
||||
from base_optimizer.optimizer_common import *
|
||||
|
||||
|
||||
def load_data(filename: str, load_cp_data=True, load_feeder_data=True, component_register=False):
|
||||
# 锁定随机数种子
|
||||
random.seed(0)
|
||||
def load_data(filename: str, default_feeder_limit=1, load_cp_data=True, load_feeder_data=True, cp_auto_register=False):
|
||||
|
||||
# 读取PCB数据
|
||||
filename = 'data/' + filename
|
||||
@ -28,44 +26,43 @@ def load_data(filename: str, load_cp_data=True, load_feeder_data=True, component
|
||||
# pcb_data["x"] = pcb_data["x"].apply(lambda x: -x)
|
||||
|
||||
# 注册元件检查
|
||||
component_data = None
|
||||
if load_cp_data:
|
||||
part_feeder_assign = defaultdict(set)
|
||||
part_col = ["part", "desc", "fdr", "nz", 'camera', 'group', 'feeder-limit']
|
||||
try:
|
||||
component_data = pd.DataFrame(pd.read_csv(filepath_or_buffer='component.txt', sep='\t', header=None), columns=part_col)
|
||||
except:
|
||||
part_feeder_assign = defaultdict(set)
|
||||
part_col = ["part", "desc", "fdr", "nz", 'camera', 'group', 'feeder-limit']
|
||||
try:
|
||||
if load_cp_data:
|
||||
component_data = pd.DataFrame(pd.read_csv(filepath_or_buffer='component.txt', sep='\t', header=None),
|
||||
columns=part_col)
|
||||
else:
|
||||
component_data = pd.DataFrame(columns=part_col)
|
||||
for _, data in pcb_data.iterrows():
|
||||
part, nozzle = data.part, data.nz.split(' ')[1]
|
||||
slot = data['fdr'].split(' ')[0]
|
||||
except:
|
||||
component_data = pd.DataFrame(columns=part_col)
|
||||
|
||||
if part not in component_data['part'].values:
|
||||
if not component_register:
|
||||
raise Exception("unregistered component: " + component_data['part'].values)
|
||||
else:
|
||||
component_data = pd.concat([component_data,
|
||||
pd.DataFrame([part, '', 'SM8', nozzle, '飞行相机1', 'CHIP-Rect', 0],
|
||||
index=part_col).T], ignore_index=True)
|
||||
# warning_info = 'register component ' + part + ' with default feeder type'
|
||||
# warnings.warn(warning_info, UserWarning)
|
||||
part_index = component_data[component_data['part'] == part].index.tolist()[0]
|
||||
part_feeder_assign[part].add(slot)
|
||||
for _, data in pcb_data.iterrows():
|
||||
part, nozzle = data.part, data.nz.split(' ')[1]
|
||||
slot = data['fdr'].split(' ')[0]
|
||||
|
||||
if nozzle != 'A' and component_data.loc[part_index]['nz'] != nozzle:
|
||||
warning_info = 'the nozzle type of component ' + part + ' is not consistent with the pcb data'
|
||||
warnings.warn(warning_info, UserWarning)
|
||||
if part not in component_data['part'].values:
|
||||
if not cp_auto_register:
|
||||
raise Exception("unregistered component: " + component_data['part'].values)
|
||||
else:
|
||||
component_data = pd.concat([component_data, pd.DataFrame(
|
||||
[part, '', 'SM8', nozzle, '飞行相机1', 'CHIP-Rect', default_feeder_limit], index=part_col).T],
|
||||
ignore_index=True)
|
||||
# warning_info = 'register component ' + part + ' with default feeder type'
|
||||
# warnings.warn(warning_info, UserWarning)
|
||||
part_index = component_data[component_data['part'] == part].index.tolist()[0]
|
||||
part_feeder_assign[part].add(slot)
|
||||
|
||||
for idx, data in component_data.iterrows():
|
||||
if data['fdr'][0:3] == 'SME': # 电动供料器和气动供料器参数一致
|
||||
component_data.at[idx, 'fdr'] = data['fdr'][0:2] + data['fdr'][3:]
|
||||
if nozzle != 'A' and component_data.loc[part_index]['nz'] != nozzle:
|
||||
warning_info = 'the nozzle type of component ' + part + ' is not consistent with the pcb data'
|
||||
warnings.warn(warning_info, UserWarning)
|
||||
|
||||
for part, slots in part_feeder_assign.items():
|
||||
part_index = component_data[component_data['part'] == part].index.tolist()[0]
|
||||
component_data.at[part_index, 'feeder-limit'] = max(len(slots), component_data.at[part_index, 'feeder-limit'])
|
||||
for idx, data in component_data.iterrows():
|
||||
if data['fdr'][0:3] == 'SME': # 电动供料器和气动供料器参数一致
|
||||
component_data.at[idx, 'fdr'] = data['fdr'][0:2] + data['fdr'][3:]
|
||||
|
||||
# 读取供料器基座数据
|
||||
feeder_data = pd.DataFrame(columns=range(3))
|
||||
feeder_data = pd.DataFrame(columns=['slot', 'part', 'arg']) # arg表示是否为预分配,不表示分配数目
|
||||
if load_feeder_data:
|
||||
for data in pcb_data.iterrows():
|
||||
fdr = data[1]['fdr']
|
||||
@ -75,7 +72,6 @@ def load_data(filename: str, load_cp_data=True, load_feeder_data=True, component
|
||||
slot = int(slot[1:]) if slot[0] == 'F' else int(slot[1:]) + max_slot_index // 2
|
||||
feeder_data = pd.concat([feeder_data, pd.DataFrame([slot, part, 1]).T])
|
||||
|
||||
feeder_data.columns = ['slot', 'part', 'arg'] # arg表示是否为预分配,不表示分配数目
|
||||
feeder_data.drop_duplicates(subset='slot', inplace=True, ignore_index=True)
|
||||
# 随机移除部分已安装的供料器
|
||||
if load_feeder_data == 2:
|
||||
@ -83,7 +79,7 @@ def load_data(filename: str, load_cp_data=True, load_feeder_data=True, component
|
||||
feeder_data.drop(index=drop_index, inplace=True)
|
||||
|
||||
feeder_data.sort_values(by='slot', ascending=True, inplace=True, ignore_index=True)
|
||||
else:
|
||||
feeder_data.columns = ['slot', 'part', 'arg'] # 同上
|
||||
|
||||
# plt.scatter(pcb_data["x"], pcb_data["y"])
|
||||
# plt.show()
|
||||
return pcb_data, component_data, feeder_data
|
||||
|
Reference in New Issue
Block a user