Automatic spur is a means to implement the idea that an intrinsic feature of an intelligent system is adherence to the principle of minimum energy (or maximum probability). The use of automatic spur may substantially increase the optimality of output signals an actor emits. The automatic spur also makes it possible to use the actor in cases when there are no explicit spur increments supplied to it.
The automatic spur is useful when the actor models a finite automaton. In this case, the output signals of the actor represent its internal states, that is, finite automaton states, and each action choice state is a superposition of the previous internal state and an input signal received when the actor was in that previous internal state. The automatic spur is a measure of adequacy of a model of internal states to a sequence of input signals received.
In QSMM, a common approach to building a model of internal states of an entity to solve a problem is the use of a spur scheme with two spur types for inhibitory (negative) spur and excitatory (positive) spur countervailing each other. The inhibitory spur is the automatic spur typically with a normal way of perception. The excitatory spur is specific to the problem to solve.
If an actor uses the automatic spur, it is equal to the sum of automatic spur increments calculated by the function
qsmm_actor_reg_sig_in for action choice states that have prior occurrences in the event history.
For such an action choice state,
qsmm_actor_reg_sig_in knows an output signal emitted at the previous occurrence of this action choice state.
Note that for the last occurrence, an output signal emitted in the action choice state is not yet known in
The actor calculates an automatic spur increment for a pair representing the logical consequence h → z and consisting of an action choice state h and an output signal z emitted in this action choice state. The automatic spur increment is equal to the natural logarithm of the probability of occurrence of this pair in the event history:
This formula uses the following notations:
The number of occurrences of the pair in the event history.
The discrete time of the previous occurrence of the pair in the event history.
qsmm_actor_reg_sig_action records that time.
The mean number of output signals emitted per one unit of discrete time passed.
If an actor uses a single spur type, and it corresponds to the automatic spur, it is better to set the type of a relative probability function for the actor to
However, it is also better to use the automatic spur in conjunction with the other countervailing spur evaluating progress in solving a problem in some other way.
Use the functions described below to query or set a spur type for the automatic spur.
By default, an actor created by the function
qsmm_actor_create does not use the automatic spur, except that an implicitly created small actor associated with the large actor uses it.
This function returns the non-negative index of a spur type for automatic spur used by an actor or negative error code
QSMM_ERR_NOTFOUND if the actor does not use the automatic spur.
This function sets to spur_type the spur type for the automatic spur of an actor. Spur types have zero-based indices. If spur_type is equal to -1, the actor does not use the automatic spur; this condition does not affect the use of the automatic spur by a small actor associated with the large actor.
On success, the function returns a non-negative value.
If spur_type is less than -1 or is greater than or equal to the number of spur types specified in the field
qsmm_actor_desc_s structure when creating the actor, the function returns negative error code
Use the functions
qsmm_set_actor_naction_per_evt to query and set the value of K.
A small actor can use at most one spur type for the automatic spur.
qsmm_set_actor_auto_spur_type called for a small actor query and set the index of a spur type for that automatic spur.
A large actor can use at most two spur types for the automatic spur.
A small actor associated with the large actor can use the automatic spur of the first type—increment it for action choice states occurring in the event history of this small actor.
Those action choice states represent Huffman tree nodes traversed to generate output signals by the large actor.
The large actor itself can use the automatic spur of the second type—increment it for action choice states occurring in the event history of that large actor.
qsmm_set_actor_auto_spur_type called for a large actor query and set the index of a spur type for the latter automatic spur.
Historically, the function
qsmm_actor_create creates a large actor with the automatic spur of the first type turned on by default.
You may want to turn it off and make the large actor use the automatic spur of the second type instead.
To turn off the use of the automatic spur of the first type by a large actor actor_large, write:
qsmm_set_actor_auto_spur_type( qsmm_get_actpair_actor_env( qsmm_get_actpair(qsmm_get_actor_large_model(actor_large))), -1)
To conserve memory, you can reuse a spur type for the automatic spur of the first type for another purpose. For a small actor associated with the large actor, this spur type has index 0. By default, the small actor uses discrete time to compute spur increment velocity for this spur type. For the large actor, this spur type has special index -1.