粒子群算法求解基于人因负荷和物流成本的车间布局优化问题 给定车间尺寸和各功能区大小设备间的间距大小使用粒子群算法求解得到功能区的位置将文件中的相关数据替换成自己的数据即可运行最近在搞车间布局优化的项目发现粒子群算法挺适合这类问题的。车间布局要考虑人机工程学指标和物流成本这两个指标就像跷跷板的两端——工人操作设备太密集容易疲劳但物流距离太长又增加成本。下面这个案例咱们用Python直接开干。先看车间布局的约束条件。假设车间是20m*15m的长方形需要摆放冲压区5x3m、焊接区4x4m、装配区6x4m三个核心区域。每个区域之间至少要留1.5m的安全通道这约束得在代码里硬编码进去。workshop_size (20, 15) area_sizes { stamping: (5, 3), welding: (4, 4), assembly: (6, 4) } min_distance 1.5粒子群的核心在于位置更新策略。每个粒子代表一种布局方案位置向量要包含各个区域的坐标。这里用字典存储区域位置注意处理越界情况——不能让区域跑出车间外边。def initialize_particle(): positions {} for area in area_sizes: # 在车间范围内随机生成左下角坐标 x random.uniform(0, workshop_size[0] - area_sizes[area][0]) y random.uniform(0, workshop_size[1] - area_sizes[area][1]) positions[area] (x, y) return positions适应度函数是重头戏得同时计算物流成本和人因负荷。物流成本用区域之间的物料搬运距离乘以频次人因负荷则看区域之间的距离是否符合人机工效标准。def calculate_fitness(position): # 物流成本计算示例数据 flow_matrix { (stamping, welding): 8, (welding, assembly): 5 } logistics_cost 0 for (a1, a2), weight in flow_matrix.items(): x1, y1 position[a1] x2, y2 position[a2] distance abs(x1 - x2) abs(y1 - y2) # 曼哈顿距离 logistics_cost distance * weight # 人因负荷计算区域间距惩罚项 human_factor 0 areas list(position.keys()) for i in range(len(areas)): for j in range(i1, len(areas)): a1 areas[i] a2 areas[j] dx abs(position[a1][0] - position[a2][0]) dy abs(position[a1][1] - position[a2][1]) if dx min_distance or dy min_distance: human_factor 1000 # 违反安全距离的重惩罚 return logistics_cost human_factor跑算法的时候发现个有意思的现象——初期粒子经常因为碰撞被惩罚后期逐渐找到平衡点。设置40个粒子跑100代惯性权重从0.9线性降到0.4这样前期有探索能力后期能精细调整。粒子群算法求解基于人因负荷和物流成本的车间布局优化问题 给定车间尺寸和各功能区大小设备间的间距大小使用粒子群算法求解得到功能区的位置将文件中的相关数据替换成自己的数据即可运行最终布局方案要注意可视化验证用matplotlib画出车间边界和各区域位置比单纯看坐标直观多了。曾经出现过数学上的最优解在实际场景中设备门对墙的尴尬情况所以算法结果还是要结合实际勘验。这种多目标优化问题没有完美解但用粒子群至少能在几分钟内找到80分的方案。下次试试结合模拟退火做局部优化说不定能把那剩下的20分啃下来。