坐标轮换法
1、算法原理
坐标轮换法是每次搜索只允许一个变量变化,其余变量保持不变,即沿坐标方向轮流进行搜索的寻优方法。他爸多变量的优化问题轮流地转化成单变量(其余变量视为常数)的优化问题,因此又称这种方法为变量轮换法。在搜索过程中可以不需要目标函数的导数,只需要目标函数值信息。这比前面所讨论的利用目标函数导数信息建立搜索方向的方法要简单的多。
以二元函数飞f(x1,x2)为例说明坐标轮换法的寻优过程。从初始点x00出发,沿第一个坐标方向搜索,即d10=e1得x10=x00+a01*d01按照一维搜索方法确定最佳步长因子a01满足minf(x00+a*d01),然后从x01出发沿d02=e2方向搜索得x02=x01+a02*d02,其中步长因子a02满足minf(x01+a*d02),x02为一轮(k=0)的终点。检验始、终点之间的距离是否满足精度要求,即判断||x02-x00||对于n个变量的函数,若在第k轮沿第i个坐标方向dki进行搜索,其迭代公式为xki=xk(i-1)+aki+dki (k=0,1,2…,i=0,1,2…n)
其中搜索方向取坐标方向,即dki=ei(i=1,…n)。若||xkn-x00||2、程序(1) function y=f(x)
y=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2;
(2)d1=e1;
syms a1;
x1=x0+a1*d1;
y1=f(x1);
z1=diff(y1,a1);
subs(z1);
a1=solve(z1);
x1=x0+a1*d1;
d2=e2;
syms a2;
x2=x1+a2*d2;
y2=f(x2);
z2=diff(y2,a2);
subs(z2);
a2=solve(z2);
x2=x1+a2*d2;
m=x2-x0;
m=double(m);
t=norm(m);
(3) e1=[1;0];
e2=[0;1];
f2;
(4) f3;
while (t>=e)
x0=x2;
f2;
end
x2=double(x2);
xo=x2;
xo
3、计算结果及说明
从上述分析可以看出,采用坐标轮换法只能轮流沿着坐标方向搜索,尽管也能使函数值步步下降,但要经过多次曲折迂回的路径才能达到极值点;尤其在极值点附近步长很小,收敛很慢,所以坐标轮换法不是一种很好的搜索方法。但是,在坐标轮换法的基础上可以构造出更好的搜索策略。