资源描述:
《模式识别与智能计算第9章.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、例9.1functiony=myfun(x)ifx(1)<=60&x(1)>=-60 ifx(2)<=60&x(2)>=-60y=-(0.5+((sin(sqrt(x(1).^2+x(2).^2))).^2-0.5)…/(1+0.001*(x(1).^2-x(2).^2).^2)); %要转化对-f(x)求极小 else y=0; endend例9.2function y=myfun(x) %计算目标函数值的函数名ifx<=2&x>=-1 y=-(x
2、*sin(10*pi*x)+2.0); %把问题的最大化转化为最小化elsey=0;end例9.4functiony=myfun(x)y=696.744*x(1)^1.962+10586.71*x(1)^5.9898+63.927*x(2)^1.8815+9054.54*x(2)^5.9898...+375.658*x(3)^2.9972+57.428*x(3)^1.8731+5200.91*x(3)^5.9898+113.471*x(4)^1.8815...+223.825*x(4)^5+23.6
3、26*x(4)^4.8344+5431.427*x(4)^5.9898+3982;>>Lb=[0,0,0,0];Lu=[9,9,9,9];>>A=[-20.475000;-17.037-12.99800;-15.660-11.942-8.8220;-14.229-10.855-8.026-21.965];>>b=[1.7190;-6.532;-12.3930;-30.499];>>options=gaoptimset('TolFun',1e-12); %改变参数>>[x,fval]=ga(@myf
4、un,4,A,b,[],[],Lb,Lu);x=0.47250.51000.47140.6585 %其中一次的结果fval=5.0776e+003可以多运行几次,以求得最好的结果。如果要使运算结果重复,可使用以下方法:>>[x,fval,reason,output]=ga(@myfun,4,A,b,[],[],Lb,Lu); %改变输出结构>>rand('twister',output.randstate);randn('state',output.randnstate); %设置随机函
5、数例9.5functiony=myf_4(x) %x为二进制的个体 loadmydata;%读入数据a=guiyi(a);y1=guiyi(y1);%自编的归一化函数 aa=find(x==1); %找每个个体中1的位,即选中的变量bb=a(:,aa(:)); %找到对应的数据y=press(bb,y1); %求PRESS值,此值要小function[y1,b]=press(x,y) %求press的函数x1=[ones(length(y),1),x]; %回归式中有
6、常数项,所以数据阵的第一列为1[b,bint,r]=regress(y,x1,0.01); %多元线性回归y1=0;fori=1:length(y)hi(i)=x1(i,:)*inv(x1'*x1)*x1(i,:)';y1=y1+(r(i)/(1-hi(i)))^2; %求press值end例9.6首先编写目标函数并以文件名myfun: functiony=myfun(x)loadmydata; %导入数据d=squareform(pdist(p)); %求样本的欧氏距离fo
7、ri=1:15 %设置映射二维数据结构 y1(i,1)=x(:,i);endfori=16:30 y1(i-15,2)=x(:,i);endd1=squareform(pdist(y1)); %求映射二维数据的欧氏距离a=0;b=0; %求误差函数fori=1:14 forj=i+1:15 a=a+(d(i,j)-d1(i,j))^2/d(i,j); b=b+d(i,j); endendy=a/b;然后利用遗传算法的GUI就
8、可计算,其中变量数设置为30(样品数×映射维数)。一次的计算结果如下:x=-3.6698-2.4521-1.3034-1.12891.52782.34943.0598-1.2933-0.38760.10880.47961.01886.03916.4994 6.73503.54073.49681.93200.5881-0.2300-1.2397-3.06163.56201.59180.4698-1.6132-2.54420.5995-0.29891.4899>>x1(: