You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pymoo 0.5.0使用NSGA-III优化生成含nan参数候选解的原因咨询

问题根本原因

你参数索引为11、12、13的三个变量的上下限设置完全相等,均为-1,导致pymoo内置的SBX交叉和PM变异算子在计算时出现除以0的情况,最终生成nan值。

  • 实值SBX交叉算子的计算过程需要用到变量的上下限范围(xu_i - xl_i)作为边界修正的参数,当某个变量的上下限相等时,这一差值为0,相关计算会出现除0错误,输出nan
  • 实值PM变异算子的扰动步长也和变量的上下限范围正相关,同样会因为范围为0触发除0逻辑,产生nan
  • 你观察到仅这三个参数出问题,恰好和上下限配置完全对应,其他变量的上下限范围均不为0,所以不会触发该问题
快速验证方法

在初始化算法之前,加入一行代码打印三个问题变量的上下限即可确认:

print(f"param11 下限:{params_lower_lim[11]}, 上限:{params_upper_lim[11]}")
print(f"param12 下限:{params_lower_lim[12]}, 上限:{params_upper_lim[12]}")
print(f"param13 下限:{params_lower_lim[13]}, 上限:{params_upper_lim[13]}")
修复方案

根据你的实际需求二选一即可:

  1. 如果这三个参数是固定值不需要优化:直接从优化变量列表中删除,把这三个参数的固定值直接写死在评估函数的smeep调用里即可,不用作为param的成员传入
  2. 如果这三个参数需要优化:修正对应的上下限配置,给这三个参数设置合理的取值范围,确保上限大于下限即可

内容的提问来源于stack exchange,提问作者Peter Allan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:24:02