BUG解决方案
在使用ipopt和cppad进行优化求解时,发现对优化变量或者对优化变量所得的的变量进行开方时(使用math.sqrt)会发现程序崩溃,求解失败。我的猜想是x\sqrt xx的导数为12x\frac{1}{2\sqrt x}2x1,当x为0时,则会出现非法值。
故重点来了,解决方案为,强行把x为0的值变成一个很小的值,如:
if(x==0){
x=1e-10;
}
BUG求助
解决完这个问题,我还有一个关于ipopt的bug,解决了bug但是不知道是什么原因导致的bug,希望有大神看到可以指点一二。
Bug描述:
程序中对优化变量使用math.atan2(y,x),如果y为负数,则math.atan2(y,x)也为负数,对math.atan2(y,x)+2*M_PI转为正数后会求解失败,但是使用math.atan2(-y,x)返回正数时就不会求解失败,非常的玄学。
在利用IPopt和CppAD进行数值优化时,遇到开方操作对优化变量产生非法值导致程序崩溃的问题。解决方案是当检测到变量x为0时,将其设置为一个极小值(如1e-10)。另一个bug涉及到math.atan2函数,当y为负数时,atan2(y,x)+2*M_PI会导致求解失败,但使用math.atan2(-y,x)则不会。
1万+

被折叠的 条评论
为什么被折叠?



