Scipy 目标函数:溢出错误34,'结果太大'

问题描述

我正在使用 scipy 同时查找两个模型的参数。正如 SO 上一位乐于助人的成员所建议的那样,我正在使用 scipy.optimize.minimize 来做到这一点。因此,我的目标函数是从每个真实数据集中减去每个模型的两个范数的 - 这是一个完整的示例:

 model_func_1 = lambda t,total,IRF_1,p1,p2,p3: np.convolve(IRF_1,(1/3*total*(1+2*((p1-p3)*np.exp(-t/p2) + 
 p3))))[:len(t)]
 model_func_2 = lambda t,G,IRF_2,p3: np.convolve(IRF_2,(1/3*total*G*(1-((p1-p3)*np.exp(-t/p2) +
 p3))))[:len(t)]
                  
 objective = lambda p,t,y_1,y_2,w_1,w_2: norm((y_1 - model_func_par(t,p[0],p[1],p[2]))*w_1)**2 +
 norm((y_2 - model_func_perp(t,p[2]))*w_2)**2

显然这个目标在某个时候变得巨大,所以我经常得到

溢出错误:(34,'结果太大')

一些解释:数据(y_1和y_2)是两个不同的指数衰减;我正在将模型与称为 IRF 的信号进行卷积

我正在使用“鲍威尔”优化方法。 我已经为三个参数添加了界限以防止超级不合理的猜测,但我迟早还是会得到错误。我无法在不遇到此错误的情况下完成单个“实验”。

我能想到的几个问题:

  1. 如何在 scipy optimize 中针对此溢出错误实现 try/catch?

  2. 有没有办法在不影响整个优化程序的情况下扩展这个目标函数

  3. 另一种编写多目标优化问题的目标函数方法

  4. 有什么好方法可以将优化过程中发生的情况可视化,以便我能够找到问题的根源?

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)