2026 年"认证杯"数学中国数学建模网络挑战赛--C 题智能增材制造






# appdx_code.pyimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport jsonfrom scipy.spatial.distance import squareformimport randomimport warningswarnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")# --- 1. 数据加载与预处理 ---def load_and_preprocess_data(): # 读取几何数据 df_geo = pd.read_csv('part_geometry.csv') # 读取距离关系数据 df_dist = pd.read_csv('local_geometry_relations.csv') # 读取机器参数 with open('machine_params.json', 'r') as f: machine_params = json.load(f) # 读取热参数 with open('thermal_params.json', 'r') as f: thermal_params = json.load(f) # 获取零件和层列表 layers = df_geo.groupby(['part_id', 'layer_id']) all_layers_data = {} for (part_id, layer_id), layer_geo in layers: cells = layer_geo['cell_id'].tolist() N = len(cells) scan_lengths = layer_geo.set_index('cell_id')['scan_length_mm'].to_dict() # 构建距离矩阵 dist_matrix = np.zeros((N, N)) layer_dist = df_dist[(df_dist['part_id'] == part_id) & (df_dist['layer_id'] == layer_id)] for _, row in layer_dist.iterrows(): i = cells.index(row['cell_i']) j = cells.index(row['cell_j']) dist_matrix[i, j] = row['travel_distance_mm'] all_layers_data[(part_id, layer_id)] = { 'cells': cells, 'N': N, 'scan_lengths': scan_lengths, 'dist_matrix': dist_matrix, 'coords': layer_geo[['x_mm', 'y_mm']].values } return all_layers_data, machine_params, thermal_params# --- 2. 路径评价函数 (问题1 & 2) ---def evaluate_path(path, cells, scan_lengths, dist_matrix, machine_params, thermal_params): N = len(path) v_s = machine_params['scan_speed_mm_per_s'] v_t = machine_params['travel_speed_mm_per_s'] t_delay = machine_params['laser_on_delay_s']
2.1 问题1的分析
问题1要求在单层内为给定的若干扫描单元确定一个访问顺序,以最小化总打印时间。总打印时间由三部分构成:所有单元内部的有效扫描时间、单元之间的空走时间、以及激光开启等固定延迟时间。由于每个单元的有效扫描长度是固定的,因此有效扫描时间是一个常数。问题的核心在于最小化空走时间,即最小化访问所有单元的路径总长度(或总时间)。
这个问题在数学上可以抽象为经典的旅行商问题(Traveling Salesman Problem, TSP),即在给定的城市(扫描单元)和两两城市间的距离(空走距离或时间)下,找出一条访问每个城市恰好一次并返回起点的最短路径。但与传统TSP不同的是:
·我们只需要访问所有单元,不一定需要返回起点(除非设备有要求),这是一个**哈密顿路径(Hamiltonian Path)**问题。
·"距离"的定义不仅仅是欧氏距离,而是设备实际运动的空走距离。
·需要考虑起止点规则、单元内部的扫描方向固定等约束。
这是一个典型的NP-hard组合优化问题,随着单元数量的增加,解空间呈指数级增长。对于本题中零件A的38-39个单元,精确求解是可行的,但为了模型的通用性和可扩展性,我们采用元启发式算法 ,如遗传算法(Genetic Algorithm, GA) 或**蚁群算法(Ant Colony Optimization, ACO)**进行高效求解。
2.2 问题2的分析
问题2要求建立一个热积累风险评估模型。赛题给出了一个简化的热影响公式 。这个公式表明,先前扫描的单元i对后续扫描单元 j的热贡献,随时间间隔的增大呈指数衰减,随空间距离的增大也呈指数衰减。
我们需要基于这个公式,定义一个能够综合评估整条扫描路径热风险的标量指标(Scalar Metric)。这个指标需要能够刻画"局部过热"(某些单元的热影响远高于其他)和"热分布不均匀"(各单元热影响的差异大)。
基于附件thermal_params.json的建议,我们可以考虑以下风险指标:
1.峰值暴露(Peak Exposure):所有扫描单元在各自扫描时刻所承受的累积热影响的最大值,。该指标直接反映了最严重的局部过热风险。
2.平均暴露(Mean Exposure):所有单元累积热影响的平均值,。反映了整体的热量输入水平。
3.超限单元数(Exceedance Count):累积热影响超过某个临界值H_{crit} 的单元数量。赛题中给出了 ,该指标反映了高风险的区域范围。
4.暴露方差(Exposure Variance):。该指标可以刻画热分布的不均匀性。
我们可以将这些指标进行归一化后,通过加权组合形成一个综合热风险评分(Composite Thermal Risk Score),以便于不同扫描策略之间的比较和后续的优化。