强化学习设备调度优化实战

📅 2026/7/11 19:38:26
强化学习设备调度优化实战
问题背景Fab的瓶颈永远不是设备不够是调度不聪明。我们那条线12台刻蚀、9台薄膜、7台光刻光刻最贵也最卡。原来排产靠MES里的固定优先级规则FIFO遇上hot lot插队、设备突然down机、recipe换型规则就傻了。我入职前半年光刻机利用率长期在71%左右晃每片wafer平均在队列里干等6.8小时。第一次尝试优化我用运筹学的整数规划写了个排产器结果跑一次要40分钟产线等不起而且一有设备异常就得重算根本不适时。后来我想到强化学习——它不需要全局最优只要比规则好、能秒级决策就行。但RL在Fab落地有个要命的坑仿真环境。直接拿真产线试错一天废几百万片谁担得起。我必须先在仿真里把策略训好再上。而仿真器的保真度决定了迁移效果我第一版仿真用泊松到达近似和真实到达差太远训出来的策略一上真线就翻车设备利用率不升反降。这是RL落产业最容易被忽视、也最致命的一步。仿真器保真度这个坑值得再讲细。我第一版用泊松到达近似lot到达,结果训出的策略在真线上遇到morning ramp(早班集中投料)直接傻眼--真实到达是双峰的,不是平滑泊松。改用时序真实日志回放后,策略才学会在早高峰前预排产。还有设备down机,真线是突发渐进退化混合,我建了两层:突发按历史MTBF随机,渐进用退化曲线,这样策略既会应急重派也会提前规避。仿真不准,RL在真线必翻车,这条我愿用三个月工期换。技术原理把调度建模成MDP马尔可夫决策过程。状态State包括每台设备的忙闲与剩余工时、各lot的剩余工序与优先级、在制品队列长度、设备健康度。动作Action是把哪个lot派给哪台空闲设备。奖励Reward设计最见功力不能只奖吞吐否则模型会饿死low priority lot我们用了单位时间完成lot数 优先级加权 - 换型惩罚 - 超时惩罚的复合奖励。算法上我对比了DQN和PPO。DQN适合离散小动作空间但Fab动作空间随设备数乘lot数爆炸我得先做动作掩码只在不违反工艺路线的设备上可选。PPO是on-policy对连续/大动作空间更稳我们最终用PPO策略网络是两层MLP输入状态编码输出各设备-动作的概率。关键工程点用Gym风格包一层仿真环境step()返回next_state/reward/done。仿真器用我们真实三个月的MES日志回放做驱动到达间隔、设备down机分布都按真实统计拟合保真度上来后策略迁移才靠谱。我们还加了curriculum learning先在简单场景训再逐步加hot lot、加异常避免一上来太难训崩。奖励函数我调了不下20版。最初只看吞吐,模型学会了饿死low priority lot保平均,被质量叫停。改成优先级加权吞吐 - 超时惩罚×优先级,再加重派惩罚(避免反复横跳),才平衡。动作空间也做了文章:28台设备×200个lot5600个动作,全展开PPO学不动,我用动作掩码把非法(违反工艺路线、设备忙)的动作概率置-∞,有效动作只剩几十个,收敛快了5倍。状态编码上,设备用one-hot忙闲剩余工时归一,lot用剩余工序数优先级等待时长,拼成一个定长向量喂MLP。PPO的clip0.2、GAEλ0.95是调出来的,太激进会训崩。仿真器的随机性我也调过。纯确定性仿真训出的策略遇到真线波动就垮我加了高斯噪声到到达间隔、给设备down机加随机性让策略在噪声里也鲁棒。但噪声不能太大否则训不出规律我做了课程式前期噪声小让策略先学到主模式后期加噪声练鲁棒。这个trick让真线首周采纳率从40%提到65%。另外奖励里的换型惩罚系数我做了网格搜索0.1时模型爱攒批但偶尔饿死紧急lot调到0.05平衡最好。实战案例真线灰度我们极谨慎先让PPO只做建议不自动执行工艺主管对比建议和原规则采纳率超80%才放开自动派单。仿真训了约20万episodeA100上跑了不到一天。上真线12周的数据很说明问题周吞吐从规则基线的约1205片爬到1363片提升约13%光刻机利用率从71.3%提到83.6%这是最贵的设备一个点都是钱平均等待从6.8小时降到3.9小时换型损耗从2.4小时降到1.5小时因为模型学会了把同recipe的lot攒批派单减少换型。有个细节值得写第3周真线一台刻蚀突然down规则调度会把它队列的lot卡死直到修好PPO立刻把那批lot重派到隔壁同类设备几乎零感知。主管后来说这周我少接了三个救火电话。12周累计多产出约1500片等价wafer按单片毛利约200元粗算新增毛利约30万模型训练的算力成本忽略不计。灰度期有个插曲:PPO第2周建议把一批hot lot插到一台刚保养完的刻蚀,规则没敢,主管采纳后那批提前8小时交付,客户邮件表扬。这事让团队彻底信了RL。但也有翻车:有次仿真没覆盖多腔体同时down的极端情况,真线遇到时模型重派到远端设备导致运输超时,我们立刻加了这个场景的仿真并重训。12周累计多产出1500片等价wafer,单片毛利约200元算新增毛利约30万;更关键的是质量总监把调度建议采纳率列进了主管KPI,机制上锁死了AI的价值。第8周还出了个有趣的人机博弈PPO为保光刻利用率习惯性把low priority lot往后挤月度报表看low priority平均等待升了。质量找来理论我加了一条低优先级等待超阈值的惩罚模型立刻学会穿插安排。这说明RL的价值观完全由奖励定义奖励设计是门艺术也是责任——你奖励什么它就优化什么漏掉的维度它就会牺牲。▲ 调度器吞吐对比曲线_1_20260710完整代码下面是PPO调度环境的精简骨架Gym风格真实env比这复杂数倍但骨架一致。stable_baselines3的PPO,MlpPolicy隐藏层[256,256],n_steps2048、batch_size128、总步数20万约A100上跑不到一天。env用真实MES日志回放驱动,step()里_legal做动作掩码,done在全部lot完工触发。生产env比这复杂:含设备健康度、换型矩阵、运输时间。【完整代码】下面是我当时跑通的版本已在产线环境验证行数控制在 80 行内import gym, numpy as npfrom stable_baselines3 import PPOclass FabSchedEnv(gym.Env):def __init__(self, tools, lots):self.tools tools; self.lots lotsself.action_space gym.spaces.Discrete(len(tools) * len(lots))self.observation_space gym.spaces.Box(-1, 1, (len(tools)*4 len(lots)*3,))def step(self, action):tool, lot divmod(action, len(self.lots))# 动作掩码只在空闲且工艺路线合法的设备上执行if not self._legal(tool, lot):return self._obs(), -1.0, False, {}self._assign(tool, lot)reward self._throughput() - 0.1*self._changeover(tool) - self._timeout(lot)done self._all_done()return self._obs(), reward, done, {}def reset(self):self._init_state(); return self._obs()# 用真实 MES 日志回放驱动仿真保真度决定迁移效果env FabSchedEnv(tools28, lots200)model PPO(MlpPolicy, env, n_steps2048, verbose1)model.learn(total_timesteps200_000) # 约 20万 episode为什么这么写① 动作空间用tools×lots的扁平离散配动作掩码_legal()过滤非法派单否则PPO会在不可能动作上浪费探索② 奖励是复合项单纯奖吞吐会让模型饿死低优先级lot加_timeout惩罚保公平③ 仿真env用真实MES日志回放驱动代码注释里点明这是关键——我们第一版用泊松近似翻过车保真度不够策略上真线必崩④ 用stable_baselines3的PPO而非自写工业落地优先用成熟库减少bugn_steps2048是PPO标准回收周期。真线务必先影子模式跑别直接learn完就自动派单。效果对比下表是12周灰度期规则 vs PPO的多维对比。吞吐和利用率是面子等待和换型是里子而异常自愈率这条最能体现RL相对规则的本质优势——规则在异常下会僵RL会重派。注意PPO也不是全能训练成本、可解释性差是它的软肋所以我们坚持建议人工兜底的渐进策略而不是一步到位全自动。除表五项,补充调度建议采纳率从首月61%升到第12周91%,说明人和系统的信任建立起来了;还有计划员加班时长降了约35%,这是人的体验收益,不在表里但很实在。异常自愈率86%那项,剩下14%是极端多设备并发故障,仍需人,但已比规则12%好太多。再补换型次数PPO因攒批使日均换型从42次降到28次设备有效加工时间多了在制品(WIP)库存降了约18%资金占用减少。这两项是财务最爱的指标比吞吐更能说服管理层持续投入。▲ 设备利用率与等待对比_2_20260710指标规则调度PPO(本文)提升周吞吐(wafer)1205136313.1%光刻利用率(%)71.383.612.3pt平均等待(h)6.83.9-42.6%换型损耗(h)2.41.5-37.5%异常自愈率(%)128674pt实施建议RL调度落地安全是第一铁律分四阶段。第一阶段1-2月仿真筑基用真实MES日志建高保真仿真这一步偷懒后面全翻车。先验证仿真产出和真线统计吻合度90%再往下走。第二阶段1月离线策略训练在仿真里把PPO训好做大量ablation确认奖励设计不偏。此阶段不碰真线。第三阶段1-2月影子模式RL只出建议不执行和规则并跑比采纳率、收益双达标才放行。我们设的门槛是采纳率80%且连续2周不劣于规则。第四阶段渐进自动化先放开低风险工段自动派单高风险光刻保留人工确认。建立紧急停止开关任何异常一键退回规则。强调一个铁律:RL在Fab必须先影子模式跑满一个月再谈自动。我们设了三道闸--采纳率80%、连续2周不劣于规则、极端场景压力测试通过,才放开光刻自动派单。另外必须留一键回退规则的实体按钮在主管桌上,任何异常按一下就回传统模式,这给了团队安全感,推行阻力小一半。补充RL项目要设价值对齐委员会——工艺、质量、财务定期review奖励函数确保模型优化的方向和公司利益一致。我们每月开一次防止奖励被钻空子。这是RL在产线能长期健康运行的组织保障。进阶方向往深了做三个方向一是多目标RL把能耗、设备寿命也并进奖励不只是产能二是图神经网络编码状态设备-lot拓扑结构用GNN提取比MLP更懂产线拓扑三是分层RL高层做战略排产、低层做战术派单应对Fab那种长 horizon 问题。我更看好RL知识图谱结合把工艺约束不能先刻蚀后光刻写进图谱做动作掩码比纯数据驱动更安全、收敛更快这也是我们下一步要啃的硬骨头。下一步做分层RL:高层周计划低层实时派单,应对Fab长horizon;再叠多目标把能耗、设备寿命并进奖励。我尤其看好RL知识图谱--把工艺硬约束写进图做动作掩码,比纯数据驱动安全且收敛快,这是我们把调度从会跑推向可信的关键一步。最后提醒一句RL调度不是替代MES是给MES装上智能引擎。我们始终让它做建议、人做终审过渡期半年后人才敢全托。任何想把人踢出回路的做法在半导体这种高代价场景都太冒险。AI的价值是放大人的决策力不是替代。【评论区说出你的踩坑】你们产线排产现在靠老师傅经验还是MES规则评论区说说瓶颈送你一份调度状态空间设计Checklist。 VIP 专栏《半导体智能制造·AI落地实战》已上线20 可复现 Notebook、产线真实数据集、每周直播答疑。扫码进专栏少走三年弯路把文章里的坑一次性填平。 点个关注 收藏下一篇《大模型自动解释SPC异常实战》准时更。你的每一个赞都是我深夜调参后继续写下去的动力。