\Davison & Baum JEAB 2000: Within-session procedure with 7 concurrent
\reinforcer ratios across components after Belke & Heyman (1994) JEAB
\concurrent dependent exponential VI VI schedules
\Two key concurrent. Two yellow keys. Random changes in reinforcer ratios.
\Michael Davison
\
\NOTE: 50 sessions per condition. Please keep all sessions detailed data (or at least the last 35!)
\Outputs
^LKYel=1
^RKYel=2
^Rft=4
\(Mag and mag light hardware commoned)
\z pulse
^ReinforcerStart=1
\Inputs
^Lkey=1
^RKey=3
\(Center key not used)
\List q is the list of the experimental setup
\q(0) = Baserate of rfts (R/s)
\q(1) = rft duration (s)
\q(2) = timeout between components (s)
\q(3) = Reinforcers per component
\q(4) = cod (s)
\List q = 10000/27,2.5,10,4,2\ Condition 4
\for exponential (Random-interval, RI, schedules, 10000/27 is VI 27 s if sampled once per s)
\List r is the set of probabilities of left reinforcers in the 7 components
List R=357,1000,2500,5000,7500,9000,9643
\list s is a set of subscripts for list r (need subscripts for detailed
\data collection
list s = 0,1,2,3,4,5,6
\List x is the detailed data array
dim x=5000
\and y is the counter for this array
\codes (all stored codes are time in seconds + code
\code for session start = 0
^PeckLeft=10000
^PeckRight=20000
^RftLeft=30000
^RftRight=40000
^BlackoutStart=50000
^Sessend=60000
\and component starts are the value of component index s(i) * 100000 (all components are
\listed from lowest p left to highest p of reinforcers on left)
\counters (for daily printouts only)
\c(0)=Leftkey responses
\c(1)=Rightkey responses
\c(2)=Leftkey reinforcers
\c(3)=rightkey reinforcers
\etc for each of the 7 components
dim c=27
DiskVars=c,q,x
s.s.1,
s1,\ Starting state, setting up
#start:set y=0;
set x(y)=btime/1",q(1)=q(1)*1",q(2)=q(2)*1",q(4)=q(4)*1";--->s2
s2,\ Time out, then randomly (without replacement) determine which component
q(2) #T:set n=0;
Randd p=s;
add y;
set x(y)=p*100000+btime/1";
on ^LKYel,^RKYel;--->s3
s3,\ Main routine
#R^Lkey:Add c(p*4+0);\ count responses on this key in this component p
add y;\ increment index
set x(y)=^PeckLeft+Btime/1";\ put codetime in x(y)
if (s.s.2=3) and (s.s.4=4)[@rft,@no]\ check if out of COD and if RFT set up
@rft:off ^LKYel,^RKYEL;
on ^rft;
add c(p*4+2);\ add to reinforcer counter for this key in this component p
add y;
set x(y)=^RftLeft+Btime/1";
add n;--->s4\ n is a local counter of reinforcers in a component
@no:--->sx
#R^RKey:add c(p*4+1);
add y;
set x(y)=^PeckRight+btime/1";
if (s.s.2=4) and (s.s.4=6)[@rft,@no]
@rft:off ^LKYel,^RKYel;
on ^Rft;
add c(p*4+3);
add y;
set x(y)=^RftRight+btime/1";
add n;--->s4
@no:--->sx
s4,\ Reinforcers
q(1)#t:off ^rft;
z^ReinforcerStart;
if n=q(3)[@nextcomponent,@stay] \ check if the component should end
@nextcomponent:add y;
set x(y)=^BlackoutStart+btime/1";--->s2 \ if so, delay and then select the next component
@stay:on ^LKYel,^RKYel;--->s3
s.s.2,\ Scheduling (Dependent, exponential)
s1,
#start:--->s2
s2,
1":if s.s.1=3[@time,@dont]\ Only time if in main routine, then sample every 1 s
@time:withpi=q(0)[@setrft,@Dontset]\ This is the baseline VI 27-s schedule
@SetRft:withpi=r(p)[@SetLeft,@SetRight]\ allocate RFT to left or right according to r(p)
@SetLeft:--->s3
@SetRight:--->s4
@Dontset:--->sx
@dont:--->sx
S3, \ LK rft setup
#z^ReinforcerStart:--->s2\ go back and time some more when reinforcer is taken
s4,\ RK Rft set up
#z^ReinforcerStart:--->s2
s.s.3,\ Ending the session
s1,
#start:--->s2
s2,
70#z^ReinforcerStart!2800":off 1,2,34;--->stopabortflush\ End session after 70 reinforcers or 2800 s
s.s.4,\ Changeover delay
s1,
#start:--->s2
s2,
#R^Lkey:--->s4\ no changeover delay on first response in session
#R^RKey:--->s6
s3,\ Within COD left key
q(4)#t:--->s4\ time the changeover delay
#R^Rkey:--->s5\ if emit a right response, start timing on the right alternative
s4,\ Without COD Left key
#R^RKey:--->s5\ COD finished timing on left, right response starts timing on right
s5,\ Within COD Right key
q(4) #t:--->s6
#R^Lkey:--->s3
s6,\ Without COD Right key
#R^Lkey:--->s3 |