Sunday, April 22, 2007

Cubic Discovery Model Feedback

Although I stand by the premise of the cubic discovery growth model, the negative forcing feedback seems a bit of an introduced artificiality. So instead of subtracting an accumulating factor to the differential equation (see the integral term below), I decided to take a different tact -- in particular, one with a better physical basis.

The idea that a sampling volume which increases cubically with time still forms the basis of the model, but I decided to add a probabilistic suppression function to the growth term. I came up with a perturbation based on some elementary collision and coalescence considerations. Staring at what the growth term does, it reminds me an awful lot of a real physical growth process -- akin to what happens during crystal nucleation. Although the sampling volumes happen to occur randomly, like nucleating sites on a crystal, interactions occur between sampled regions. In particular, the volumes only grow until they meet another volume; but of which we cannot sample again to prevent double-counting of previously encountered volumes. This provides a forcing feedback analogy to further exploration in an ever growing volumetric region.

A nucleating region shown in red grows until it hits the cubic growth limit (i.e. width) or it reaches a constraint set by a previously grown region. Eventually, growth rate limits as the total coverage approaches unity and collisions with other volumes occur more frequently.


The strength of the forcing feedback relates to the probability of meeting up with another previously sampled volume. Here, the idea of sampled coverage and a Markovian transition rate plays an important role. In general, the probability of encountering another sampled volume follows an exponential dependence which depends on the coverage. In a Markov approximation, the probability of collision remains constant with distance but tracks as the reciprocal of coverage as time increases. To establish the analogy, the coverage derives directly from the accumulated discoveries. So we have a dependence that basically follows this law:
DiscoveryRate = a*t3*exp(-k*t4)
This formulation has an interesting property in that the cumulative discovery becomes even more concise:
CumulativeDiscoveries =
Integral(DiscoveryRate) = Dtotal*(1-exp(-k*t4))
As a check, the following code duplicates the behavior in terms of a set of Monte Carlo simulation runs:
with Ada.Numerics.Discrete_Random;
with Text_IO;

procedure Ran_Fill is
-- Filling a pool by randomly sampling cells according to a cubic growth law.
-- As the pool fills, regions get truncated by collisions with previous samples.
subtype Pool is Natural range Natural'First .. 1_000_000;
package G_Natural is new Ada.Numerics.Discrete_Random (Pool);
G : G_Natural.Generator;
Checked : array (Pool) of Boolean := (others => False);
Acceleration : constant Integer := 1;
Draw : Pool;
Discoveries, Width : Integer;
Cumulative : Integer := 0;
subtype Years is Integer range 1..1000;
Values : array(Years) of Integer := (others => 0);
begin
G_Natural.Reset (G, 1); -- Use the same starting seed each time
for Samples in 1..1000 loop -- Run a bunch of MonteCarlo simulations
Cumulative := 0;
Checked := (others => False); -- Set the pool to all undiscovered
for Year in Years loop
Width := Acceleration * Year * Year * Year; -- Cubic acceleration of sample volume
Discoveries := 0; -- Yearly discoveries proportional to sampled volume
loop
Draw := G_Natural.Random (G);
if not Checked (Draw) then
declare
I : Pool := Draw;
begin
loop -- Go in the forward direction looking for collisions
Checked (I) := True;
Discoveries := Discoveries + 1;
exit when Width = Discoveries or I = Pool'Last;
I := I + 1; -- Go to the neighboring volume
exit when Checked (I); -- Collision with another sampled element
end loop;
I := Draw;
loop -- Go in the reverse direction looking for collisions
exit when Width = Discoveries or I = Pool'Last or I = Pool'First;
I := I - 1; -- Go to the neighboring volume
exit when Checked (I); -- Collision with another sampled element
Checked (I) := True;
Discoveries := Discoveries + 1;
end loop;
end;
exit; -- Either have collided or reached the cubic growth limit
end if;
end loop;
Cumulative := Cumulative + Discoveries;
exit when Cumulative > Pool'Last; -- Checked every last region
Values (Year) := Values (Year) + Discoveries; -- Save histogram
end loop;
end loop;
for Year in Years loop -- Dump accumulated MonteCarlo runs
Text_IO.Put_Line (Year'Img & Values(Year)'Img);
exit when Values(Year) = 0;
end loop;
end;
A plot of the results approaches that of the DiscoveryRate formula shown earlier, apart from any truncation effects from using a finite sample pool.

Cubic growth model and associated Monte Carlo run. Also shown, world discoveries and a moving average (M.A.) of the discoveries at peak to smooth fluctuations.


Again, what I like about this model: (1) It has a constraint of initial discovery in the year 1858, which means that the curve must start at that point, (2) It has one parameter that basically sets the peak position along the horizontal axis, and (3) It has one parameter that scales the curve on the vertical axis. This becomes a universal curve that behaviorally describes how we randomly sample a volume until we have explored it completely. The fluctuations in real discovery data from the smoothened cubic curve come about as not every sampled volume leads to a discovery.

To smooth the discovery data, we can do something like what Laherrere did with cumulative discoveries in the following chart and lay the cubic model right on top. TBD, for now. (Note that this chart has discoveries earlier than his other more well-known discovery plots.)






So back to that Michael Lynch quote in my previous post:
Lynch thinks that the oil peak lies farther into the future, partially because there's likely to be a lot of oil in as-yet undiscovered smaller fields.

"You don't go looking for them until you run out of the giant fields," Lynch said in a telephone interview.
If we read between the lines, we find that peak oil denier Lynch has admitted to completely sampling the earth's volume for oil, and that we have only the remaining voids and table scraps to pick at. But nobody in their right mind should believe that "a lot of oil" exists in those undiscovered areas. Just look at the model.