用POWELL法求极小值:Rosenbrock函数

常用于优化算法测试的python非凸函数有哪些? Ackley函数是一个用于测试优化算法性能的非线性函数,它在全局最小值附近具有许多局部最小值,并且其形状在优化空间的不同区域有所不同,这使得它成为评估优化算法能力的一个好工具。它是一个连续的、非凸的、多模态函数,可以定义在n维空间中。Griewank函数是一个在优化领域广泛使用的测试函数,它是一个非线性的多峰函数,具有一个全局最小值和许多局部最小值。Eggholder函数是一个在优化问题中广泛使用的测试函数,它以其复杂的局部最小值和陡峭的地形而闻名,这使得它成为评估优化算法性能的一个挑战。 阅读详情

函数:\phi =(1-x)^{^{2}}+100(y-x^{^{2}})^{2}

一、题目分析:

       在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由 Howard Harry Rosenbrock 在 1960 年提出 。也称为 Rosenbrock 山谷或 Rosenbrock 香 蕉函数,也简称为香蕉函数。Rosenbrock 函数的定义如下:

f(x,y)=(a-x)^{2}+b(y-x^{^{2}})^{2}

       Rosenbrock函数的每个等高线大致呈抛物线形,其全域最小值也位在抛物线形的山谷中(香蕉型山谷)。

\phi =(1-x)^{^{2}}+100(y-x^{^{2}})^{2} 函数图像

 二、基本方法原理

鲍威尔(Powell)法是直接利用函数值来构造共辄方向的一种共辄方向法。其基本思想是:在不用导数的前提下,在迭代中逐次构造共辄方向。鲍威尔的基本算法是:在每一轮迭代中总有一个始点(第一轮的始点是任选的初始点)和n个线性独立的搜索方向。从始点出发顺次沿n个方向作一维搜索得一终点,由始点和终点决定了一个新的搜索方向。用这个方向替换原来n个方向中的一个,于是形成新的搜索方向组。替换的原则是去掉原方向组的第一个方向而将新方向排在原方向的最后。此外规定,从这一轮的搜索终点出发沿新的搜索方向作一维搜索而得到的极小点,作为下一轮迭代的始点。这样就形成算法的循环。因为这种方法在迭代中逐次生成共辄方向,而共辄方向是较好的搜索方向,所以鲍威尔法又称方向加速法。

针对二维情况,鲍威尔法的寻优过程如图所示。

 图 二维正定函数得Powell法

 

程序

主程序powell.m

clear all
clc
h0=0.1;
x0=[0,0];
e=[1,0;0,1];
eps = 1e-6;
n=2;
for k=1:100000
 for i=1:n 
 x01=x0(1);x02=x0(2);d=e(i,:); 
 F0=ff(x0(1),x0(2));
 opt_step=goldsection(x01,x02,d,h0);
 x(i,:)=x0+opt_step*d; 
 F(i)=ff(x(i,1),x(i,2));
 D(i)=F(i)-F0;
 end
 for i=2:n 
 x01=x(i-1,1);x02=x(i-1,2);d=e(i,:);
 opt_step=goldsection(x01,x02,d,h0);
 x(i,:)=x(i-1,:)+opt_step*d; 
 F(i)=ff(x(i,1),x(i,2));
 D(i)=F(i-1)-F(i);
 end
 if abs(x(n,:)-x0)<1e-4%收敛条件
 break;
 end
 d=x(n,:)-x0;
 x(n+1,:)=2*x(n,:)-x0;
 [D_m,j]=max(D);
 F2=F(n);F3=ff(x(n+1,1),x(n+1,2));
 if F3<F0 && (F0-2*F2+F3)*(F0-F2-D_m)^2>=D_m/2*(0-F3)^2
 x01=x(n,1);x02=x(n,2);
 opt_step=goldsection(x01,x02,d,h0); 
 opt_step;
 x(n+1,:)=x(n,:)+opt_step*d;
 e(j,:)=[];
 e(n,:)=d;
 x0=x(n+1,:);
 x_d(k,:) = x0; %%记录迭代路径
 else 
 if F2<F3
 x0=x(n,:);
 else
 x0=x(n+1,:);
 x_d(k,:) = x0; %%记录迭代路径
 end 
 end
end
disp('最优化结果 x0')
disp(x0)
F_x0 = ff(x0(1),x0(2));
disp('最优化结果最小函数值 F_x0')
disp(F_x0)
disp(k)
x_road = x_d(:,1);
y_road = x_d(:,2);
z_road = (1 - x_road).^2 + 100 .* (y_road - x_road.^2).^2;
xx = -0.5:0.05:1.2;
yy = -0.5:0.05:1.2;
[X,Y] = meshgrid(xx,yy);
Z = (1-X).^2 + 100 .* (Y - X.^2).^2 ;
figure
mesh(X,Y,Z);
xlabel('x')
ylabel('y')
zlabel('z')
hold on
plot3(x_road,y_road,z_road,'r*')

 子程序goldsection.m

function opt_step=goldsection(x01,x02,d,h0)
l=0.618; 
[a,b]=search2(x01,x02,d,h0); 
a1=b-l*(b-a);y1=ff(x01+d(1)*a1,x02+d(2)*a1);
a2=a+l*(b-a);y2=ff(x01+d(1)*a2,x02+d(2)*a2);
for n=1:100
 if y1>=y2
 x1(n)=a1;x2(n)=a2;yp1(n)=y1;yp2(n)=y2;
 a=a1;a1=a2;y1=y2;
 a2=a+l*(b-a);y2=ff(x01+d(1)*a2,x02+d(2)*a2);
 else
 x1(n)=a1;x2(n)=a2;yp1(n)=y1;yp2(n)=y2;
 b=a2;a2=a1;y2=y1;
 a1=b-l*(b-a);y1=ff(x01+d(1)*a1,x02+d(2)*a1);
 end
 
 aa(n)=(a+b)/2; 
 y(n)=ff(x01+d(1)*aa(n),x02+d(2)*aa(n));
 e(n)=abs(b-a);
 opt_step=(a+b)/2;
 if abs(b-a)<1e-5
 break;
 end
end

子程序 search2.m

function [a,b]=search2(x01,x02,d,h0) 
a1=0; y1=ff(x01+d(1)*a1,x02+d(2)*a1);
h=h0;
a2=h; y2=ff(x01+d(1)*a2,x02+d(2)*a2);
if y2>y1 
 h=-h;
 a3=a1;y3=y1;
 a1=a2;y1=y2;
 a2=a3;y2=y3;
end
a3=a2+h;y3=ff(x01+d(1)*a3,x02+d(2)*a3);
while y3<y2
 h=2*h;
 a1=a2;y1=y2;
 a2=a3;y2=y3;
 a3=a2+h; y3=ff(x01+d(1)*a3,x02+d(2)*a3); 
end
if h>0
 a=a1;b=a3;
else
 a=a3;b=a1;
end

目标函数ff.m

function y=ff(x1,x2) 
y =(1-x1)^2+100*(x2-x1^2)^2;

对于不同的初始点进行优化仿真得出结果如下:

 搜索路径如下图所示:

 

 

powell-鲍威尔详解-附案例matlab代码 powell-鲍威尔详解-附案例matlab代码powell(共轭方向、方向加速)基本思想共轭方向的定义共轭方向的性质步骤说明方评价算例matlab解所得结果附注 powell(共轭方向、方向加速) 基本思想 若沿连接相邻两轮搜索末端的向量 S 方向搜索,收敛速度加快。 因为两条平行线 S1与同心椭圆族相切,两个切点的连线 S 直指中心。称 S1与 S2 为共轭方向。 目的:以共轭方向打破振荡,加速收敛。 共轭方向的定义 共轭方向的性质 步骤 说明 1)若是正定二次函数 阅读详情

相关推荐

无约束优化方----Powell

本文介绍了Powell的基本步骤,并给出了例题及对应的python代码。

weixin_53356632的博客 2662

优化方:最速下降、阻尼牛顿、共轭梯度、BFGS matlab程序,以解Rosen Brock函数极小值为例

优化方:最速下降、阻尼牛顿、共轭梯度、BFGS matlab程序,以解Rosen Brock函数极小值为例 程序有详细注释。

智能算法(一)——基本粒子群算法

使用粒子群优化(PSO)算法来解决Rosenbrock函数最小化问题的Python示例代码。此外,我还将包括一个使用matplotlib库来绘制每次迭代后找到的最佳解(即最小函数值)的图形。

j_jiajia的博客 2302

Rosenbrock函数

定义 在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出 。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数Rosenbrock函数的定义如下: f(x,y)=(a−x)2+b(y−x2)e2. f(x,y) = (a-x)^2+b(y-x^2)e^2. f(x,y)=(a−x)2+b(y−x2)e2. Rosenbrock函数的每个等高线大致呈抛物线形,其全域最小值也位在抛物线

weixin_45735391的博客 2万+

梯度下降可视化:Rosenbrock函数示例【附完整源码】

梯度下降可视化:Rosenbrock函数示例【附完整源码】

阿旭的博客 1960

梯度下降 vs 最速下降 vs 共轭梯度:5个优化问题实战性能横评

本文对比了梯度下降、最速下降和共轭梯度在5种不同优化问题上的性能表现。通过详细的实验数据和收敛分析,揭示了共轭梯度在处理病态条件问题时的显著优势,为机器学习实践者提供了算法选型的实用指南。

weixin_30520015的博客 358

牛顿、拟牛顿与阻尼牛顿:从数学原理到Python实战优化

最优化是机器学习、工程设计和金融建模等领域的核心问题,旨在寻找目标函数的最小值或最大值。其基本原理是通过迭代调整参数,使函数值向极值点逼近。传统梯度下降仅利用一阶导数(梯度)信息,收敛速度较慢,尤其在病态问题上容易震荡。牛顿家族通过引入二阶导数(Hessian矩阵)信息,能更准确地预测极值点位置,实现更快的二次收敛速度。然而,原始牛顿计算成本高且稳定性差,因此工程中常使用其改进版本。阻尼牛顿通过加入线搜索(如Armijo准则)确保迭代稳定性,而拟牛顿(如BFGS和L-BFGS)则通过近似Hessi

weixin_30402343的博客 335

python牛顿寻找极值_python使用梯度下降和牛顿寻找Rosenbrock函数最小值实例...

Rosenbrock函数的定义如下:其函数图像如下:我分别使用梯度下降和牛顿做了寻找Rosenbrock函数的实验。梯度下降梯度下降的更新公式:图中蓝色的点为起点,橙色的曲线(实际上是折线)是寻找最小值点的轨迹,终点(最小值点)为 (1,1)(1,1)。梯度下降用了约5000次才找到最小值点。我选择的迭代步长 α=0.002α=0.002,αα 没有办取的太大,当为0.003时就会发生振荡:...

weixin_33444829的博客 1115

粒子群算法(四维rosenbrock函数的优化问题)

在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数

zzqingyun的博客 5090

深度理解Powell优化算法

1.鲍威尔优化综述 鲍威尔又称方向加速,它由Powell于1964年提出,是利用共轭方向可以加快收敛速度的性质形成的一种搜索方。该方不需要对目标函数进行导,当目标函数的导数不连续的时候也能应用,因此,鲍威尔算法是一种十分有效的直接搜索Powell可用于解一般无约束优化问题,对于维数n 不同于其他的直接Powell有一套完整的理论体系,故其计算效率高于其他直接。该

沈春旭的博客 6万+

无约束最优化问题之Rosenbrock

如题

只想躺平不想动 4922

Rosenbrock函数到底什么用

Rosenbrock函数是一个用来测试最优化算法性能的非凸函数 Rosenbrock函数的每个等高线大致呈抛物线形,其全域最小值也位在抛物线形的山谷中(香蕉型山谷)。 很容易找到这个山谷,但由于山谷内的值变化不大,要找到全域的最小值相当困难。 这个意思就是说,测试优化算法如何的方式是: 用优化算法RosenBrock函数进行测试,看看效果咋样. Reference: [1] ...

微电子学与固体电子学-俞驰 5727

进化算法(遗传算法、粒子群算法、差分算法)—— Rosenbrock函数优化

三种进化算法:遗传算法、粒子群算法、差分算法,以及它们再Rosenbrock函数优化问题中的应用。这是一篇学习笔记,可能有纰漏。

FallenChild的博客 3875

深度学习笔记3-优化器

非凸的Rosenbrock函数,他是一种用于测试 优化算法性能的非凸函数,数学表达式为:观察函数可以看到一个抛物线形成的谷,由于谷的形状会使寻找最小值的过程非常缓慢,普通的梯度下降需要将步长设置的非常小,并且迭代较多的轮数,才能找到函数的最优解。因此需要使用优化器寻找Rosenbrock函数取得最小值时,自变量的值。

weixin_51828505的博客 792

MATLAB中利用最速下降解多元函数的局部极小值

MATLAB中利用最速下降Rosenbrock函数的局部极小值 % Meringue % 2017/4/14

Meringue's Blog 1万+

Python绘制rosenbrock函数

雪茄函数Rosenbrock function)定义。# 计算网格上每个点的函数值。# 创建一个网格来评估函数

corn1949的博客 1009

再谈 最速下降/梯度/Steepest Descent

转载请注明出处:http://www.codelast.com/ 最速下降(又称梯度,或Steepest Descent),是无约束最优化领域中最简单的算法,单独就这种算法来看,属于早就“过时”了的一种算法。但是,它的理念是其他某些算法的组成部分,或者说是在其他某些算法中,也有最速下降的“影子”。因此,我们还是有必要学习一下的。 我很久以前已经写过一篇关于最速下降的文章了,但是这里

1573

图像配准powell算法c语言实现,powell

powell/ImprovePowell.suopowell/reg1/Debug/reg1.exepowell/reg1/Debug/reg1.exppowell/reg1/Debug/reg1.libpowell/reg1/Debug/reg1.pdbpowell/reg1/reg1/BrainProtonDensitySliceBorder20.pngpowell/reg1/reg1/Bra...

weixin_34746715的博客 460
上一篇: 用二次插值法求解函数极小值
ZeroZeroOneTwo
博客等级 码龄5年 0粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值