dynamic ratio model

[From Bill Powers (950718.0940 MDT)]

Well, we're as ready as we're going to get for the big event, so I'm
waiting around now for Gary's bicycle to be delivered and the first
guests to arrive (in the afternoon).

···

---------------------------------------------------------------------
Bruce Abbott (950718.0955 EST) --

Here's a dynamic model to play around with:

p := p + (kv*r - kd*p)*dt;
e := ref - p;
b := km*kt*e;
r := b/m; {for ratio schedule}

Where
p = perceptual signal (received value, could be "v")
kv = value per reinforcement
r = reinforcement rate, per sec
kd = proportional decay rate
km = overall sensitivity factor
kt = fraction of time spent on task ( max = 1)
dt = time per iteration (probably 0.1 sec would be short enough)
e = error signal
b = behavior rate, per sec
m = ratio

The cost-benefit business can be worked like this:

if kv < kc then
kt := 1.0 + kg*(kv - kc)
else kt := 1.0.
if kt < 0 then kt := 0;

where
kg := gain of cost-benefit control
kv := same value constant as above
kc := cost per behavior per second

-----------------------------------
RE: Units

It's a good idea to set up the model using physical units, just to make
it easier to understand the meanings of the various variables and
parameters, and to start out with numbers in the right ballpark.

If kc is 1/m of kv, the flattening will start (going left) at a ratio of
m. So for the peak to occur just left of the ratio mp, we have

kc = kv/mp

The steady-state gain of the perceptual function is kv/kd and the time
constant tc = 1/kd sec.

Inside the model, all signals are measured in what I call nsu -- nervous
system units. So if the gain of the perceptual function is kv/kd, the
perceptual signal is p = (kv/kd)*r nsu.

Suppose you want to set a reference _signal_ of "ref" nsu to produce an
observed reference _level_ r reinforcements per sec. This
means that

kv/kd = ref/r = 1 nsu/(reinforcement per sec)

At the same time, suppose we want the perceptual time constant to be tc
sec. This means that

kd = 1/tc.

Since kv/kd = 1, we have

kv = 1/tc nsu/(reinforcement per sec)

Finally, there is an output gain factor made of the product km*kt. The
total gain G from the reinforcer input r to the behavioral output b is
the perceptual gain times -1 (the inversion of sign in the comparator)
times this output gain, or

G = -(kv/kd)*km*kt = -km*kt.

If the observed ratio of reinforcement to behavior near the reference
level is G,

km*kt = -G

Since kt is nominally 1.0 (all time spent on task), this leaves

km = -G.

To summarize, we thus have

dt = 0.1 (sec)
kv = 1/tc (nsu/(reinforcement per sec)
kc = kv/mp (nsu/reinforcement per sec)
kd = 1/tc (sec^-1)
km = -G ((behaviors per sec)/nsu)
kt = 1.0 (fraction, reduced by cost-benefit process)
where
  mp is the ratio at the approximate location of the peak
  G is the observed slope near the reference level (normally negative)
  tc is the time constant of the perceptual function
  Reference level in NSU = reinforcements per _hour_

If the observed time constant of behavior is tobs, the time constant of
the reference signal should be set to tobs*G. The apparent time constant
will be the actual time constant divided by the loop gain which, because
of our choice of units, is G.

Note that only three parameters need to be adjusted, once the above
parameters have been determined from the data: kg, kc, and ref. You set
kg and kc to make the left side of a Motherall plot droop at the right
place by the right amount, and ref to make the reference level come out
right. Remember that all time units are in seconds.
--------------------------------------
I'm laying all this out in case you want to try out a model while I'm at
the meeting, and also partly just to get it organized in my head. Hope I
got it all right.

Wish you were going to be here for the meeting!
-----------------------------------------------------------------------
Best,

Bill P.