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

scipy.optimize.minimize()设置0<T<1边界时触发运行警告问题排查

问题产生原因
  • 初始值设置违规:优化初始点设为1,恰好落在约束边界上,此时目标函数内的分母项(T-1)**2计算结果为0,直接触发除零运算。
  • 边界设置不符合开区间约束:传入的bounds=[(0,1)]在scipy中为闭区间,允许算法在迭代时取到T=0、T=1两个端点,这两个点都会让目标函数出现无意义的计算结果。
  • 目标函数注释与实现不匹配:注释中给出的U项公式存在括号不匹配的语法错误,且和代码中实际计算的U表达式不一致,存在公式写错导致优化结果失效的风险。
警告信息具体含义
  • RuntimeWarning: divide by zero encountered in true_divide:执行除法运算时出现了分母为0的情况,对应代码中计算U的分式步骤,当T=1时分母为0,运算结果为无穷大inf。
  • RuntimeWarning: overflow encountered in multiply:乘法运算时出现数值溢出,即计算得到的数值超出了浮点数可表示的最大范围,这是除零得到inf后,无穷大值参与后续幂运算、乘法运算引发的连锁错误。
对应解决方法
  • 更换合理初始点:不要选择边界值作为迭代起点,在(0,1)区间内选取初始值,例如0.5,避免第一步迭代就触发非法运算。
  • 收紧边界避开奇点:由于约束是0<T<1开区间,将边界设置为避开两端奇点的微小偏移值,例如[(1e-8, 1-1e-8)],从参数范围上杜绝T取0或1的可能。
  • 核对目标函数公式:先修正注释中U项的公式错误,对照理论推导确认代码中U的表达式完全正确,避免逻辑错误导致优化结果无效。
  • 兼容scipy的数组传参:将math库的运算替换为numpy对应运算,适配scipy优化时传入数组参数的调用逻辑,减少运算兼容问题。

修正后的可运行参考代码:

import scipy.optimize
import numpy as np


def function(T):
    # 注意:请先核对U的表达式是否符合你的理论推导,此处保留原代码的计算逻辑
    U = (T + 1 + 2 * np.sqrt(T)) / (T - 1) ** 2
    return 1 - T**3 * (1 - T - U) ** 5 * U**10

# 初始点选区间内值,边界收紧避开0、1端点
res = scipy.optimize.minimize(function, x0=0.5, bounds=[(1e-8, 1 - 1e-8)])
w = res.x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:39:25