📄 attentionenv.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Simulator for predatory/prey environment for% SPSA for Attentional Strategy Design%% By: Kevin Passino% Version: 4/28/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [J,e,predpreyfocusedon,T,avgT,maxT]=attentionenv(w);% Define global variables from associated programglobal Tmax Tsample Nsteps Nglobal f deltai%global f deltaperturb deltaiglobal sched a deltas%-----------------------------------% Start simulation loop:%-----------------------------------% First, initialize variables:e=0*ones(N,Nsteps+1); % Allocate memory for predators/prey signalsT=0*ones(N,Nsteps+1); % T(i,k) will denote the number of steps that predator/prey i has % been ignored as of step k. avgT=0*ones(Nsteps+1,1); % avgT(k,1) denotes the average size of T at each step % (average of N values)maxT=0*ones(Nsteps+1,1); fcounter(:,1)=ones(N,1); % Allocate memory for counters peakest=0*ones(N,1); % Allocate memory for computation of estimate of peak for sched=4deltacounter=0; % Used to implement the deltas delaydecisiontime=1; % Signals that it is a time (if =1) that pick a new predators/prey % to focus on (initially pick one to focus on)predpreyfocusedon=0*ones(Nsteps+1,1);; % Initialize variable that indicates which predators/prey is % currently being focused on (if in a delay period, means % the one that it is trying to focus on)predpreyprocess=0; % Flag to indicate that switch delay is overdetectedpredprey=0; % Flag that indicates that the predators/prey that is focused on is detected % (=0 means not detected, =1 means detected)for k=1:Nsteps for i=1:N % First generate the appearance signals at step k if fcounter(i,1)>=f(i,1); % Check if have waited long enough to appear %(notice here have >= so since due to how the frequency of % occurences of appearances are defined so that f can be fraction) e(i,k+1)=1; % Appear fcounter(i,1)=1; % Reset counter else e(i,k+1)=0; % Do not appear fcounter(i,1)=fcounter(i,1)+1; % Increment counter end end % Compute some performance measures that can be used in decision making: % (and for plotting later) avgT(k,1)=(1/N)*sum(T(:,k)); maxT(k,1)=max(T(:,k)); if decisiontime~=1; predpreyfocusedon(k,1)=predpreyfocusedon(k-1,1); % If not a decision time then same focus as last time end % Decide which predators/prey to focus on: if decisiontime==1; % Test if it is a decision time % Policy of choosing the predators/prey that may be most difficult to detect if sched==4 for j=1:N peakest(j,1)=w(j,1)*(a(j,1)/(1-a(j,1)))*(T(j,k)+deltas+deltai(j,1)); end [val,predpreyfocusedon(k,1)]=max(peakest); % Picks the predator/prey expected to have the highest peak end decisiontime=0; % Do not decide again until detect that predators/prey (consider it % "detected" when T(i,.) goes to zero) end if deltacounter>=deltas % First, implement delay due to switching from one predator/prey to another predpreyprocess=1; % Flag to indicate that we are now going to focus on the predator/prey % (once deltas is achieved and predpreyprocess=1; the counter does not increment % more and so it always lets predpreyprocess=1; to represent that it is continually % processing it.... and it resets deltacounter only after it has detected) else deltacounter=deltacounter+Tsample; % Increment delay since computing T(i,k+1) (note that % at every time we are focusing on something so % at every time we need to compute this delay) % Also, note that below the test for the delay % accounts for incrementing the counter past delta end if predpreyprocess==1 % If switch delay is over, then can start trying to detect predator/prey if e(predpreyfocusedon(k,1),k)==1 % Consider this test for "detection" to only indicate one pulse detectedpredprey=1; % If detect predators/prey set flag end end % Note: When for times that predpreyprocess==1, after the first one appearance that sets % detectedpredprey=1; this loop will have no effect since the if..end will either leave % detectedpredprey=1; by not being true or if it is true. if predpreyprocess==1 & detectedpredprey==1 deltaT=((1-a(predpreyfocusedon(k,1),1))/a(predpreyfocusedon(k,1),1))*Tsample; if T(predpreyfocusedon(k,1),k)-deltaT>0; % Must test if will hit zero (to keep nonneg) T(predpreyfocusedon(k,1),k+1)=T(predpreyfocusedon(k,1),k)-deltaT; else T(predpreyfocusedon(k,1),k+1)=0; % Set it to zero since it finishes (an approximation % that is accurate in the sense that it is conservative) deltacounter=0; % Reset the delay counter to prepare for next predator/prey decisiontime=1; % Signal a decision time since just detected an predator/prey detectedpredprey=0; % Reset for use in detection of next predator/prey predpreyprocess=0; % Reset for next loop end else T(predpreyfocusedon(k,1),k+1)=T(predpreyfocusedon(k,1),k)+Tsample; % Increment amount of time % since last detect end for i=1:N if i~=predpreyfocusedon(k,1); % If predator/prey that is focused on is not i T(i,k+1)=T(i,k)+Tsample; % Update the amounts of time since last focused on each predator/prey end endend% Compute the output of the subroutineJ=mean(avgT);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -