📄 evolve_instinct_learn.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Set-based stochastic optimization for % evolving optimum % instinct-learning balance%% By: Kevin Passino% Version: 5/5/01%% Note: This code can take a relatively long% time to run (of course depending on % what computer you are using).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all % Initialize memoryS=100; % Set the size of the populationNL=200; % Set the number of steps in the lifetime of each organism % in the populationtime=1:NL; % Time steps during a lifetimeNg=200; % Set the number of generationstimeepoch=1:Ng; % Set environmental characteristicsy=zeros(NL,Ng); % Initialize/allocate memory for sensed variable from environmentz=zeros(NL,Ng); % Initializesigmaz2=0.5*ones(Ng); % Initialize the variance in the variable we want to estimate (could % change during a lifetime or over generation)xmin=0; % Set limits on size of x values (assume that same amount above, below 2xmax=4;xbar=2; % For case where have an unknown constant in the environment that want to estimatex=xbar*ones(NL,Ng); % Set variable want to estimate as a constantxhat=zeros(NL,Ng);%Ndivxhat0=40; % Set the number of points on a xbar=xhat0 axis%xhat0=linspace(xmin,xmax,Ndivxhat0); % Initialize the estimator initial conditions xhat0=zeros(S,Ng);xhat0(:,1)=ones(S,1); % Sets initial condition (as if all individuals are the same, with % rather poor instincts)Ndivn=20; % Number of divisions on n space, same as the max value considered for n%n=1:Ndivn; nmax=20;nmin=1;n=zeros(S,Ng);n(:,1)=ones(S,1); % Set intial conditions on memory (so only can hold one value)% Initialize cost function (fitness function, but where we interpret it% in a different way compared to the fitness function used for genetic % algorithm).J=zeros(S,Ng);% Set weighting parameters for cost function% A choice to illustrate some concepts:w1=0.01;w2=1; w3=0.05;% Parameters for the set-based opt. methodbeta=0.01; % Sets variance on cloud of points along xhat0 dimension % using a normal distribution with zero meanndev=1; % Set the max deviation on cloud for n (up and down) (set to a pos integer)pm=0.1; % Mutation probability%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start loop for generation of data for response surfaces%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for ell=1:Ng % Loop for testing multiple times... % Have the environment suddenly change at ell=100 such that there is more uncertainty if ell>=100, sigmaz2(ell)=0.75; end % Evaluate the cost for each individual for i=1:S % Simulate an individual: clear Y % Dimension changes on the regressor vector so clear it each time it changes Y=xhat0(i,ell)*ones(n(i,ell),1); % Set initial condition % Run estimator for lifetime of animal for k=1:NL % Generate sensed signals, including initial values that are instincts z(k,ell)=sigmaz2(ell)*randn; % Generate noise y(k,ell)=x(k,ell)+z(k,ell); % Generate signal that is sensed Y=[y(k,ell); Y(1:(n(i,ell)-1),1)]; % Shift regression vector, load in new value xhat(k,ell)=mean(Y); end J(i,ell)=w1*n(i,ell)... % Cost of storage +w2*(1/NL)*(x(:,ell)-xhat(:,ell))'*(x(:,ell)-xhat(:,ell))... % Quality of estimation +w3*exp(-(x(1,ell)-xhat0(i,ell))^2/((0.1)^2)); % Models cost of instinct end % End i loop for individuals... S [Jbest(ell),bestone(ell)]=min(J(:,ell)); % Find the best point in the cloud nbest(ell)=n(bestone(ell),ell); % Store for plotting xhat0best(ell)=xhat(bestone(ell),ell); % Generate next generation of parameters: xhat0(bestone(ell),ell+1)=xhat0(bestone(ell),ell); % Use elitism - keep the best one n(bestone(ell),ell+1)=n(bestone(ell),ell); % Use elitism - keep the best one % Create a cloud of points around the best one for ss=1:S if ss ~= bestone(ell) xhat0(ss,ell+1)=xhat0(bestone(ell),ell)+beta*randn; % Perturb points on xhat0 dimension n(ss,ell+1)=n(bestone(ell),ell)+round((1-2*rand)*ndev); % The last term generates a % random integer between % -ndev and +ndev if xhat0(ss,ell+1)<xmin, xhat0(ss,ell+1)=xmin; end % Fix parameters if perturbed out of range if xhat0(ss,ell+1)>xmax, xhat0(ss,ell+1)=xmax; end if n(ss,ell+1)<nmin, n(ss,ell+1)=nmin; end if n(ss,ell+1)>nmax, n(ss,ell+1)=nmax; end end % End if loop end % End ss loop% Next place a mutant, do not mutate the best one if pm>rand, % Replace either the first or last member, provided not the best one nvec=randperm(Ndivn); if bestone(ell) ~= 1 xhat0(1,ell+1)=(xmax-xmin)*rand-((xmax-xmin)/2); % Generates a random parameter in range n(1,ell+1)=nvec(1); % Generates a random parameter in range 1,2,...,Ndivn else % So, the bestone is the first one so replace the last xhat0(S,ell+1)=(xmax-xmin)*rand-((xmax-xmin)/2); n(S,ell+1)=nvec(1); end end end % End ell loop%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure(1)clfplot(timeepoch,Jbest,'k-')zoomgrid ontitle('Cost function J (fitness function) for best estimator')xlabel('Generation')earlyavg=mean(xhat0best(1:100))lateavg=mean(xhat0best(101:200))figure(2)clfplot(timeepoch,xhat0best,'k-')zoomgrid onhold onplot(timeepoch,[earlyavg*ones(size(xhat0best(1:100))) lateavg*ones(size(xhat0best(101:200)))],'r--')title('Initial condition (solid), average of first and last 100 generations (dashed)')xlabel('Generation')figure(3)clfstairs(timeepoch,nbest,'k-')zoomgrid ontitle('n')xlabel('Generation')%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -