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

📄 attentionenv.m

📁 一个用MATLAB编写的优化控制工具箱
💻 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 + -