Economics

[From Bruce Abbott (2000.09.07.0430 EST)]

Bill Powers (2000.09.06.1400 MDT)]

Appended below is the Pascal source code for "circflow.pas", my version of
the TCP circular flow model.

For those few of us who have Borland's Pascal and wish to run this program,
please note that you will have to set the compiler to use "8087" code if you
have not already done so. The program's use of "double precision" variables
makes this a requirement.

This done, the program compiles fine and works just as described.

Bruce A.

[From Bruce Gregory (2000.0908.1058)]

Bill Powers (2000.09.08.0448 MDT)

I'm interested only in modeling a viable system: if we're
doomed, what's
the point of modeling anyway?

We are definitely doomed, individually and collectively. But we have to
do _something_ while waiting for the end, and modeling is a relatively
harmless pastime.

BG

[From Rick Marken (2000.09.08.0920)]

re: Bill Powers (2000.09.06.1400 MDT)--

Here's a couple of suggested changes to the circflow code:

1) change

  if INV >= B/P then

to

  if INV >= B/(P*INV) then

B is the amount of $ available to purchase inventory (INV)
and P*INV (not just P, which is a constant) is the current
$ cost of the inventory. So B/(P*INV) is the amount of
inventory purchased, in units of Q (a result of dividing
$ by $).

2) change

    INV := INV - B/P;

to

    INV := INV - B/(P*INV);

For the same reasons as above. I think the amount of inventory
purchased on each iteration (in Q units) is B/(P*INV), not B/P.

3) change

    PS := PS + B;

to

    PS := PS + B/P;

where B/P is the $ income from the purchase of B/(P*INV) of
inventory; that is, multiply B/(P*INV) by INV to convert
the result from $ to Q:

B/(P*INV)*INV = (B*INV)/(P*INV) = B/P

These changes, if you agree with them, don't seem to make
much of a difference in the behavior of the system. I think
I agree with the logic of your program. But I'd like to
mull it over a bit more. Let's try to get some control
systems in there soon.

By the way, if there are people sans Pascal who want to
participate in this exercise, I have a version of this model
written in Excel Visual Basic which I can e-mail to you if
you want.

Best

Rick

···

--
Richard S. Marken Phone or Fax: 310 474-0313
MindReadings.com mailto: marken@mindreadings.com
www.mindreadings.com

[From Rick Marken (2000.09.08.1500)]

re: Rick Marken (2000.09.08.0920)

Never mind, Bill. Your equations are right, I think, after
all.

Best

Rick

···

--
Richard S. Marken Phone or Fax: 310 474-0313
MindReadings.com mailto: marken@mindreadings.com
www.mindreadings.com

[From Rick Marken (2000.09.09.1710)]

Bill Powers (2000.09.09.1230 MDT)

And here is the problem I started suspecting a new days ago:
there's no _a priori_ basis for assuming any particular way
in which z and N will change. We can't deduce the exponential
growth curve from first principles.

That is basically the problem I noticed some time ago when I
embarked on this modeling effort. But I saw the problem in
terms of leakage. TCP simply _assumes_ that leakage affects
growth rate: r = zdot+Ndot-alpha (equation 2-29, p.101). I
discovered this because the effect of leakage on growth rate
did _not_ occur in my implementation of the circular flow
model. You found this surprising, as I recall. Now I think you
can see what I was getting at; TCP didn't derive the effect of
leakage on growth rate from first principlces; he just _assumed_
that it occurs.

I think TCP's major contribution was his conception of the
circular flow: the composite producer must be paying the
composite consumer enough to buy PQ and, thus, pay back the
costs of production. But he didn't have a model of how this
process worked. That's where we come in; we have to implement
a reasonable circular flow model and see how various composite
variables (undistributed corporate profits, savings, etc)
influence important variables in the model, like growth rate,
inflation rate, etc.

All we can do is try to obtain z and N separately from the
historical record, and from them compute the GNP as a function
of time. Rick, is that information in the Statistical Abstracts?

N and Ndot (population and population growth rate) are certainly
in there. I imagine there are measures of productivity in there
somewhere but they're not in the particular chapters I've looked
at.

I don't believe that we should go into the model assuming that
growth in Q is determined, open loop, by zN. I think Q must
be part of a closed loop process. I can't help thinking that,
if we do the model right, we should be able to predict things like
growth in Q and the effect, if any, of leakage on growth, from
first principles: the principles on which the model is built.

Best

Rick

···

---
Richard S. Marken Phone or Fax: 310 474-0313
Life Learning Associates e-mail: marken@mindreadings.com
mindreadings.com

[From Rick Marken (2000.09.09.2000)]

Me:

I think TCP's major contribution was his conception of the
circular flow: the composite producer must be paying the
composite consumer enough to buy PQ and, thus, pay back the
costs of production.

Bill Powers (2000.09.09.1910 MDT) --

Actually that's a standard diagram in macroeconomics, I think.

Yes, it is. For example, there is an excellent diagram of the
circular flow in one of the economics texts I bought recently. See
Figure 4.1, on p. 59 of S. D. Casler, Introduction to Economics,
Harper Collins Outline Series, 1992. But even with the diagrams,
the macroeconomic models that are ostensibly based on these diagrams
are completely open loop.

The principle is contained in Say's Law (see p. 87) which says
"Production creates not only the supply of goods, but also the
demand for them."

This is a good start but I don't think it makes the closed loop
circular flow clear; what is not emphasized (and never incorporated
into macroeconomic models) is that the demand must be returned to
the composite producer as income to cover the expense of creating
that demand for the composite consumer. TCP made this other half
of Say's law clear by showing what would happen if all the demand
created by production was _not_ returned to the composite producer.

My name is Bill and I'm a modeler.

Hi Bill. I'm sure glad you've started showing up at these
meetings.

Best

Rick

···

--

Richard S. Marken Phone or Fax: 310 474-0313
Life Learning Associates e-mail: marken@mindreadings.com
mindreadings.com

[From Rick Marken (2000.09.10.1920)]

Bill Powers (2000.09.10.0418 MDT)

There is nothing to limit expansion, then, but the speed with
which the composite producer can learn to produce more Q per
worker and get it to the consumers.

And that is very much higher than the rate at which the economy
normally expands -- from the data, TCP estimated it at over 13
percent per year. Why doesn't it expand that fast? Because (1)
money is not free, (2) some money is lost from the circular flow,
and (3) there are limits on the rate at which new workers can be
brought into the workforce.

I would also add (4) there are limits to the rate at which the
desire for more Q can increase. I don't believe Q would grow
at an arbitrarily high rate if money were free, no money were
lost from the circular flow and you could increase the workforce
arbitrarily. As you've noted yourself, people only want so many
goods and services: toasters, ovens, cars, houses, massages. If
the economy were producing so that Q consisted of 1000 of each of
these goods and services per capita and there were enough demand
to buy all of Q (B = PQ) I don't believe that all of Q would be
bought (too bad we can't run the experiment). I can't think of a
way (off the top of my head) to test to determine whether Q
is controlled; buy I think it must be.

What do you think?

Best

Rick

···

--
Richard S. Marken Phone or Fax: 310 474-0313
Life Learning Associates e-mail: marken@mindreadings.com
mindreadings.com

[From Rick Marken (2000.09.11.0840)]

Bill Powers (2000.09.10.2033 MDT)--

On the average, which is what we have to deal with in
macroeconomics, we live in a scarcity economy.

I agree. But I think we should start by building a macro economic
control model that works properly (keeps Q at the reference).
I don't think we should start by trying to build a dysfunctional
model of an economy just because some economies appear to be
dysfunctional anymore than we should start by trying to build
a dysfunctional model of an outfielder just because some outfielders
can't catch a ball that's handed to them.

Because of these and other considerations, I'm not sure we can
have a wholly sucessful model based on a sort of average Q.

All I was pointing out was that the model must have a reference
for Q; Q (or some function of Q, like PQ in my model) must be
a controlled variable, not an output that is generated open loop.
I'm sure we agree on this. I also think a model that deals with
average Q could be more successful than you might imagine. When
you look at the economy from way high up -- the macroeconomic
control view -- the essential ingredients become pretty clear,
I think. At the macro level, the complex, microeconomic details,
which often obscure rather than clarify the high level control
process that is an economy, become irrelevant

Best

Rick

···

--
Richard S. Marken Phone or Fax: 310 474-0313
MindReadings.com mailto: marken@mindreadings.com
www.mindreadings.com

[From Rick Marken (2000.09.11.1500)]

Bill Powers (2000.09.11.1248 MDT)--

I agree that the consumer must have a reference for Q. What,
however, is the composite consumer's means of affecting Q?

I think this is where we have to remember that the composite
consumer and producer are really the same entity; a composite
controller. If we had no specialization, everyone would be
producing their reference amount of Q (as best as they could)
all on their own. Each person would know how much Q they
actually had and they would put out effort to make more Q in
proportion to the difference between the actual and their
reference amount of Q. How this gets implemented in a
specialization and money based economy is the problem to be
solved, I think.

If you want to work on the Q control system, the question that
needs an answer is how an error in Q gets converted into an
increase or decrease in Q. The answer isn't obvious -- how does
a CC who wants more Q get the CP to produce more Q?

Why can't we just assume that the CP and CC are the same entity
so they don't need to communicate. In real life, it's the manager's
of industry who determine how much workforce to employ in order to
increase or decrease Q. So why not assume that these managers are
the proxies for everyman; it's their reference for Q that influences,
in part, their employment strategies. Of course, their employment
strategies will also be influenced by the need to keep B matching
PQ.

There seem to be some missing relationships here.

Perhaps they are not missing; perhaps they are relationships between
fictitious entities (CC and CP) that exist only to make it easier
to think about some aspects of the macro economy.

I don't know about you, but with respect to this model I'm still
in a state of reorganization, with more problems than answers.

I've felt like that since I first got into this. But I sense that
it will be possible to find a nice, simple solution. I think the
basic insight is right: The macroeconomy is the collective control
of Q. This control involves specialization in the production of Q
and money to distribute this production to the population.

Best

Rick

···

--
Richard S. Marken Phone or Fax: 310 474-0313
MindReadings.com mailto: marken@mindreadings.com
www.mindreadings.com

[From Bill Powers (2000.09.12.DTR)]

Rick Marken (2000.09.11.1500)--

I think this is where we have to remember that the composite
consumer and producer are really the same entity; a composite
controller.

I think I'll put off adopting that idea. They may contain many of the same
people, but they aren't performing the same functions. The CP is engaged in
taking in raw materials and generating goods and services, for the purpose
of creating capital income (i.e., profit). The CC consists of all people
with income of any kind, who use that income to purchase goods and services
for their own benefit, survival, and pleasure. The CC consists mostly of
non-owners; the CP consists mainly of non-workers. Each has to contain some
of the other, but the interests of the two groups are different, and to a
large extent they conflict. Corporate reference levels are different from
consumer reference levels.

If we had no specialization, everyone would be
producing their reference amount of Q (as best as they could)
all on their own. Each person would know how much Q they
actually had and they would put out effort to make more Q in
proportion to the difference between the actual and their
reference amount of Q. How this gets implemented in a
specialization and money based economy is the problem to be
solved, I think.

I'm sympathetic with this concept but I think we have to develop a model of
the way things are first. You have a good idea in looking at the evolution
from a primitive society to a barter society to a money-based society. That
could lead to some interesting slants on the function of corporations and
the work-based society (ever think how unnatural it is for people to "have
jobs" and "work for a living?")

If you want to work on the Q control system, the question that
needs an answer is how an error in Q gets converted into an
increase or decrease in Q. The answer isn't obvious -- how does
a CC who wants more Q get the CP to produce more Q?

Why can't we just assume that the CP and CC are the same entity
so they don't need to communicate.

Basically, in my op0inion, because as things are arranged today they're not
the same entity.

In real life, it's the manager's
of industry who determine how much workforce to employ in order to
increase or decrease Q. So why not assume that these managers are
the proxies for everyman; it's their reference for Q that influences,
in part, their employment strategies. Of course, their employment
strategies will also be influenced by the need to keep B matching
PQ.

That would be convenient for modeling because you could just say that a Q
error is turned into the appropriate change in Q. But if it's not true, we
wouldn't want to assume it is just to make the model work. Therefore the
first thing we have to do is either verify your asssumption (that the
managers' own reference for, e.g., hominy grits determines the size of the
workforce engaged in producing hominy grits) or propose something else that
might be true.

I think the
basic insight is right: The macroeconomy is the collective control
of Q. This control involves specialization in the production of Q
and money to distribute this production to the population.

That sounds like a conclusion to me. I think we need to work on the
premises for a while yet, and get them into a working model, before we can
reach any general conclusions.

Best,

Bill P.

[From Bill Powers (2000.09.01.0810 MDT)]

Bruce Gregory (2000.0901.0930)--

[to Rick]

You display an unfortunate tendency to equate any disagreement with you
with a failure to understand control theory.

Don't let it get to you, Bruce. You know what you understand and don't
understand. If you can't reform the world, the next best thing is to let it
all roll off your back like a duck.

Best,

Bill P.

[From Bill Powers (2000.09.01.1846 MDT)]

Bruce Gregory (2000.0901.1158)--
Rick Marken (2000.09.01.0830)

And you display an unfortunate tendency to equate insults and
sarcasm with "disagreement".

You are becoming increasing paranoid, however. Perhaps your

medication needs adjustment. It happens to the best of us, so don't take
offence.

You're right. I don't feel particularly friendly toward you and
your "thoughts" have obviously had no influence over me.

Yes that's quite obvious. Bill seems to be the only person with the
ability to influence you.

Right. I have no wish to be friends with of be influenced by
a person who does nothing but take cheap shots at my work.

Again that paranoia. I've taken no shots, cheap or otherwise, at your
work. I have questioned your assumptions. Apparently this translates
into a cheap shot as far as you are concerned. In the future, I'll keep
my critical thoughts to myself. I hope that makes you feel better.

> However it does tend to make PCT look like a sect with an inner
> circle of true believers.

Yes. The inner circle consists of the people who are doing the
research and modeling. It probably does look like a sect to
those whose only contact with the phenomenon of control is
through the "sacred texts".

Sigh. We all admire and respect you Richard. Even when you act like a
total asshole.

I have one request. I hope you guys will take your argument somewhere else
if any of my adult friends show up.

Best,

Bill P.

[From Bill Powers (2000.09.01.1859 MDY)]

Rick Marken (2000.09.01.0830)--

Bill Powers (2000.08.31.1624 MDT)--

I think you have to get a good model of "the plant" before
you start adding control systems to it...

Thanks for this nice, substantive post. I'll read this in
more detail and reply ASAP. But I must say that what I have
read so far is a refreshing improved over some of the previous
comments I've received, like "Your ideas are inane" and "Can
I have a toke on what you're smoking?".

You must? Why?

Let's talk about the model.

Best,

Bill P.

[From Bill Powers (2000.09.01.1903 MDT)]

Rick Marken (2000.09.01.1230)

I think that many of your suggestions are already embodied
in the model; but I will try to incorporate whatever suggestions
are not into a "rearchitected" version of the spreadsheet
model so that they are more clearly represented.

OK. I offer the following as my idea about how to construct a model of the
basic relationships in the circular flow, followed by adding two
controllers as described in my last post. This is only enough of a model to
make something happen; there are many details that could be and need to be
added to it. I don't even know if the model can be stabilized.

I suggest putting an integrator into the output of the composite producer
into which Q goes, with the output of the integrator being called
"inventory", IN. Inventory rises at a rate equal to Q*dt, where dt is the
time duration in years of one iteration (say 0.001 year). The rate of rise
is Q (output units per year)* dt (years per iteration) or (output units per
iteration).

Inventory can be purchased for a price P dollars per output unit which is
adjustable by the Composite Inventory Manager. If B is buying power in
dollars per year, inventory decreases at the rate (B/P)*dt: that is,
(dollars per year)/(dollars per output unit)*(years per iteration) = output
units per iteration. Inventory cannot go below zero.

Buying power is equal to w or wages (dollars per worker-year) times number
of workers, N, plus capital payments K dollars per year, so

B = w*N + K dollars per year,

where N is adjusted by the Composite Financial Manager.

After government redistrubution of income, income is distributed about 40%
to capital income K and 60% to wages, so K is about 2/3*(w*N) and

B = 1.67*w*N

Q is equal to productivity PR (output units per year per worker), times N,
(number of workers).

Producer income is integrated to create Producer Savings, PS, in dollars.
Wages plus capital income, or buying power B, is paid out of Producer Savings:

PS = PS + (PQ - B)*dt

(NOTE: no consumer savings in this version)

Putting these equations together into a program loop we have the "plant
equation"

B = 1.67*w*N;
PS = PS + (PQ - B)*dt;
if PS < 0 then PS = 0; // no borrowing yet: savings can't go negative
if PS = 0 then B = 0; // can't pay wages with no money saved
Q = PR*N; // PR is productivity, output units per year per worker
IN = IN + (Q - B/P)*dt;// Inventory
if IN < 0 then IN = 0; // inventory can't go less than zero

Note that the costs of capital investment are not subtracted from PQ; those
costs, just like the costs of production, are paid to workers and
recipients of capital income. Capital investments are equivalent to
purchased goods and services.

We can now add two controllers. The variables r, p, e, and gain are local
variables (defined only within the function).

Financial Manager function:
Nmin, a local constant, is minimum number of workers.

p = PS;
r = PS'; // desired level of cash reserves
e = r - p;
N = gain*e; // number of workers is output quantity.
if N < Nmin then N = Nmin

Inventory Manager function:
  Pmin, a local constant, is least price per unit of output

p = IN;
r = IN' // desired level of inventory
e = r - p
P = gain*e
If P < Pmin then P = Pmin;

···

=====================================================================
I haven't tried this and probably won't until I get some other stuff
cleared up. Feel free, Rick or anybody.

Best,

Bill P.

[From Bill Powers (2000.09.02.0825 MDT)]

Bruce Gregory (2000.0902.0854)]

Could someone spare a moment to tell me exactly what the model is supposed
to explain? As I see it, a model is of interest to the extent it makes
predictions that can be tested. Exactly what data do you folks plan to test
this the predictions of the model against? Or is this simply an exercise in
model building? (Nothing wrong with that, but it will save me lot of time
knowing it from the outset.)

The basic data is the record of economic events for the past 100 or so
years available from the Statistical Abstracts and other public records.
Once the model behaves more or less like the past data, it would be
interesting to try to make some predictions from it.

Best,

Bill P.

[From Bill Powers (2000.09.02.0828 MDT )]

Bruce Gregory (2000.0902.0857)]

I'm doing my best not to comment on anything Rick says, no matter how
outrageous or unlikely.

I don't think that not commenting would be either outrageous o;r unlikely.

Best,

Bill P.

[From Bill Powers (2000.09.02.1215 MDT)]

Rick Marken (2000.09.02.0910)--

This really helps. Now I understand your concept of the effect
of inventory on price. Makes sense to me.

I really didn't have it all worked out when I tried to explain it a day or
so ago. Writing even a program sketch helps. I'm sure there will be bugs,
but we should be able to fix them.

Best,

Bill P.

[From Bill Powers (2000.09.05.0810 MDT)]

Rick Marken (2000.09.04.1420)--

Ok. First, I think B (buying power) must be defined in terms of dollars
paid to the composite consumer. That is, B = PQ-L. That's the way I
define it and it's the way TCP defines it. PQ is, of course, GNP which is the
amount paid to the composite consumer by the composite producer; L is
leakage.

Let's leave leakage out of it at first, just as TCP did. You'll notice that
I'm including two "pools" -- one is inventory, the other is producer
savings. Instead of the output going directly to the consumer, it goes
first into inventory; then inventory is drawn down as the consumer buys
some part of the inventory at the price P. Instead of incoming going
directly to wages and K, they go into savings, and then wages and K are
paid from savings. Neither of these pairs of effects is necessarily in
balance: both savings and inventory can change due to differences between
input and output.

The amount that the consumer buys is B/P -- the amount spent divided by the
price per unit of goods or services. This is not necessarily equal to the
amount produced, Q. If it is less than the amount produced, inventory will
increase; if greater, inventory will decrease. For the time being, we
assume that the consumer spends everything that is earned. It is the job of
the inventory controller, when introduced to the model, to keep inventory
constant (probably close to zero) by adjusting prices. When that control
system is in place, we will indeed find that the price of Q is then such
that the consumer's buying power, without leakage, is just sufficient to
buy all of it. Indeed, (B - L)/P will then equal Q, where at present L is
set to zero.

It is the fact that this model does NOT start by requring that PQ = B
(without leakage) that leaves room for the inventory control system to
operate. And the operation of the inventory control system explains why it
is that at equilibrium, PQ comes to equal B. We are basically explaining
why there is a "circular flow." It is, in part, a consequence of a
purposeful attempt to sell all that is produced, neither more nor less. The
balance is not accidental.

It is the axiomatic requirement that the producer sell all that is produced
that makes this control system a necessary property of the composite
producer. There is no viable business that _consistently_ sells either more
or less than it produces. But neither is it a law of nature that
businesses, even in the aggregate, be viable. In fact, there can be a
difference between the amount sold and the amount produced only as long as
inventory is increasing or decreasing, neither of which is a long-term
option for a composite producer that can survive.

When I used your equation for B I ran into trouble in the equations for
PS and IN. PQ and B had nothing to do with each other. Both are related
to N but the relative size of B and PQ depends on the values I pick for
the constants, w and PR. This seems wrong to me.

Yes, without control systems the whole process will run down or blow up in
some way. That's what we want. The circular flow doesn't just happen: it's
the consequence of the operation of control systems on the basic working,
producing, buying, and selling processes. To see what happens without the
control systems, start the savings and the inventory at some nonzero level
and run the model. Either of these quantities will increase toward infinity
or decrease to zero unless there are control systems at work. You can
adjust wages (or rather N at constant wage) so the total expenditures are
approximately equal to total income, and you can adjust productivity and
prices so the total output Q is equal to B/P, but the slighest change in
any parameter will result in an inevitable drift of Q and B, with
corresponding changes in producer savings and inventory. The system that
stays the same only because of a delicate balance between opposing forces
is not robust against disturbances.

I think the equation for Q is fine but B is really related to how much the
workforce (regardless of its size, N) is paid for producing Q.

B *IS* the the amount that N workers are paid at the yearly rate of w for
producing however many goods are produced (how many are produced depends on
productivity "PR").

The way I have defined B, it is equal to 1.67*w*N, where w is the
(constant) yearly wage per worker and N is the number of workers in the
workforce. The 1.67 multiplier expresses the fact that wages and capital
income are in the ratio (assumed constant) of 60 to 40, so that knowing W
is sufficient to establish K at 2/3 W, so the total cost B = W + K is W +
2/3*W or B = 1.67*n*W.
The cost IS the buying power.

So I define B as

B = PQ-L

As I pointed out above, this creates a fixed relationship between output
and purchases, so inventory and savings _cannot_ change. Approaching this
my way, we allow for B, the amount spent by the producer on wages and
capital income, to be different from (PQ - L), the actual income of the
producer. We should then find that when the two control systems are in
operation, the relationship B = PQ - L _emerges_ (if it actually occurs)
rather than being postulated as a starting point.

The equation for inventory becomes:

IN = IN + (Q - Q')*dt

where Q' is the amount of Q that is actually purchased. Q' is
defined by the following equation

Q' = B/PQ*Q

This is how TCP approached it, but I think it is the wrong approach. He was
trying to anticipate the outcome of all these simultaneous processes; that
is why he carries two different values of output, Q and Q'. But there is
only one actual value of Q, and that is all we need. If we have put the
model together properly, we should find that the output Q will have one
value without leakage, and another value with leakage. Equations that try
to give Q two values at once require, to say the least, a great deal of
explaining. I think TCP was intuitively trying to run a simulation, but he
didn't know how to do it.

I also believe that it makes sense to let inventory, IN, go
below zero. Negative inventory occurs when demand for Q (Q')
exceeds the amount of Q produced. When IN is negative it means
that orders exceed goods on hand.

Let's postpone that consideration (which I think may be useful -- back
orders are tradable commodities). We can also postpone consideration of the
phenomenon of negative savings, otherwise known as borrowing. Both of these
considerations get us into details we're not ready to handle yet, such as
discounts and interest as well as the creation of new money by the
Composite Banker (not yet in the model). Let's see what a more limited
model will do, first.

I have set up the inventory (IN) and cash reserve (PS) control
systems. As you suggested, the inventory manager controls IN
by varying the price of goods (P'); the cash reserve manager
controls PS by varying N (and, thus, Q). The systems seem to work
although the cash reserve manager will eventually lose control
of PS because the workforce will eventually hit minimum.

Yes, and I think this must happen when there is no new money brought into
the system. Note that when the cash reserve manager varies N, this changes
both B and Q: it affects B because the cost of production changes, and Q
because of the factor of productivity, which makes Q depend on N. There are
clearly some other assumptions possible here, which we should eventually
explore.

The
inventory control system also works, though it oscillates quite a
bit, I think due to all the time integrations between output (P')
and input (IN).

These oscillations are probably real. There are two integrators involved,
which makes it possible for phase shifts, by some paths, to reach 180
degrees. To eliminate them I would guess that the inventory controller
should perceive not just the inventory, but inventory plus a "damping
constant" times rate of change of inventory. That will put some
"anticipation" into the loop and help to stabilize it. That may be enough
to stabilize both loops. It may also prove to be highly realistic!

Here is a summary of my revised "plant" equations compared to yours:

   Powers Marken
P = producer & consumer cost P = producer cost;P' = consumer cost
Q = goods and services produced Q = goods and services produced
B = 1.67*w*N B = PQ-L
Q' = non-existent Q' = B/PQ*Q; goods and services consumed
PS = PS + (PQ - B)*dt PS = PS + (P'Q' - PQ)*dt
Q = PR*N; Q = PR*N
IN = IN + (Q - B/P)*dt IN = IN + (Q - Q')*dt

The equations describing the inventory and cash reserve control systems
are the same as you [Bill Powers (2000.09.01.1903 MDT)] described them,
though I used integrating output functions.

Note the following on the Marken side (corrections made to be consistent
with programming notation):

B = P*Q - L
Q' = B/P/Q*Q = B/P = (P*Q - L)/P

Typo: there is no P'. You mean PQ', not P'Q' in third from last statement.
Now manipulate the equation for producer savings a little:

PS = PS + (P*Q' - P*Q)*dt, or

PS = PS + P*(Q' - Q)*dt, or
  using Q' = (P*Q- L)/P from above,

PS = PS + P*((P*Q - L)/P - Q)*dt, or

PS = PS + P*Q - L - P*Q, or

PS = PS - L

!!!!

We find that producer savings simply decreases at the rate of leakage. If
leakage is zero, producer savings remains constant. All this results from,
in effect, assuming the solution B = PQ - L and making it part of the model.

If we let B = 1.67*w*N, which depends only on the wage level and the number
of workers, and Q equal PR*N, depending only on productivity PR and the
number of workers producing, then we are not assuming a balance between
buying power (less any leakage) and producer income. Producer savings will
rise or fall according to whether producer income is greater or less than
production costs, and inventory will rise or fall according to whether the
workers and capital income recipients have too little money to buy the
whole product, or more than necessary to buy it. That gives the controllers
something to do!

I think this is a pretty good start. I await further comments and/or
suggestions.

I think it's an excellent start. Your reply has led me to understand better
not only your approach (and TCP's) but my own. I didn't realize until now
that the statement B = PQ - L amounts to assuming a solution of the system
equations, which should be left for the simulation to produce if it's
really a solution. And I hadn't worked out the real meaning of my model's
details. Sort of weird, as if my basis for creating the model was different

Best,

Bill P.

···

from my basis for understanding it.

[From Bill Powers (2000.09.06.1400 MDT)]

Rick Marken(2000.09.05) --

Appended below is the Pascal source code for "circflow.pas", my version of
the TCP circular flow model.

This program contains a number of tests to keep unrealistic things from
happening, such as continued production when no money is left to pay the
workers. Before paying the workers it checks to see if there's enough money
in savings, and before allowing purchases it checks to see if there's
enough Q in the inventory. Inventory is not allowed to go below zero, and
payments greater than existing savings are not permitted.

The program is initialized so that productivity is 1.66, very slightly less
than enough to supply both Wage earners and Capital Income earners with
enough goods to purchase with their total income (1.67 would be exactly
enough). As a result, slightly less Q is produced each day than is
purchased each day. The result is that inventory starts declining, since
workers are paid enough for everyone to consume the entire product at a
productivity of 1.67. Everything paid to the workers and recipients of
capital income is spent on Q, and producer income is equal to producer
expenses. Producer savings therefore remains constant while inventory
declines.

When inventory finally drops to zero, purchases drop slightly because
inventory increases on each cycle by slightly less than necessary to use up
all the buying power (1.66/1.67 of the requirement amount). The same wages
continue to be paid out of savings each day, but income that increases
savings each day is less than costs by the same factor, 1.66/1.67. Thus
savings begin to decline. This continues until producer savings are gone,
at which point the system stalls out with some small amount of savings ($45
out of the original $10,000). Srictly speaking, the unspent buying power
has to show up somewhere, such as in consumer savings, but that isn't part
of this model yet.

There are no control systems in this model. That comes later.

A result I hadn't expected: When the number of workers is doubled,
production is doubled, but so is buying power, since labor costs are
computed strictly on the basis of the wage level and the number of workers.
When productivity is set to 1.67, neither inventory nor savings changes
when N changes. Thus the manager in control of balancing costs against
income would have nothing to do even though costs have in fact doubled. The
reason is that income has also doubled. Changing N therefore can't be used
as a way of controlling the cost-income balance, not as the model is
currently set up.

I think I can see where TCP got the idea that enough money would simply
appear in the system. When N increases, buying power also increases,
according to the formula B = 1.67*w*N*dt. But of course doubling the number
of people who show up for work is not enough to provide more money to pay
them with. There is a subtle causal gap in the model right here, and I
haven't figured out how to fix it yet (I or someone will fix it soon). It
would be very easy just to believe what the equation says and accept that
the required money would somehow appear. But we can't do that: the model
needs a mechanism to account for every effect. So far there is nothing in
the model to suggest that there is a finite supply of money. That's what
needs to be added.

Incidentally, B and Q are _daily_ wage and production rates rather than
yearly; it was easier to handle gains and losses day by day. That's why
"dt" appears in the equations for B and Q rather than in the expressions
for savings and inventory where the integrations take place.

As mentioned, the program as it stands sets the productivity factor to
1.66, whereas 1.67 would be required for perfect balance. You can set PR to
1.67 (near the start of the program listing), and observe that both savings
and inventory remain constant as long as the program runs.

Oh, yes, to terminate the run, hit any key. To exit the program, hit it again.

Best,

Bill P.

···

==============================================================================
program circflow;

uses dos, crt;
var P, Q, B, PS, PR, N, w, INV, t, dt: double;
    ch: char;

begin
clrscr;
N := 100.0; { Number of workers}
w := 100.0; { Yearly wage per worker}
PS := 10000.0; { initial producer savings}
INV := 1000.0; { Initial inventory}
P := 100.0; { Price per good}
PR := 1.66; { Productivity, goods/worker-year}
dt := 1.0/365.0; { Iteration time = 1 day or 1/365 year}
t := 0.0; { time counter, not used yet}
gotoxy(1,1);
write(' PRICE Q(DAILY) SAVINGS INVENTORY');

{BEGINNING OF MAIN LOOP}
while not keypressed do
begin
  B := 1.67*w*N*dt; {nominal cost per iteration}
  if B > PS then B := PS; {Limit cost per iteration to amount in savings}
  PS := PS - B; {decrease savings by cost per iteration}
  if B > 0.1 then {if workers being paid,}
    Q := PR*N*dt {Q is productivity times number of workers,}
  else Q := 0.0; {otherwise Q is zero}
  INV := INV + Q; {add production to inventory}
  if INV >= B/P then {if surplus in inventory,}
   begin
    INV := INV - B/P; { reduce inventory by amount purchased}
    PS := PS + B; { add (B/P)*P to savings}
   end
  else { else if shortage of inventory}
   begin
    PS := PS + INV*P; { sell all that is left at price P}
    INV := 0.0; { inventory at zero}
   end;
  gotoxy(1,3);
  write(P:10:0, Q:10:3, PS:10:0, INV:10:0);
end;
{END OF MAIN LOOP}

ch := readkey;
writeln;
writeln('Press key to exit');
ch := readkey;
end.

[From Bill Powers (2000.09.07.0927 MDT)]

Bruce Abbott (2000.09.07.0430 EST)--

For those few of us who have Borland's Pascal and wish to run this program,
please note that you will have to set the compiler to use "8087" code if you
have not already done so. The program's use of "double precision" variables
makes this a requirement.

Good catch, Bruce. Actually if you change all occurrances of the word
"double" to "real" the program will work without any special settings, with
all versions of Turbo Pascal back to 3.0 and maybe earlier. Also I used
only text mode so you don't even have any problems with graphics.

Do you have any ideas about the "new money" problem?

Best,

Bill P.