Go backward to Learning in Soar.
Go up to Learning in Soar.
Go forward to Determining conditions and actions.

Chunk creation
==============

Several factors govern when chunks are built.  Soar chunks the results of
every subgoal, *unless* one of the following conditions is true:

  1. Learning is off.  (See Section See learn on page See learn for
     details of learn.)
     
     Learning can be on or off.  When learn is on chunks are built.  When
     learn is off, chunks are not built.
     
  2. Learning is set to bottom-up (using learn as described in Section 
See learn on page See learn) and a chunk has been built for a subgoal
     of the goal that generated the results.
     
     With bottom-up learning, chunks are learned only in goals in which no
     subgoal has yet generated a chunk.  In this mode, chunks are learned
     only for the "bottom" of the subgoal hierarchy and not the intermediate
     levels.  With experience, the subgoals at the bottom will be replaced by
     the chunks, allowing higher level subgoals to be chunked.
     
     
  3. The chunk duplicates a production already in production memory.  In some
     rare cases, a duplicate production will not be detected because the
     order of the conditions or actions is not the same as an existing
     production.
     
     
  4. The augmentation, ^$quiescence t, of the subgoal that produced the
     result is backtraced through.
     
     This mechanism is motivated by the *chunking from exhaustion* problem,
     where the results of a subgoal are dependent on the exhaustion of
     alternatives (see Section See Problems with chunking on page 
See Problems with chunking).  If this subgoal augmentation is encountered
     when determining the conditions of a chunk, then no chunk will be built
     for the currently considered action.  This recurs, so that if an
     un-chunked result is relevant to a second result, no chunk will be built
     for the second result.  This does not prevent the creation of a chunk
     that would include ^$quiescence t as a condition.
           
  5. The problem space of the subgoal being chunked has been made "chunk
     free" by the function chunk-free-problem-spaces (see Section 
See chunk-free-problem-spaces on page See chunk-free-problem-spaces).
     
     This capability is provided for debugging and system development, and it
     is not part of the theory of Soar.

If a result is to be chunked, Soar builds the chunk *as soon as the result is
created*, rather than waiting until subgoal termination.