310 likes | 445 Views
ACT-R 6 Why aren’t you using it yet?. Dan Bothell April 8, 2005. What is ACT-R 6?. ACT-R 5 cleaned up Unify/standardize the buffer mechanism Better integration of the Cognitive and PM components One time maintenance mechanism Make the whole system modular
E N D
ACT-R 6Why aren’t you using it yet? Dan Bothell April 8, 2005
What is ACT-R 6? • ACT-R 5 cleaned up • Unify/standardize the buffer mechanism • Better integration of the Cognitive and PM components • One time maintenance mechanism • Make the whole system modular • Make it easier to add/remove modules
How similar is it to 5? • Lots of similarities • Most of the commands are still around • sgp, p, add-dm, run • Models look basically the same • Same equations • Procedural • Utility calculation and utility learning* • Declarative memory • Activation equation, Spreading activation, Base-level learning, retrieval time • Same PM system
Where are things now? • It is available and working • Performance comparable to ACT-R 5 • Slightly better on average over the tutorial, but does vary • Has the tutorial models for units 1-6 • With all the changes needed to update from 5 detailed • Tutorial unit texts for units 1 and 2 • Formatting still a little rough but the content is good • Get it at http://act-r.psy.cmu.edu/act-r6 • Or via Subversion (http://subversion.tigris.org/) from svn://alba.psy.cmu.edu/usr/local/svnroot/actr6
What is it missing? • The rest of the tutorial unit texts • Production Compilation • The ACT-R Environment • Manuals (of course so is ACT-R 5)
Big General Differences • Not backward compatible! • The set of all chunks does not equal DM • Model files can be compiled • Clearall doesn’t do a load-time read • Requires use of the define-model command • Supports multiple models “out of the box” • Both synchronous and asynchronous
More minor general differences • Removed some duplicate commands • The PM commands have had the “pm-” stripped from them • For example pm-proc-display is now proc-display • “Old” named commands are removed • In particular anything that included wme • Sgp sets parameters for all modules • Trace is more detailed (at least by default)
Buffers • They all work the same • Hold a chunk • Relay queries and requests to/from a module • The chunk is a copy • Doesn’t exist outside of the buffer • Changes to the buffer’s chunk are not reflected back onto the original chunk • Essentially chunk creation scratch pads • Can be a source of Activation • Individual parameters like W (:ga).
Declarative Memory • Holds only the chunks that are added explicitly or those that come from the buffers • When a buffer clears the chunk merges into DM • True for all buffers • Those merges are the references for base-level learning • Not the LHS usage as in ACT-R 5 • Because buffers hold copies DM chunks can’t be changed from within a production
Declarative Finsts • Major reason for changing chunks in DM was to mark them to prevent retrieval • Now there are automatic markers just like vision • They are limited in time and number • settable with parameters • Indicated with the request parameter :recently-retrieved +retrieval> isa fact :recently-retrieved nil
Productions: General differences • No LHS Retrievals! • Can’t use !eval! in the slot value position • Won’t flag it as an error or warning though at this point because a list is a “valid” value • Binding order not as important: (p test =goal> isa goal - value =that =retrieval> isa fact slot =that ==> …) works without problems
Productions LHS • =buffer> • ?buffer> • !eval! • !bind! • !safe-eval! • !safe-bind!
LHS =buffer =buffer> isa chunk-type {{modifier} slot-name slot-value}* • Same as it was in ACT-R 5 • Tests the chunk in the buffer
LHS ?buffer> • No more *-state buffers • Replaced with the buffer query operator ?buffer> {query value}* • Must reply non-nil to match • Two queries are mandatory for a buffer/module to respond to • State with values busy, free, and error • Buffer with the values full, empty or stuffed • Any others can be added by the module writer • Modality for the current PM modules for example
The LHS !’s • !eval! and !bind! just like before • Must be non-nil for production to match • !safe-eval! and !safe-bind! operate just like the non-safe versions • Difference is that production compilation will not compile productions that use the non-safe version
Production RHS • =buffer> • -buffer> • +buffer> • !eval! and !safe-eval! • !bind! and !safe-bind! • !output! • !stop!
RHS =buffer> • Immediately manipulates the chunk in the buffer • Two forms =buffer> {slot value}* • Same as always – sets the slots to have the specified values • =buffer> chunk-reference • Copies that chunk into the buffer • Partial generalization from the ACT-R 5 “+buffer> chunk” mechanism
RHS –buffer> -buffer> • Clears the chunk from the buffer • That’s it! • Does not result in any action by the module • Unlike ACT-R 5 where that could also cause the module to reset/clear
RHS +buffer> • Sends a request to the module • Three forms +buffer> isa chunk-type {{modifier} [slot | request parameter] value}* +buffer> chunk-reference +buffer> {slot value}*
+buffer> isa +buffer> isa chunk-type {{modifier} [slot | request parameter] value}* • Sends that request to the module just like ACT-R 5 • Only difference is the addition of the request parameters in addition to slots • Specific to the buffer and defined with the module • Valid no matter what the chunk-type • Always a keyword to distinguish it from a slot
+buffer> chunk +buffer> chunk-reference • Generalization of the ACT-R 5 mechanism • Expands the chunk “in place” and sends the request as if all the chunk’s slots and values (including the type) were specified • Works the same for all buffers • Not exactly the same as ACT-R 5
+buffer> modification +buffer> {slot value}* • Sends a request to the module to make a change to the chunk in the buffer • Must have matched the buffer on the LHS • Replaces the remapping of =buffer> that was possible in ACT-R 5
Strict harvesting • New mechanism of productions • When a buffer is matched on the LHS of a production it is automatically cleared on the RHS unless there is an =buffer action to keep it around • Parameterized so that one can specify which buffers get “strict harvested” • Out of the box all but the goal buffer do right now • Cleans up issues with • References for BLL • Production compilation • Micro-managing perceptual buffers
Vision Module • Attended slot is gone • Replaced by a request parameter +visual-location> isa visual-location :attended nil • And a query ?visual-location> attended nil • Good because now visual-locations can merge properly without the changing attended slot • The query can match nil to new but the slot couldn’t
Vision Module cont. • Attention Shifts changed from +visual> isa visual-object To +visual> isa move-attention • Removes the need for the scale slot in visual-objects • Only has the two slots screen-pos and scale
Vision module cont. 2 • Now must use: +visual> isa clear • To explicitly clear (reset) the vision system because –visual> doesn’t send an automatic clear to the module anymore • Same for the motor system +manual> isa clear instead of –manual>
Experimental addition: P* • Exactly like p except slot-names can be variablized • On both the LHS and the RHS • Limited variability (for now at least) • Will not do any binding – the variable must be bound elsewhere • Only one level deep per buffer test
Random “module” • Includes a pseudo-random number generator • Mersenne Twister – considered the best available for Monte Carlo simulation purposes • Can set the seed with sgp • Guarantees repeatability regardless of Lisp or OS • Great for the tutorial because students get the exact same trace as shown in the text • Useful for debugging because the same situation can easily be recreated
Naming “module” • Replaces the use of gentemp • Counters start at 0 for each name • Gets reset to 0 when the model resets • A deterministic model will always have the same names for things
Issues with copying and merging chunks • The ACT-R 6 merging mechanism doesn’t replace all occurrences when merging • Time/space prohibitive because of how often the merging occurs • Buffers have chunks with “new” names • Can end up with chunks that don’t “look” the same that do merge • Traces can look a little odd with references to differently named slots • Unit 5 with partial matching shows that • No solution at this point – just something to be wary of • Could try to hide it, but that may be more confusing