我正在调试优化例程。我生成一个日志文本文件,我在优化例程中的每次迭代中跟踪目标函数值。
以下是上下文:我使用曲线拟合问题,模型在四参数中是线性的,而在X数据中是多项式
Y = PARAM1*X^3+PARAM2*X^2+PARAM3*X+PARAM4
我对从该模型生成的未通过无偏的数据运行优化例程,以便测试算法。
在日志文件中,第一个优化步骤显示没有问题。功能评估具有双重值。在每次迭代时,计算5个函数值(并显示在日志文件中)。从给定的迭代开始,事情变得糟糕:一个函数评估变为-1#INF
,尽管在这一点上已经成功地评估了目标函数(!)。在接下来的迭代中,“坏点”继续在-1#INF
进行评估,并且逐个其他点也最终在-1#INF处进行评估。在给定公式的情况下,在这些点上计算Y并不是很困难,并且考虑到之前已对它们进行了适当的评估。
另外,我怀疑是另一个原因,比如内存管理。你对此有任何想法,或者有什么建议可以更近地跟踪问题吗?
我在日志文件中看到第一次出现-1#INF
。在每次迭代时,在5个点评估函数,但这5个点中只有一个是“新点”。首次出现-1#INF
时,此时已成功评估功能。
看起来像是
ITERATION N-1
f1 559.011
f2 560.034
f3 562.034
f4 560.342
f5 560.344
ITERATION N
f1 -1#INF
f2 560.034
f3 558.034
f4 560.342
f5 560.344
其中ITERATION N
仅f3
是新点的函数评估,f1是与ITERATION N-1
中的f1相同的点上的函数评估。
答案 0 :(得分:2)
Infinity在计算中传播。最大的几率是多项式产生的 - 因为X已经是-Inf。最大的几率是由X的计算除以零引起的。继续前进并添加在分区中检查零的代码。