📄 spsa_attention.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SPSA for Attentional Strategy Design%% By: Kevin Passino% Version: 4/28/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all % Initialize memory%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Characteristics of the predator/prey environment and organism:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%global Tmax Tsample Nsteps NTmax=200; % Length of simulation time (real time, in seconds)Tsample=0.01; % Sampling period (used to discretize)Nsteps=(1/Tsample)*Tmax; % Number of steps to run the simulationN=4; % Number of predators/prey (note that increasing this may % require increases in Tmax since we need for the performance % evaluation to reach some type of "steady state" for it to % adequately represent the J value below)%-------------------------% Predator/prey characteristics:%-------------------------global f deltai% Define predators/prey appearance instants (note that f(i,1) refers to predator/prey i, and that predator/prey i% has priority i, where higher values of i indicate higher priority predators/prey)f(:,1)=0*ones(N,1); % Allocate memoryf(1,1)=1*(1/Tsample); % Sets that we want an appearance from predator/prey 1 every f(1,1) steps (1.2 sec.) % (this sets the frequency of appearance)f(2,1)=1.1*(1/Tsample); f(3,1)=1.2*(1/Tsample); f(4,1)=1.3*(1/Tsample); %f(5,1)=1.4*(1/Tsample);% Next, define the bounds delta^i on the maximum amount of time between the appearances of each predator/prey% (note that these must be consistent with the choice for the f(;,1) parameters above that define when the % appearances occur). These are given in real time, not steps.deltai(1,1)=1.05; % Overbounds a choice of 1.2 abovedeltai(2,1)=1.15; deltai(3,1)=1.25;deltai(4,1)=1.35;%deltai(5,1)=1.45;%---------------------------% Organism characteristics:%---------------------------global sched a deltassched=4; % Chooses the policy of choosing the predators/prey that may be most difficult to detect% For sched=4, need weighting factors, which are the parameters of the optimization problem.% To initialize these weights, choose them all to be the same% Choose initialization for w below% Relatively overloaded organism; sum=0.7 (also gives differring rates of processing for % predators/prey with different delay characteristics)a(1,1)=0.1;a(2,1)=0.2;a(3,1)=0.3;a(4,1)=0.1;% Set the a_i parameters so that the capacity condition is met:%epsilon=0.1; % Used to define a_i parameters next%a(:,1)=epsilon*(1/N)*ones(N,1); % Picks so will meet capacity condition - scale it % (other choices are possible)deltas=3*Tsample; % Sets the delay (in steps) that it takes before the organism can % switch from focusing on one predator/prey to another. % NOTE: This only accounts for part of the "delta" used in the book. % This is the part due to switching from one predator/prey to another. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SPSA parameters:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%p=N; % Dimension of the search space (here, equal to the number of % predators/prey since there is one parameter for each in the % attentional strategythetamin=0.1*ones(p,1); % Set edges of region want to search in (for w values above)thetamax=10*ones(p,1);Nspsa=100; % Maximum number of iterations to produce% Next set the parameters of the algorithm:lambda=0.5;lambda0=10;% However, values $\alpha_{1}\in [0.602,1)$ and $\alpha_{2} \in [ 0.101,%\frac{1}{6}]$ may work also. In fact $\alpha_{1}=1$ and %$\alpha_{2}=\frac{1}{6}=0.166667$ are the ``asymptotically optimal'' values so %if the algorithm runs for a long time it may be beneficial to switch %to these values. alpha1=0.602;alpha2=0.101;%alpha1=0.9; % Some tuned values%alpha2=0.16;c=0.25; % Sets size of perturbations % Next, pick the initial value of the parameter vector%theta(:,1)=[4; 2; 1; 4];theta(:,1)=ones(p,1); % Sets equal weighting to all the predators/prey% Allocate memory theta(:,2:Nspsa)=0*ones(p,Nspsa-1);J=0*ones(Nspsa,1); % Cost function for SPSAcj=0*ones(Nspsa,1); % Initialize some SPSA parameters, c and lambdalambdaj=0*ones(Nspsa,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start the SPSA loopfor j=1:Nspsa % Use projection in case update (or initial values) out of range theta(:,j)=min(theta(:,j),thetamax); theta(:,j)=max(theta(:,j),thetamin); % For use in plotting ONLY - just to illustrate how cost decreases are obtained at % the theta values - the SPSA DOES NOT use this cost evaluation to update parameters % as it only needs two cost evaluations per iteration, an no evaluation at the actual % parameter value - just at perturbed ones thetaplus and thetaminus below. [J(j,1),etemp,predpreyfocusedontemp,Ttemp,avgTtemp,maxTtemp]=attentionenv(theta(:,j)); % Set parameters and perturb parameters lambdaj(j,1)=lambda/(lambda0+j)^alpha1; % Note since this corresponds to zero cj(j,1)=c/j^alpha2; Delta=2*round(rand(p,1))-1; % According to a Bernoulli +- 1 dist. thetaplus=theta(:,j)+cj(j,1)*Delta; thetaminus=theta(:,j)-cj(j,1)*Delta; % Use projection in case perturbed out of range thetaplus=min(thetaplus,thetamax); thetaplus=max(thetaplus,thetamin); thetaminus=min(thetaminus,thetamax); thetaminus=max(thetaminus,thetamin); % Next we must compute the cost function for thetaplus and thetaminus [Jplus,e,predpreyfocusedon,T,avgT,maxT]=attentionenv(thetaplus); [Jminus,e,predpreyfocusedon,T,avgT,maxT]=attentionenv(thetaminus); % Next, compute the approximation to the gradient g=(Jplus-Jminus)./(2*cj(j,1)*Delta); % Then, update the parameters theta(:,j+1)=theta(:,j)-lambdaj(j,1)*g; % The following code is used to determine how large to pick Tmax. It must be big enough so that% the J performance measure has reached a "steady state" and for larger N it can take longer to % converge. Hence, the next few lines are used to plot the avgT vs k to see if looks like the% average has converged. Of course with a little more work you could make it automatically test whether the % the simulation has run long enough% So - just show for thetaminus%time=0:Tsample:Tmax;%figure(1)%clf%subplot(311)%stairs(time,predpreyfocusedon)%title('Predator/prey focused on')%subplot(312)%plot(time,avgT,time,(1/(Nsteps+1))*sum(avgT),'r.')%title('Average length of time since last detect')%subplot(313)%plot(time,maxT,time,(1/(Nsteps+1))*sum(maxT),'r.')%xlabel('Time, sec.')%title('Maximum length of time since last detect')%pauseend % End main loop...%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Next, provide some plots of the results of the simulation.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%t=0:Nspsa-1; % For use in plottingfigure(2) clfplot(t,J(:,1),'k--')ylabel('J')xlabel('Iteration, j')title('Cost for \theta(j)')zoomfigure(3) clfsubplot(211)plot(t,cj(:,1),'k--')ylabel('c(j)')title('SPSA parameters')subplot(212)plot(t,lambdaj(:,1),'k--')ylabel('\lambda(j)')xlabel('Iteration, j')clear tt=0:Nspsa; % For use in plottingfigure(4) clffor ii=1:pplot(t,theta(ii,:))hold onendylabel('w_i parameters')xlabel('Iteration, j')Tend=num2str(max(t));Tw1=num2str(theta(1,max(t)));Tw2=num2str(theta(2,max(t)));Tw3=num2str(theta(3,max(t)));Tw4=num2str(theta(4,max(t)));T=strcat('SPSA paramters, j=',Tend,': w_1=',Tw1,', w_2=',Tw2,', w_3=',Tw3,', w_4=',Tw4);title(T)hold off% Print out some data to get the parameter values[minvalavgavgT,indexofstep]=min(J(:,1))theta(:,indexofstep)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -