\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