Lonergan's Diagram of Rates of Flow (v0.14)
This applet is a simple demonstration of Lonergan's model from his
on Circulation Analysis".
Currently, this diagram computes the flows between nodes according
to the following equations:
At each step (after the first), each node:
Basic Demand ( I' ) = c'O' + D'
Basic Supply ( O' ) = E' + S'
Surplus Demand ( I'' ) = i''O'' + D''
Surplus Supply( O'' ) = E'' + S''
Redistributive Function ( F ) = so'O'
+ so''O'' + si'I' + si''I''
The values displayed on the diagram are the values in the system at the
of a step. Each node shows the current value (amount of money?) contained
in each node, and its outgoing links show how this value will be distributed
among the outputs in the next cycle. The values are color coded as
follows: Red represents
flows from a demand node, Green
flows from a supply node, and Blue
represents flows from the redistributive function. These values represent
the total amount that will move through that channel during one time interval.
It is therefore a measure of flow -- i.e., "so much every so often" --
where the time interval (the "so often") is one simulation step.
reads the current value of its incoming edges,
computes the new value of each node (see below), and
outputs new values on its outgoing edges according to the coefficients.
Nodes and Parameters
Each node has a set of variable parameters, which one can set by clicking
on the desired node. These are described below.
The demand nodes, I' and I'' have 3 main parameters, s, Mul,
and Acc. Mul and Acc are used to determine the
amount available to the node based on the amount flowing into it as follows:
In summary, the current amount available to the node is computed as:
At the beginning of the step, the values in the channels going into the
node are summed up.
This value is then multiplied by the multiplier factor Mul.
In this way we can express a multiplicative (geometric) form of acceleration,
e.g., node I' outputs 1.1 times the amount of flow it receives.
We then add Acc to the result of this multiplication. This
allows us to express an additive (arithmetic) acceleration, e.g., node
generates 100 new units of flow per cycle.
value = (sum of inputs)*Mul + Acc
After computing this value, we use the coefficient s to determine
which fraction of the value goes to the redistributive function (this value
may represent "savings"). The rest of the available amount (1-s)
goes to the demand node's corresponding supply node.
In addition to these parameters, one can also control the value of a
node in 3 ways:
The ForceVal parameter allows one to set the value at the node.
If the checkbox is checked, then in the next cycle, the value at
the node will be taken from the value typed in the text field. The
input values going into the node (from the current cycle) will be
ignored, as will the Mul and Acc parameters. The output
flows in the next cycle will be computed as fractions of the forced value.
The MaxVal parameter specifies the maximum value that a node is
allowed to have. The value is computed normally as described above,
but if the resulting value is greater than the maximum, then the value
is capped at the maximum amount. (One thing this implies is that
if one of the nodes has a maximum value, then the system cannot accelerate
forever since any additional incoming flows in excess of the maximum value
will be ignored.)
The MinVal parameter is similar to the MaxVal parameter but
sets the minimum value instead.
The supply node parameters are just like the demand node parameters
except that each node now has 3 output coefficients, c, i,
and s, instead of just s. These correspond to the fractions
of the flows going to the basic ("consumption"), surplus ("investment"),
and redistributive ("savings") subcircuits of the system, respectively.
These coefficients must add up to 1. Thus, if you change the value
of one of the 3 coefficients, another one will be adjusted accordingly.
control which coefficient will be adjusted automatically, select it by
clicking the appropriate radio button.
The redistributive node has the following parameters for each
for the 4 output channels (S',S'',D',D''):
Note that this is only one of infinitely many different functions that
can be implemented by the redistributive node. In fact, it may be
that most of the future research in using Lonergan's model would be on
how to design the redistributive node so that it can help maintain and
encourage dynamic equilibrium in the system. Meanwhile, however,
the current formulation allows us to perform very simple experiments.
In particular, the redistributive function can be used to induce acceleration
into the system by setting the channels to positive values. It can
also induce deceleration by setting the channels to negative values.
f denotes the fraction of the sum of the input flows into
the redistributive node that will go to the particular channel.
Acc denotes a value added to this fraction.
Forceval overrides f and Acc and allows one to specify
a fixed value to be put in the particular channel.
System Status Display
On the lower left corner of the screen, several values are displayed indicating
the current status of the system in terms of the values of flows and amounts.
Among these are:
total: total amount of money in the system
total accel: change in the amount of amount in the last step (acceleration)
totalIO: total amount of money in income and outlay nodes only (not
including the F node)
total demand: I'+I''
total supply: O'+O''
total basic: total amount in basic subcircuit = I'+O'
total surplus: total amount in surplus subcircuit = I''+O''
basic acceleration: acceleration of basic subcircuit. This
is equal to the amount of money that flowed into the basic subcircuit in
the cycle which just ended (i.e., this is M' of the previous
surplus acceleration: acceleration of surplus subcircuit. This is
equal to the amount of money that flowed into the surplus subcircuit in
the cycle which just ended (i.e., this is M'' of the previous
G: crossover difference (c''O'' - i'O')
G' accel: acceleration of crossover flow from surplus to basic (c''O'')
G'' accel: acceleration of crossover flow from basic to surplus
G accel: (G'accel - G''accel), also the same as acceleration
Things To Try
This demo is still very simple compared to what Lonergan originally had
in mind, and some key elements in the theory behind it are still unimplemented.
Thus, we are still not sure what its results mean at this point in time.
However, we have noticed some patterns in its behavior which may be interesting
to study further. Here are a few things that you can try that produce
some interesting results. (Note, for more accurate results, it
is best to stop the simulation first behavior changing the parameters.)
Note that these are just a few things that you can do with this demo.
Please let us know if you make any other interesting discoveries.
No acceleration, no redistributive function. Try changing
the c and i coefficients of the supply (O) nodes. Notice
that changing the coefficients causes money to be redistributed, but the
system then eventually stabilizes to a new static equilibrium, where the
total amount of money in the system stays constant, and the two crossover
flows (c''O'' and i'O') cancel each other out (on average).
Add an acceleration or deceleration through a supply or demand node.
This can be done in two ways:
Notice that when you do this, the total amount of money in the system starts
changing. In general, if you have a negative total acceleration,
then eventually, the system gets "drained" and the money approaches 0.
If you have a positive acceleration, however, then the total amount of
money increases constantly. This may be a demonstration of "dynamic
equilibrium", although we are not sure right now.
Put a non-zero Acc parameter.
Set the Mul parameter to something other than 1.
Add an acceleration or deceleration through the redistributive function.
This has an effect similar to that above, but it may cause an imbalance
in the crossovers (a non-zero average G value). Note, however, that
an imbalance in the crossovers in this case does not cause a crash
in the system.
Experiment with Max, Min, and Forced values. Notice how specifying
a maximum value for a node effectively prevents accelerations from going
on forever and causes the system to stabilize at a certain point.
Disclaimer and an Invitation to Help with Future Research
Please note that the current demo is very much incomplete and therefore
does not really do justice to Lonergan's model. At present, our
main intent is not come up with concrete practical results, but to encourage
interest in this research topic by helping people visualize the
dynamics of flow and acceleration in Lonergan's model. Thus,
please do not expect this demo to be able to help economists make predictions
or decisions yet.
This demo is written in Java and has a modular structure which allows
users to change the behavior of each node by writing a Node-type class.
You are most welcome to experiment with different node behaviors by writing
your own Java code. Please email Luis
Sarmenta if you want to receive the Java source code.
Currently, a major shortcoming of this demo is its failure to demonstrate
the "crashes" that Lonergan wants to avoid. The system right now
seems to tend to stabilize itself under most conditions, and the only way
to cause it to crash (i.e., cause some nodes to have values of 0 or less)
is to intentionally explicitly insert a negative net acceleration into
the system by setting the parameters of some nodes. We suspect that
this problem is due to the incompleteness of our model. In particular,
here are some things that we think may be interesting topics for future
Finally, note that we, the authors, are primarily computer scientists and
mathematicians. Unfortunately, are not economists, and thus are not experts
in the interpretation of Lonergan's model. Thus, if you have any
insights here that may help, you are most welcome to contact us about it!
Modelling Lonergan's equations more fully. Currently, the
equations implemented at each node are very simple. Lonergan actually
mentions possible equations which are a lot more complex.
Implementing time lags. Currently, the time lag is fixed and
small -- i.e., one cycle. It may be that if the flows undergo a time
lag, then it may be possible for a system to crash if some parts
cannot react "fast enough".
Modelling inflation and other economic effects. These are
other factors that may induce a crash, if for example we insert too much
money too quickly into the system.
For more information on Lonergan's economics and on this diagram,
Vicente Marasigan, S.J., Jerome Punzalan, Rafael
Saldana, and Luis Sarmenta
Ateneo de Manila University, Philippines
and Massachusetts Institute of Technology, USA (Luis Sarmenta)
17 November 1999