DoglegMethod——“狗腿”算法(中)

编程入门 行业动态 更新时间:2024-10-28 11:28:38

DoglegMethod——“狗腿”<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法(中)"/>

DoglegMethod——“狗腿”算法(中)

这周上完最优化算法,又跑去问了问老师Dogleg算法上的疑问,应该说是解决了上篇日志《DoglegMethod——“狗腿”算法(上)》的疑问,也纠正了我对于信赖域方法的一些错误的看法。


DoglegMethod——“狗腿”算法(上)的算法是错误的,因为对信赖域方法的理解就有问题,虽然我觉得那个算法也是合理的,也是可以做最优解搜索的,a*=0.995其实就是做一个信赖域的收缩,但不是跟Dogleg一致的,下面给出Dogleg的真正算法,Dogleg是信赖域章节的算法,所以对于信赖域的更新部分肯定少不了。(仅仅修改Dogleg.m中while循环的部分,也就是迭代部分)

while iter < maxiterrey = [rey, f(x)];rex1 = [rex1, x(1)];rex2 = [rex2, x(2)];if sum(abs(g(x))) < 0.00001break;enditer = iter + 1;du = -g(x)' * g(x) * g(x) / (g(x)' * B(x) * g(x));dB = -B(x)^-1 * g(x);a = 2;if du'*du > trustRegionBound*trustRegionBound;a = trustRegionBound / sqrt((du'*du));else if dB'*dB > trustRegionBound*trustRegionBounda = sqrt((trustRegionBound*trustRegionBound - du'*du) / ((dB-du)'*(dB-du))) + 1;end    endif a < 1d = a * du;elsed = du + (a - 1) * (dB - du);end%更新信赖域p = (f(x)-f(x+d))/(q(x,zeros(2,1))-q(x,d));if p > 0.75 && sqrt(abs(d'*d) - trustRegionBound) < 0.001trustRegionBound = min(2 * trustRegionBound, 10000);else if p < 0.25trustRegionBound = sqrt(abs(d'*d)) * 0.25;endendif p > 0x = x + d;end
end
大家可以参考袁亚湘老师的《最优化理论与方法》,里面讲的很清楚,不得不感叹老书写的就是好。


但是这个算法我觉得还是有很多问题的,之后我会在(下)篇中介绍我发现的问题,或者说是我程序的问题。


更多推荐

DoglegMethod——“狗腿”算法(中)

本文发布于:2024-02-11 00:15:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678120.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   狗腿   DoglegMethod

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!