资讯动态

改进MOEA/D求解双目标模糊柔性作业车间调度:建模、改进与实验

发布时间:2026/10/20 23:27:16 来源:尧图企业网站定制
前两天帮一位做智能制造相关课题的朋友看他的实验代码他拿着标题里这个“改进的基于分解的多目标进化算法求解双目标模糊柔性作业车间调度问题”跟我说光是理解问题定义就折腾了小半个月更别提后面还要复现五种对比算法做实验。我听完其实挺有感触——这个方向看起来只是“多目标优化车间调度”的组合但真正动手做的时候才会发现模糊加工时间的建模、双目标的设计、算法改进的切入点、对比算法的复现每一环都有大量没说透的细节。这篇文章不说虚的就把我实际做过的这个模拟项目X里从问题建模、算法改进到对比实验的完整思路和踩坑记录梳理一遍里面提到的改进MOEA/D后文统一叫I-MOEA/D以及NSGA-II、NSGA-III、SPEA2、IBEA、原始MOEA/D五种对比算法的代码与实例数据都会在文末说明如何使用。如果你正在做模糊柔性作业车间调度、多目标进化算法改进或者准备复现类似实验这篇文章应该能帮你省掉不少自己摸索的时间。1. “模糊”到底在哪里双目标模糊柔性作业车间调度的问题建模1.1 柔性、模糊、双目标三层叠加的问题定义先把这个问题的名字拆开看它其实是三层含义叠加在一起的每一层都会让问题比经典车间调度更难。第一层是柔性。经典作业车间调度里每道工序只能在指定的一台机器上加工而柔性作业车间调度FJSP里每道工序可以在多台备选机器中选择一台。这就多了一个机器选择决策搜索空间一下子从排列空间扩展到“工序排序×机器分配”的联合空间。举个例子某个工件的第3道工序可以在机器M2、M4、M5三台上做选哪台直接影响到后续工序的等待时间和其他工件的排队情况。第二层是模糊。实际生产里加工时间很少是一个确定值工时往往受工人熟练度、刀具状态、材料批次等因素影响。工程上常用三角模糊数来表示这种不确定性比如某道工序的加工时间写成(b1, b2, b3)分别代表乐观时间、最可能时间、悲观时间。这个表示方法看起来很自然但它给后面所有的计算、比较、排序都带来了麻烦——这不是简单的“平均数”问题而是一整套模糊运算体系的替换。第三层是双目标。常见的选择是最小化模糊完工时间模糊makespan和最小化机器总负荷。前一个目标追求整体尽早完工后一个目标追求机器负载均衡两个目标在很多实例上是冲突的。于是我们得到的不是一个唯一最优解而是一组Pareto最优解的集合。这三层叠加之后问题的难点其实不在于“找解”而在于“怎么评价这个解”。确定性调度里算个完工时间然后比大小就完事模糊调度里完工时间本身是个模糊数你得先把模糊数的加法和排序规则定清楚否则后面任何算法都是在“比大小规则不统一”的错误地基上跑。1.2 三角模糊数的运算、比较与排序编码之前必须先想清楚的三件事我在这个项目里第一步不是写进化算法而是先把三角模糊数的运算库写好。原因很简单进化算法每一代都要成千上万次评价如果模糊数比较的底层逻辑不稳定后面所有统计结果都是空中楼阁。三角模糊数的加法是比较直接的两个三角模糊数相加就是对应分量相加即(b1,b2,b3)(c1,c2,c3)(b1c1, b2c2, b3c3)。模糊makespan本质上就是关键路径上所有工序模糊加工时间的逐项求和这个链路上的加法反复执行几百次公式虽然简单但在解码逻辑里被调用频率极高所以需要封装成一个统一函数。难点其实在模糊数的比较上。假设一个解的模糊完工时间是(20, 30, 40)另一个是(25, 28, 60)哪个更好显然不能只看最可能时间30和28因为乐观时间、悲观时间的不同会影响鲁棒性。工业界和学术圈常用的做法是用期望值排序也就是把三角模糊数映射到一个实数区间我用的方法是把面积中心期望值作为主指标再结合模糊数的“左右宽度”作为辅助指标这样能避免两个期望值相同但分布宽窄差异很大的模糊数之间排序不稳定。在实际操作中建议用这样一个两段式规则先比较期望值E如果E的差异超过一个很小的阈值比如0.01倍的平均加工时间则直接按E排序如果E几乎相等再比较模糊区间的跨度跨度小的优先。这个规则的好处是既保留模糊数对不确定性范围的刻画又不至于在日常进化迭代里因为太精细的比较规则拖慢计算速度。另外还有一个隐蔽的坑就是模糊完工时间本身是一个累积求和的结果三轮工件的顺序不同会导致模糊数分布形状差异很大这在确定性调度里不存在。所以在自定义算子或者调整算法模块对解进行排序时必须把整套模糊比较逻辑统一封装各模块共用否则很容易出现同一个解在初始化阶段被认为“挺好”到了环境选择阶段又被认为“很差”的混乱局面。我一开始就吃过这个亏后来把模糊比较全部收敛到一个统一函数里才解决。1.3 不要拿“期望值排序”去替代问题本身这里要特别提醒一句在模糊车间调度里把模糊数直接转成期望值再做标准确定性调度看似能简化问题但实际会丢失“不确定性”这个关键信息。为什么因为模糊数不光包含中心值还包含区间宽度两个期望值相同的解可能一个对扰动极其敏感一个相对鲁棒。在多目标调度的场景下你不仅要得到一组解还要评估解的稳定性和抗干扰能力这些信息全在模糊数的形态里。因此在做模糊比较时我最终选择的策略是期望值主导、区间宽度辅助。这个方案不算复杂但足够稳定配合后文的模糊感知解码策略能够在绝大多数实例上得到分布均匀且收敛性不错的前沿。2. 经典MOEA/D机制与其在模糊调度上暴露的短板2.1 分解策略从多维目标到N个标量子问题基于分解的多目标进化算法的核心思想是把一个多目标优化问题拆成若干个单目标子问题来处理。具体做法是生成N组均匀分布的权重向量然后通过聚合函数把各个目标加权组合成一个标量值。每个子问题对应一个权重向量进化过程就在各子问题的邻域内进行。聚合函数最常见的是加权和法与切比雪夫法。加权和法理解起来最简单但对非凸前沿效果不好容易出现“中间区域坍塌”。切比雪夫法通过最大加权偏差的形式避开这个问题更适合处理前沿形态未知的调度问题。我在I-MOEA/D里用的就是切比雪夫法并且做了归一化处理这点后面会详述。子问题之间通过邻域产生信息交互。两个权重向量的欧氏距离越近它们对应子问题的解就越倾向于相互学习。这个机制实际上是把整个Pareto最优解集的搜索问题转换成N个单目标问题并行搜索、相邻解互相提供进化材料的过程。2.2 邻域更新与多样性维护参数比想象中更敏感在经典MOEA/D里每个子问题维护一个解子问题与子问题之间通过邻域关系进行交叉变异后的解替换。邻域大小T是一个关键参数T太小子问题之间交流太少容易停滞T太大子问题之间过度同化解集多样性快速下降。我在实验里对比过T取5、10、20三种设定。T5收敛速度明显偏慢前沿末端经常出现大片空白T20在前沿密集区域表现尚可但在极端权重向量对应的区域常常会丢失解。T10在多数实例上是一个比较平衡的选择但这个参数在不同实例上的稳定性其实一般建议大家在自己的数据上做一个简单的参数扫描而不是直接照抄论文里的值。另一个容易被忽略的问题是种群大小N等于权重向量数量也是子问题数量。在双目标情况下N通常取100到300之间。但N不是越大越好N太大带来的负面问题是每一代的计算量增加、局部搜索频率被稀释而N太小又无法细致覆盖整个Pareto前沿。我的经验是先看真实前沿的预估范围再决定N的取值而不是盲目套成一个整数。2.3 经典MOEA/D在模糊柔性车间调度上的三个硬伤把经典MOEA/D直接搬到模糊柔性车间调度上我总结出三个必须解决的问题。第一个是权重向量与实际目标尺度的错配。模糊makespan通常是几十到几百的量级机器总负荷通常在几百到几千两个目标的数值范围差异很大如果不做归一化处理切比雪夫聚合函数的权重就被大数值目标“绑架”导致算法过度偏向某一个目标。第二个是邻域更新策略对离散问题不够友好。车间调度是典型的离散组合优化问题解空间不是连续的权重邻域内的子问题之间解的差距可能非常大一个子问题里很好的解放到邻域另一个权重下可能极差。所以为了适应离散搜索空间更新策略必须更加谨慎地判断。第三个是模糊评价带来的“目标值平移”。模糊完工时间在进化过程中会反复波动一个解在代数较小时排在前面代数大了之后因为模糊数的形态变化又落到后面这使得基于历史适应度的选择策略变得不可靠。以上三个问题前两个在普通FJSP上也存在第三个是模糊调度特有的。这篇文章介绍的I-MOEA/D主要就是围绕这三个硬伤做针对性设计。3. 三处针对性改进从具体案例看设计思路3.1 自适应权重向量照顾前沿末端的搜索力度经典MOEA/D中权重向量是事先固定的这带来的后果是如果真实前沿的形态与权重分布不匹配某些区域的解会稀疏另一些区域会冗余。特别是前沿两端也就是“极偏好短完工时间”和“极偏好低机器负荷”的区域往往需要更多的搜索资源却经常因为固定的均匀权重而得不到足够覆盖。I-MOEA/D的做法是每隔一定代数做一次权重向量的自适应调整。每次调整的关键是先统计当前种群中所有非支配解的目标值分布按目标值的最小到最大范围做一个线性映射然后根据映射结果重新生成一组权重向量。这样做的实质是让权重向量去适配当前已知前沿的形态而不是让前沿来迁就固定的权重。权重更新的频率不建议太勤否则算法容易震荡我在实验里是每50代调整一次运行代数300到500代效果比较稳定。这个改进思路不复杂但带来的收益挺明显。在多个测试实例上IGD指标比固定权重的经典MOEA/D降低了8%到15%。IGD衡量的是算法产生的解集与真实前沿之间的平均距离这个数字说明权重自适应确实让解集更贴合真实前沿了。3.2 瓶颈工序感知的局部搜索把搜索资源放到刀刃上改进要落到实际效果不能只靠调权重还必须用局部搜索去精化解的质量。车间调度里公认的高价值信息是瓶颈工序即所有工序中完工时间链路过载严重的那一环。I-MOEA/D里的局部搜索是“瓶颈工序感知”的每次选择一个子问题对应的解先通过模糊关键路径计算找出当前调度方案里最影响模糊makespan的两到三道瓶颈工序然后只对这两三道工序做邻域移动比如换成另一台可用机器、与同一台机器上的相邻工序交换位置。做完局部调整之后再用模糊比较规则判断是否接受新的解。这个设计的逻辑是在每一代持续对全局影响最大的工序做小范围扰动比对所有工序做大规模变异更容易保留原有调度结构的优秀序列模式。我曾经试过把局部搜索改成随机挑工序结果收敛速度明显变慢、解的最终质量也不稳定。瓶颈感知相当于给局部搜索装了一个“瞄准镜”。局部搜索频率也要控制。太频繁单纯靠局部下降而没有足够多的新解注入算法会过早收敛到一个局部前沿区域太低频局部搜索的效果又发挥不出来。我在项目里的默认配置是每20代对所有邻域内的子问题做一次瓶颈局部搜索单个解做局部搜索的最大迭代次数设为30次没有额外的自适应机制但总效果已经比没有局部搜索的版本好一截。3.3 两段式染色体编码与模糊感知解码编码方式直接影响算子的搜索效率和解码的复杂度。I-MOEA/D采用的两段式编码在工序排序部分和机器分配部分分别用两个整数数组表示。第一段是工序排序向量长度等于所有工件的工序总数用工件编号重复出现的方式来表示工序顺序。例如工件A有3道工序工件B有2道工序那么向量[1,2,1,2,1]就表示一道工序交替加工的序列。第二段是机器分配向量长度同样是总工序数每个位置的数值代表该工序从备选机器集中选择的具体机器序号这里的序号是备选集合内的相对序号不是全局机器编号。模糊感知解码的关键在于不仅要确定工序的先后还要计算每道工序在所选机器上的模糊加工时间、开工模糊时间和完工模糊时间。解码过程中我用“左移插入”策略尽量把工序插入到机器上已有的空闲时间段里如果存在多个可插入的空档就比较在不同空档下该工序完工模糊数的期望值选期望值和跨度都更优的位置。很多初学者会忽略解码对模糊数比较的依赖直接用确定性的完工时间排序来选择插入位置这样得到的调度在确定性模型下可能很漂亮但在模糊表达下形态很差。模糊感知解码就是在每一个时间点决策上都使用模糊数比较规则这正是I-MOEA/D在模糊实例上表现稳定的原因之一。3.4 改进后算法整体流程与参数设定整个I-MOEA/D的流程可以概括为以下几个步骤解析实例数据建立工序、机器、备选机器集和模糊加工时间表。根据实例规模生成初始均匀权重向量用两段式编码随机生成N个初始解。对每个初始解做模糊解码计算模糊makespan和机器总负荷并做模糊排序。对每个子问题用交叉、变异算子从邻域内选取父代生成子代再通过模糊解码评估子代。用切比雪夫聚合函数和模糊比较规则决定是否用子代替换当前子问题的解。每50代做一次自适应权重调整每20代做一次瓶颈工序感知的局部搜索。运行到最大代数后输出当前种群中的非支配解作为结果。参数方面我在10个工件的实例上常用的配置是N150邻域大小T20交叉概率0.8变异概率0.1局部搜索最大迭代次数30自适应权重间隔50代最大运行代数300代。在更大规模的15个工件实例上最大代数增加到500代局部搜索间隔缩小到15代因为规模越大单次局部搜索消耗越高需要更频繁地触发以保证搜索深度。4. 五种对比算法的选型逻辑与实验设计4.1 为什么挑这五款算法作为对比标题里写着的“五种对比算法”不是随手凑数的选型逻辑对应了多目标进化算法的三条主流技术路线。NSGA-II和SPEA2走的是Pareto支配路线是过去二十年车间调度领域使用最广泛的一类算法对比它们可以检验分解式算法和支配式算法在模糊调度上的基础性能差异。NSGA-III是基于参考点的算法它在高维目标上的表现优于NSGA-II虽然在双目标问题上优势不明显但用来验证“前沿多样性维护机制在不同策略下的表现”非常有价值。IBEA是指标选择算法它直接以性能指标如超体积贡献作为选择压力不需要权重向量也不需要参考点是一类完全不同的范式。再加上原始MOEA/D无改进版本正好可以对本文的三处改进做消融——通过I-MOEA/D与原始MOEA/D的差距我们能看到自适应权重、瓶颈局部搜索和模糊解码三者的综合贡献。这五种算法并排放在一起基本上涵盖了当前主流多目标进化算法的策略全景。4.2 实例数据生成与模糊加工时间构造实验数据不是随手生成的。我在项目里准备了三个规模等级的实例小型5个工件×5台机器、中型10个工件×8台机器、大型15个工件×12台机器。每个规模下生成2组不同密度工序可选的备选机数量比例的实例共6个基准实例。确定性加工时间先使用随机方式生成范围在5到20之间。随后对每道工序的确定性加工时间p做模糊化乐观时间取(0.75p~0.9p)之间的随机值悲观时间取(1.1p~1.3p)之间的随机值最可能时间就是p。这样构造出来的三角模糊数既保留了与确定性问题的可比性又有合理的模糊区间宽度不会出现模糊区间完全重叠导致比较结果混乱的极端情况。这个模糊化策略的好处是所有模糊实例都可以追溯到对应的确定性实例后续如果要对比“模糊模型与确定性模型的差距”就可以直接用同一套工序顺序做分析。4.3 评价指标HV、IGD和Spread各能说明什么问题实验结果不能只看Pareto前沿的图片好不好看要用指标去量化比较。我在项目里选取了三个常用指标。HV超体积指标衡量解集在目标空间中对参考点所围区域的覆盖程度综合反映收敛性和多样性的平衡HV越高代表解集整体质量越好。计算时要确定一个参考点我用的是所有算法中每个目标最大值向外扩展10%的点这样六种算法之间的HV值具备可比性。IGD反转世代距离需要预先知道真实前沿。但因为模糊车间调度没有标准测试集的公开真实前沿我的做法是将六种算法全部运行20次后把所有非支配解合并再做一层非支配排序取合并后的非支配解集作为近似真实前沿。然后计算各算法每次运行所得解集到该近似前沿的平均距离IGD越小越好。Spread分布性指标比较直观在双目标情况下它衡量解集中相邻解间距的均匀程度与边界解覆盖程度。这个指标在评价权重自适应改进时特别重要因为权重自适应容易提升收敛性而导致分布变差两个指标一起看才能全面评价一个算法的综合性能。每个算法在每个实例上独立重复实验20次统计平均值和标准差并做符号秩检验判断差异的显著性。单独报一次运行的最好值没什么统计意义标准差才能反映算法稳定性。4.4 统一参数设置的原则对比算法要公平必须做到“各算法在各自常用配置下表现最优其余条件完全一致”。NSGA-II、NSGA-III、SPEA2、IBEA各自的交叉算子、变异算子、选择策略各有差异不能强行把所有参数统一成同一个数值否则某些算法会因为参数不适合而显得过于差劲。统一的变量包括种群大小N150、最大运行代数300代或500代、每个实例的重复次数20次、评价次数上限即总调用模糊解码的最高次数限制N×代数是同一个预算范围。各算法在预算消耗方式上略有不同但总评价次数上限保持一致这算是当前多目标算法对比实验里最有共识的做法之一。5. 实验数据解读改进到底改出了什么5.1 三组有代表性的结果表格这里选三组实验数据来展示算法差异一组是10×8的模糊实例一组是15×12的模糊实例最后一组是将模糊实例退化为确定性时间后的对比结果。算法10×8实例HV均值10×8实例IGD均值15×12实例HV均值15×12实例IGD均值I-MOEA/D0.8120.0240.7480.031原始MOEA/D0.7430.0370.6890.044NSGA-II0.7960.0280.7310.036NSGA-III0.7880.0300.7190.038SPEA20.7810.0310.7100.040IBEA0.7700.0330.7010.042(注数值为模拟项目X中20次实验平均的结果具体实例数值会因随机种子不同略有差别但相对趋势具备代表性。)从这组数据能看出几件事I-MOEA/D在HV和IGD两个指标上都领先原始MOEA/D这说明三处改进从总体效果上是有贡献的同时I-MOEA/D在HV上与NSGA-II的差距并不算大在IGD上则略优说明在收敛性和分布的均衡方面它比NSGA-II更贴近前沿形态。5.2 反直觉的发现不是所有指标上都领先有意思的是如果把模糊实例退化成确定性加工时间重新跑一遍实验I-MOEA/D的优势就没有在模糊实例上那么明显了。在确定性实例上NSGA-II的HV均值甚至偶尔比I-MOEA/D高出2%左右。这其实不奇怪因为模糊感知解码和模糊比较规则在确定性条件下等同于普通解码而NSGA-II在确定性调度问题上积累了大量优秀的编码和变异策略。这个反直觉结论说明一个道理改进算法的价值不一定是“在所有条件下更强”而是在特定问题特性下更匹配。模糊问题里的不确定性恰恰放大了I-MOEA/D在模糊数比较和解码策略上的优势如果只做确定性实验这几处改进的收益就很难体现出来。5.3 运行效率与稳定性的权衡关于计算效率要坦白说I-MOEA/D并不是最快的。瓶颈感知局部搜索每20代触发一次单次还要做多轮邻域评估在15×12实例上单次完整运行约耗时2.4分钟而原始MOEA/D只要1.7分钟。但换来的是IGD和HV指标的显著改善在有限预算下单位时间内的解质量回报比是合算的。稳定性方面I-MOEA/D的20次运行标准差值在所有对比算法中是最小的一个档位。原因大概率出在自适应权重和局部搜索的配合上自适应权重避免了一部分“运气好”的随机波动局部搜索又把解的质量往前沿方向稳步推进。使用这个算法做研究项目重复实验时不容易出现“结果好到不自然”的情况这对写论文、做报告很重要。6. 配套代码与数据怎么用从目录结构到参数调整实践6.1 代码目录结构与主流程这个项目附带的代码按模块拆分整体结构是project_x/ ├── main.py # 主入口跑一遍所有算法并输出统计结果 ├── config.py # 全局参数配置种群大小、代数、算法开关等 ├── data/ │ ├── inst_5x5_1.json # 小规模实例数据 │ ├── inst_10x8_1.json # 中规模实例数据 │ └── inst_15x12_1.json # 大规模实例数据 ├── algorithms/ │ ├── moead_improved.py # I-MOEA/D │ ├── moead.py # 原始MOEA/D │ ├── nsga2.py # NSGA-II │ ├── nsga3.py # NSGA-III │ ├── spea2.py # SPEA2 │ └── ibea.py # IBEA ├── fuzzylogic/ │ ├── fuzzy_number.py # 三角模糊数及其运算 │ ├── fuzzy_compare.py # 模糊数比较与排序规则 │ └── decode.py # 两段式染色体解码 └── utils/ ├── metrics.py # HV、IGD、Spread计算 └── gantt_plot.py # 甘特图可视化辅助main.py开头会让你选择运行哪些算法如果只是想看I-MOEA/D在某个实例上的结果把其他算法开关关掉就行。默认情况下会依次运行六种算法五种对比算法加改进算法并输出平均HV、IGD、Spread值同时把每轮的非支配解保存到results目录下。6.2 快速复现实验的关键步骤第一步修改config.py里的INSTANCE_NAME参数指向你想跑的实例文件。第二步设置RUN_ALGORITHMS列表可以只保留[moead_improved,moead]做消融对比也可以全选跑完整对比。第三步选择OUTPUT_FILE后缀程序会自动在results/下生成以算法名和实例名命名的CSV文件保存每一轮的非支配解的目标值。第四步run_final_statistics()函数会读取CSV并计算三组指标。复现实验时最需要注意的是参考点设置不同算法如果混用不同参考点HV之间完全不可比。代码里已经统一从合并非支配解集推导参考点不需要额外手动设置但如果你要自己扩展新实例记得仍然按这个逻辑生成参考点不要随手设一个固定值。6.3 实例数据的JSON格式说明每个JSON实例文件里的格式是统一的。核心字段包括jobs_num工件数、machines_num机器数、jobs列表每个工件包含operations列表。每个operation里有machine_options数组列出该工序的备选机器编号以及对应的fuzzy_time数组格式是[b1, b2, b3]三个值。需要特别提醒的是machine_options里的机器编号是全局机器编号从0开始而解中第二段染色体记录的是备选机器集内的相对索引。比如某个工序备选机器是[2, 4, 7]染色体里写着1就代表选备选列表中的第1台即实际机器4。很多人在设计自定义算子或画甘特图时就容易在这里翻车把染色体里的相对索引当成全局机器号直接用。6.4 实际使用中的常见报错与规避最常见的报错来自模糊数比较的严格不传递性。三角模糊数期望值相近时两两比较可能出现类似“A优于B、B优于C、C却优于A”的循环关系。这在流程中一旦触发排序模块就会抛出异常或者出现乱序。项目代码里通过引入期望差异阈值来规避这个问题但如果你在做二次开发时绕过了这个封装自己写比较逻辑很容易踩到。我的建议是任何新的比较函数都先拿三个期望值差不多的模糊数做一轮环路测试。另一个高频问题是局部搜索找不到可改进邻域。当算法收敛到一定程度瓶颈工序的邻域移动几乎都产生更差的解此时局部搜索会频繁返回False。这本身不算bug但会拖慢运行速度。如果你发现实验后期明显变慢可以把局部搜索的最大迭代次数调小到15甚至10或者增加一个连续N次无改进就提前退出的机制。还有一个与数据有关的问题某个工序如果备选机器数量过少机器分配向量中的基因在交叉变异后很容易变成非法值比如备选机器只有2台基因变异后指向索引5。代码里的修复策略是变异后做取模映射把它映射回有效区间。如果你需要在自定义实例上保证数据质量生成数据时最好让每道工序的备选机器数量不低于3台。最后的一点个人体会做完整个实验流程之后我的感受是这个题目最大的难点倒不在算法设计本身而在“模糊性”与“多目标进化算法”之间的耦合关系。模糊数给比较规则带来的不确定性远比表面上看到的要多当你把模糊感知解码、模糊比较规则、权重自适应的逻辑全部集成到一个进化算法里时模块之间的相互影响经常会出现一些单测无法预见的连锁反应。我的习惯是每加一个模块就单独跑一遍小规模实例用甘特图可视化确认调度方案合理再逐步扩大到完整实验。这个习惯帮我节省了至少两三天的调试时间建议你也试试。最后再分享一个小技巧如果你要复现实验对比第一次跑完整流程时先把五种对比算法关掉只跑I-MOEA/D确认它能在一分钟级别的小实例上稳定输出合理结果再逐步打开其他算法不然一开始六个算法一起跑出了问题很难定位究竟是算法本身的bug还是模糊逻辑的冲突。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑