AchiralAchiral

Concepts · Humans and machines

How ACT-R uses production rules to choose actions from the current goal, buffers, and retrieved memory.

Published2026-08-22
0 reads
Editorial illustration of tools arranged as production rules, with a nut-and-bolt cue activating a spanner.

Production Rules and Procedural Memory

ACT-R has two main kinds of knowledge. Declarative memory stores what the system knows. Its unit is a chunk. Procedural memory stores what the system can do. Its unit is a production rule.

A production rule is an "if-then" rule. If the current situation matches the rule, the rule can fire. When it fires, it changes something. It might update a goal. It might ask declarative memory for a chunk. It might send a command to another module.

What is a Production?

In ACT-R terms, a production is a condition-action rule. The condition says what must be true. The action says what to do next.

Here is a rough sketch:

text
IF
  the goal is to reset Susan's password
  and the retrieved memory says the last reset failed
THEN
  ask Susan for the failure code

The example above is not official ACT-R syntax. It gives the general idea. ACT-R compares the rule's condition with the current state using chunks. If the state fits, the production becomes a candidate action.

Productions read buffers

ACT-R does not let a production inspect all memory directly. Productions match against buffers. A buffer is like a small surface to work with. It holds the chunk that matters right now.

For simplicity, we'll use the following three buffers:

  • The goal buffer holds the current goal.
  • The retrieval buffer holds the chunk returned from declarative memory.
  • Perceptual and motor buffers can hold what the system sees or is doing.

A production can ask:

text
Is the goal about password reset?
Is the retrieved chunk about Susan?
Does the retrieved chunk say the last reset failed?

If the answers fit the rule, the production can fire. That is why buffers matter. They give procedural memory a clean and narrow view of the current situation.

Productions do not store facts

A production is not a fact. A chunk might say:

text
user: Susan
task: password-reset
status: failed

A production says what to do with that fact:

text
If the user is Susan
and the task is password reset
and the last attempt failed,
then ask for the failure code.

The chunk is knowledge. The production is a rule for action. ACT-R keeps these separate because remembering and acting are different jobs.

Only one production fires

Many productions can match at the same time. Suppose an assistant is helping Susan.

Several rules might fit. For example:

  • Ask for the failure code.
  • Check whether the account is locked.
  • Offer to retry the reset.
  • Escalate to a human support agent.

ACT-R does not fire all of them together. It chooses one.

The choice process is called conflict resolution. In plain terms, the job of conflict resolution is to ask one question:

text
Which matching rule should act now?

That choice matters. Procedural memory is not just a bag of rules. It is a way to choose the next step by weighing the matching options.

Utility helps choose

ACT-R uses utility to help choose among matching productions. Utility means expected usefulness. A rule that often helps should become easier to choose. A rule that wastes time should become harder to choose.

The ACT-R reference manual describes utility as a number attached to a production. When several productions match, ACT-R selects the one with the highest current utility.

When utility learning is turned on, ACT-R updates utility like this:

Ui(n)=Ui(n1)+α[Ri(n)Ui(n1)]U_i(n) = U_i(n - 1) + \alpha [R_i(n) - U_i(n - 1)]

Here is what the parts mean:

  • Ui(n)U_i(n) is the new utility of production ii.
  • Ui(n1)U_i(n - 1) is its previous utility.
  • α\alpha is the learning rate.
  • Ri(n)R_i(n) is the reward value for that use.

A simpler way to think about it is:

text
expected gain - expected cost

That is not the full model. ACT-R does not treat every matching action as equal. It can prefer the action that has worked better before.

The ACT-R loop

Now the loop becomes clearer:

text
goal -> buffers -> matching productions -> chosen production -> action

The system starts with a goal. Buffers hold the current pieces of information. Productions match against those buffers. Conflict resolution chooses one production. That production fires and changes the state. Then the loop starts again.

This is how ACT-R turns knowledge into behavior.

A small support example

Imagine an assistant helping Susan with a failed password reset. The goal buffer holds:

text
goal: resolve-password-reset
user: Susan

The retrieval buffer holds:

text
user: Susan
task: password-reset
status: failed
failure-code: unknown

A production might match this state:

text
IF
  goal is resolve-password-reset
  and failure-code is unknown
THEN
  ask for the failure code

After that production fires, the state changes. The assistant is no longer in the same situation. It now has a new question in motion.

That is the point of a production. It moves the system from one state to the next.

Why this matters for AI memory

Memory discussions often stop at storage. They ask:

text
What should we save?
What should we retrieve?

ACT-R adds a more practical question:

text
What should the system do with what it retrieved?

That question matters. A memory can be true and still not be useful right now. A memory can be useful and still need the right action around it.

If Susan's last password reset failed, the assistant should retrieve that fact. But retrieval is not enough. The assistant should use the fact to choose the next step.

What Achiral borrows from ACT-R

Achiral is ACT-R-inspired, but it is not a full ACT-R implementation.

We borrow some useful ideas from procedural memory:

  • chunks for remembered knowledge
  • buffers for the current context
  • productions for action rules
  • conflict resolution for choosing the next step
  • utility for preferring rules that tend to work

That separation helps Achiral treat memory as more than storage.

A memory should decide which facts are available. It should also help decide how those facts can guide action.

What productions do not solve

A production does not solve judgment by itself. A rule can be too broad. A rule can be too narrow. A rule can fire in the wrong context. A rule can encode a bad habit.

ACT-R gives modelers a way to describe action selection. It does not remove the need for policy, testing, review, or safety boundaries.

That matters for AI systems. A customer support rule, a medical triage rule, and a private user preference carry different risks.

The takeaway

A production is ACT-R's unit of procedural knowledge. It says:

text
If the current state looks like this,
do this next.

Productions match buffers. Conflict resolution chooses one. Utility helps explain why one rule may be chosen over another.

Chunks help ACT-R remember. Productions help ACT-R act.

Sources

Go back to ACT-R Chunks and Declarative Memory, continue with ACT-R Memory vs Agent Memory, or return to the Concepts hub.