⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsm_learn.m

📁 一个用MATLAB编写的优化控制工具箱
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Response surface method for finding optimal approximator size p% and data set G size M for a function approximation problem.% Program also allow you to keep either p or M constant and % vary the other one (to generate a 2D response surface).%% By: Kevin Passino% Version: 3/22/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear% Consider the follow range of sizes of the approximatorp=4:2:40; % Notice that we consider only even p for convenience since			% it is easiest to add two parameters at a time for the 			% type of approximator that we are using (TS fuzzy system)			% Also, must start at p(1)>=4 due to how the spreads are defined			% in terms of the centers.% Consider the following range of sizes of the data setM=100:100;% Generate a test set% Define a parameter to control the size of the test set% relative to sizes of training setsgamma=2; % Choose the size of the test set to be twice the size		 % of the largest training set		 [xt,Gamma]=unknownfunction(gamma*max(M));% Set the number of trials for each point on the RSM% (to use an average MSE for each point on the RSM)Ntrials=1; %Ntrials=100; % Initialize the variables that hold the training data:x=0*ones(length(M),length(p),length(M),Ntrials);G=0*ones(length(M),length(p),length(M),Ntrials);% Set a variable for the number of times to run the program (for checking% that the response surface does not change too much for additional trials)Ntests=1;Ntests=5;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loop for generating data for RSM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for ll=1:Ntests	for ii=1:length(p)	for jj=1:length(M)				for kk=1:Ntrials						[x(1:M(jj),ii,jj,kk),G(1:M(jj),ii,jj,kk)]=unknownfunction(M(jj)); % Generate training data						% First, form the vector Y			Y=G(1:M(jj),ii,jj,kk);			% Find Phi, which involves processing x through phi (for the training data)			% Find the centers of the membership functions			c(1,:)=-6:(12/(0.5*p(ii)-1)):6; % Produces one center for every two parameters 			sigma(1,:)=((c(1,2)-c(1,1))/(2))*ones(1,length(c(1,:))); % Chooses width to be half the distance															% between adjacent centers			% Initialize Phi			for j=1:length(c(1,:))				mu(j,1)=exp(-0.5*((x(1,ii,jj,kk)-c(1,j))/sigma(1,j))^2);			end				denominator(1)=sum(mu(:,1)); 				for j=1:length(c(1,:))				xi(j,1)=mu(j,1)/denominator(1);			end			Phi=[xi(:,1)', x(1,ii,jj,kk)*xi(:,1)'];			% Form the rest of Phi			for i=2:M(jj)					for j=1:length(c(1,:))					mu(j,i)=exp(-0.5*((x(i,ii,jj,kk)-c(1,j))/sigma(1,j))^2);				end					denominator(i)=sum(mu(:,i)); 					for j=1:length(c(1,:))					xi(j,i)=mu(j,i)/denominator(i);				end				Phi=[Phi; xi(:,i)', x(i,ii,jj,kk)*xi(:,i)'];				end			% Find the least squares estimate			theta=Phi\Y;					% Compute the approximator values for the test set (xt,Gamma)			for i=1:length(Gamma)					for j=1:length(c(1,:))					mut(j,i)=exp(-0.5*((xt(i)-c(1,j))/sigma(1,j))^2);				end					denominatort(i)=sum(mut(:,i)); 					for j=1:length(c(1,:))					xit(j,i)=mut(j,i)/denominatort(i);				end								phit=[xit(:,i)', xt(i)*xit(:,i)']';				Fts(i,1)=theta'*phit;									end					% Plot the data (optional - just to gain insight)			%			figure(1)%			clf%			plot(xt,Fts,'o')%			ylabel('Approximator output F_t_s')%			xlabel('Test data')%			Tp=num2str(p(ii));%			TM=num2str(M(jj));%			T=strcat('Approximator mapping, p=',Tp,'Training set size, M=',TM);%			title(T)%			pause				% Compute the approximation error at the test data					J(jj,ii,kk)=(1/length(Gamma))*(Gamma-Fts(:,1))'*(Gamma-Fts(:,1)); % Compute the mean-squared error				end % End Ntrials loop			% Need to clear variables as dimensions change in two outer-most loops		clear Y c sigma mu denominator Phi xi theta mut denominatort xit phit				% Compute the average mean squared error		Jsurf(jj,ii,ll)=(1/Ntrials)*sum(J(jj,ii,:));end % End M loopend % End p loopend % Ends the Ntests loop%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot the response surface%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure(2)clf% First consider 2D surfacesif length(M)==1, % Plot across pfor ll=1:Ntests	figure(2)plot(p,squeeze(Jsurf(1,:,ll)),'k-')xlabel('Approximator size, p');ylabel('Average MSE, J');TM=num2str(M(1));T=strcat('Response surface, Training set size, M=',TM);title(T)% Next line for zooming in on response surface region%axis([10 max(p) min(Jsurf(1,:,ll)) 0.03])hold onendend%clear J % Below, some additional plotting possibilities%if length(p)==1, % Plot across M	%figure(3)%clf%plot(M,Jsurf(:,1),'k-')%xlabel('Training data set size, M');%ylabel('Average MSE, J');%Tp=num2str(p(1));%T=strcat('Response surface, Approximator size, p=',Tp);%title(T)%end% Next, 3D%if length(M)>1 & length(p)>1, % If have data for a 3D surface %figure(4)%clf%surf(p,M,Jsurf)%colormap(white);%xlabel('Approximator size, p');%ylabel('Training data set size, M');%zlabel('Average MSE, J');%title('Response surface for average MSE');%rotate3d%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -