Economic Growth in the Game of Life
Author
Stephen Macurdy
Title
Economic Growth in the Game of Life
Description
It is the goal of this project to analyze the growth of structures in Conway's Game of Life and relate it to the growth of innovation in the real economy.
Category
Essays, Posts & Presentations
Keywords
Economics, Game of Life, Complexity, Value, Innovation, Moore's Law
URL
http://www.notebookarchive.org/2021-07-6gwkdae/
DOI
https://notebookarchive.org/2021-07-6gwkdae
Date Added
2021-07-14
Date Last Modified
2021-07-14
File Size
55.18 megabytes
Supplements
Rights
CC BY 4.0



WOLFRAM SUMMER SCHOOL 2021
Economic Growth in the Game of Life
Economic Growth in the Game of Life
Stephen Thomas Macurdy
Key Questions:
◼
How does one quantify economic growth in Game of Life?
◼
Growth of human generated bits over time can be a good proxy
◼
Why human generated bits?
◼
Because bits represent a very real, quantifiable metric that has observable relation in the real economy, much like software.
◼
The focus is on human generated bits because some programs run indefinitely and would skew the certain patterns to outweigh the significance of other patterns. I think we just want to look at the starting position of bits in discoveries, not the outcomes. Outcomes would be too hard to keep track of their evolutions. Different classes of structures for sure.
◼
Why not the ratio of starting point bits to population of bits? Because again, some have growth that is quadratic/exponential, one constructor builds another constructor and that pattern repeats.
◼
The dataset used is from the LifeWiki Entity Store - I’m aware it’s incomplete. Not all information is useful.
◼
What is economic value? What are the atoms of economics? Economic value, if it was not determined by humans, would become a relationship of one thing valued in every other thing. And as that graph evolves, we’d see how ones relationship change relative to the rest. Perhaps there’s a flatness that an economic agent would want, to know exactly the relationship of value between everything at every point in time, otherwise there would be an arbitrage that they’d get taken advantage of or could take advantage of themselves.
◼
https://www.conwaylife.com/forums/viewtopic.php?p=2323#p2323 ; the thread of responses here to the discovery are great.
◼
Economic agents exist in “Value Space” and are linked by transactions to one another. “Value Space” is given structure by the network of these transactions and is directed to the law of one price by the truth of arbitrage. An economic agent’s value system is dynamic, ever changing, but is not needed to determine the “Value Space” of economies because we can just assume that there are value systems of all shapes, sizes, and magnitudes.
Project steps
1. Import Entity Store, correct sparse array error.
2. Display graphic of discovery date of entity over time
2a. Display graphic of years with significant discoveries (may have opened the door to new discoveries)
3. Draw a conclusion and point to the next graphic
4. Display graphic of sparse array # of bits over time
5. Draw conclusion about growth of bits in patterns
6. Is it accelerating, decelerating, directional or complete?
1. Import Entity Store, correct sparse array error.
2. Display graphic of discovery date of entity over time
2a. Display graphic of years with significant discoveries (may have opened the door to new discoveries)
3. Draw a conclusion and point to the next graphic
4. Display graphic of sparse array # of bits over time
5. Draw conclusion about growth of bits in patterns
6. Is it accelerating, decelerating, directional or complete?
2. Display graphic of discovery date of entity over time
2a. Display graphic of years with significant discoveries (may have opened the door to new discoveries)
3. Draw a conclusion and point to the next graphic
4. Display graphic of sparse array # of bits over time
5. Draw conclusion about growth of bits in patterns
6. Is it accelerating, decelerating, directional or complete?
Code to fix the missing “Image” data
In[]:=
res=ResourceData["LifeWiki Entity Store"][[1]];res[["Types","GameOfLife","Properties","SparseArray","DefaultFunction"]]=Function[e,With[{imp=Quiet[Check[ImportString[e["RLEData"],"RLE"],$Failed]]},If[imp===$Failed,Missing["NotAvailable"],ImportString[e["RLEData"],"RLE"]]]];EntityRegister[EntityStore[res]]
Out[]=
{GameOfLife}
In[]:=
EntityList["GameOfLife"]
In[]:=
EntityValue["GameOfLife","Properties"]
In[]:=
EntityStores[]
Find the data that exists and matters
Find the data that exists and matters
Overview of ArrayPlots from CellCount 10 to 100,000
Overview of ArrayPlots from CellCount 10 to 100,000
Here's all the ArrayPlots of all the entity "SparseArrays", Rasterized and FeatureSpacePlot
Here's all the ArrayPlots of all the entity "SparseArrays", Rasterized and FeatureSpacePlot
Graph of Entities CellCount and colored by PatternType
Graph of Entities CellCount and colored by PatternType
Graphic of “DiscoveryYears”
Graphic of “DiscoveryYears”
NumberLinePlot of discoveries by “Discoverers”
NumberLinePlot of discoveries by “Discoverers”
Plot of discovery years with dependent maximum subpattern
Plot of discovery years with dependent maximum subpattern
This is the directed edge graph of subpatterns
This is the directed edge graph of subpatterns
Desired Upgrades
Desired Upgrades
GOL #2: subpattern graph v1
GOL #2: subpattern graph v1
In[]:=
res=ResourceData["LifeWiki Entity Store"][[1]];res[["Types","GameOfLife","Properties","SparseArray","DefaultFunction"]]=Function[e,With[{imp=Quiet[Check[ImportString[e["RLEData"],"RLE"],$Failed]]},If[imp===$Failed,Missing["NotAvailable"],ImportString[e["RLEData"],"RLE"]]]];EntityRegister[EntityStore[res]];
In[]:=
basePatterns=Unitize/@EntityValue["GameOfLife","SparseArray","EntityAssociation"];
In[]:=
periods=EntityValue["GameOfLife","Period","EntityAssociation"];
In[]:=
patternSymmetries[ker_]:={ker,Transpose[ker],Reverse[ker],Transpose[Reverse[ker]],Reverse[Transpose[ker]],Transpose[Reverse[Transpose[ker]]],Reverse[Transpose[Reverse[ker]]],Transpose[Reverse[Transpose[Reverse[ker]]]]}
In[]:=
patternOccurs[patt_,ker_,period_]:=If[Sort[Dimensions[ker]]Sort[Dimensions[patt]],If[Times@@Dimensions[patt]<=1000000&&Times@@Dimensions[ker]<=1000000,Module[{kerSteps,kerStepsSyms,paddedPatt},kerSteps=ArrayPad[SparseArray[If[Times@@Dimensions[ker]*Replace[period,_Missing->1]>1000000,{ker},CellularAutomaton["GameOfLife",{Unitize[ker],0},Replace[period,_Missing->1]-1]]],1];kerStepsSyms=DeleteDuplicates[Catenate[patternSymmetries/@kerSteps]];paddedPatt=ArrayPad[patt,1];AnyTrue[kerStepsSyms,Dimensions[#]Dimensions[paddedPatt]&&MemberQ[ListCorrelate[#,paddedPatt],Total[#,2],{2}]&]],Missing["TooBig"]],False]
In[]:=
Do[With[{a=RandomEntity["GameOfLife"],b=RandomEntity["GameOfLife"]},Check[TimeConstrained[patternOccurs[basePatterns[a],basePatterns[b],Replace[periods[b],_Missing->1]],1],Throw[{a,b}]]],1000]
In[]:=
Witha=
,b=
,MemoryConstrained[TimeConstrained[patternOccurs[basePatterns[a],basePatterns[b],periods[b]],60,Missing["TimeConstraint"]],10^9,Missing["MemoryConstraint"]]
demonoid | GAME OF LIFE |
skewed traffic light | GAME OF LIFE |
Out[]=
Missing[MemoryConstraint]
In[]:=
Witha=
,b=
,MemoryConstrained[TimeConstrained[patternOccurs[basePatterns[a],basePatterns[b],periods[b]],60,Missing["TimeConstraint"]],10^9,Missing["MemoryConstraint"]]
bunnies 9 | GAME OF LIFE |
heavyweight spaceship | GAME OF LIFE |
Out[]=
False
In[]:=
LaunchKernels[100];
In[]:=
n=0;
In[]:=
SetSharedVariable[n];
In[]:=
Now
Out[]=
Fri 9 Jul 2021 16:16:45GMT-5
In[]:=
subpatternArray=With[{es=EntityList["GameOfLife"]},ParallelTable[n++;MemoryConstrained[TimeConstrained[patternOccurs[basePatterns[p],basePatterns[sp],Replace[periods[sp],_Missing->1]],60,Missing["TimeConstraint"]],10^9,Missing["MemoryConstraint"]],{p,es},{sp,es},Method->"FinestGrained"]];
In[]:=
Now
Out[]=
Fri 9 Jul 2021 16:36:58GMT-5
In[]:=
Dynamic[n]
Out[]=
n
In[]:=
Length[EntityList["GameOfLife"]]^2
Out[]=
1153476
In[]:=
es=EntityList["GameOfLife"];
In[]:=
es=
;
subpatternArray=
;
In[]:=
NotebookSave[]
In[]:=
ArrayPlot[Boole[subpatternArray]]
Out[]=
In[]:=
ArrayPlot@*basePatterns/@es[[TakeLargest[Total[Boole@Replace[subpatternArray,_Missing->False,{2}]]->"Index",100]]]
In[]:=
MaximalBy[Select[Transpose[{es,Total[Lookup[basePatterns,es],{2,3}],Total[Boole@Replace[subpatternArray,_Missing->False,{2}]]}],#[[3]]>1&],#[[2]]&]
Out[]=
,12511,2
p690 60P5H2V0 gun
In[]:=
Positiones,
p690 60P5H2V0 gun | GAME OF LIFE |
Out[]=
{{1036}}
In[]:=
es[[1040]]
Out[]=
p416 60P5H2V0 gun
In[]:=
subpatternArray[[1036]]
In[]:=
Position[subpatternArray[[All,1036]],True]
Out[]=
{{1036},{1040}}
ArrayPlotbasePatterns
p416 60P5H2V0 gun | GAME OF LIFE |
In[]:=
ListPlot[Transpose[{Total[Lookup[basePatterns,es],{2,3}],Total[Boole@Replace[subpatternArray,_Missing->False,{2}]]}]]
Out[]=
In[]:=
g=AdjacencyGraph[es,Boole@Replace[subpatternArray,_Missing->False,{2}]];
In[]:=
patternRequirements=AssociationThread[es,Total[Boole@Replace[subpatternArray,_Missing->False,{2}],{2}]];
In[]:=
spaceships=Keys[Select[EntityValue["GameOfLife","PatternType","EntityAssociation"],#==="Spaceship"&]]
Out[]=
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
glider
lightweight spaceship
middleweight spaceship
heavyweight spaceship
loafer
LWSS on HWSS
LWSS on MWSS
25P3H1V0.1
edge repair spaceship 1
copperhead
30P4H2V0.4
30P5H2V0
31P8H4V0
dart
X66
weekender
37P4H1V0
orion
fireship
44P5H2V0
turtle
46P4H1V0
wasp
swan
edge repair spaceship 2
crane
ecologist
54P3H1V0
56P6H1V0
58P5H1V1
spider
60P3H1V0.3
60P5H2V0
64P2H1V0
non monotonic spaceship 1
67P5H1V1
big glider
enterprise
70P2H1V0.1
70P5H2V0
brain
72P6H2V0
74P8H2V0
hammerhead
77P4H1V0.1
77P6H1V1
lobster
86P5H1V1
barge 2
2 engine cordership
dragon
114P6H1V0
117P9H3V0
119P4H1V0
pre pulsar spaceship
snail
4 engine cordership
3 engine cordership
160P10H2V0
seal
barge spaceship
7 engine cordership
6 engine cordership
5 engine cordership
10 engine cordership
6 in a row cordership
8 engine cordership
233P3H1V0
274P6H1V0
Sir Robin
7 in a row cordership
295P5H1V1
13 engine cordership
339P7H1V0
p15 pre pulsar spaceship
600P6H1V0
spaghetti monster
demonoid
caterloopillar
In[]:=
Keys[Select[EntityValue["GameOfLife","PatternType","EntityAssociation"],#==="StillLife"&]]
Out[]=
In[]:=
KeyTake[patternRequirements,spaceships]
Out[]=
16,67,120,172,348,340,279,207,351,368,405,456,410,442,377,484,517,524,525,471,419,455,420,534,501,668,665,484,537,666,387,388,491,388,498,647,590,638,525,573,487,590,590,573,590,800,708,666,626,859,668,634,652,687,590,722,942,920,692,792,725,935,922,961,960,966,955,788,705,844,977,879,967,678,886,712,822,0,0
glider
lightweight spaceship
middleweight spaceship
heavyweight spaceship
loafer
LWSS on HWSS
LWSS on MWSS
25P3H1V0.1
edge repair spaceship 1
copperhead
30P4H2V0.4
30P5H2V0
31P8H4V0
dart
X66
weekender
37P4H1V0
orion
fireship
44P5H2V0
turtle
46P4H1V0
wasp
swan
edge repair spaceship 2
crane
ecologist
54P3H1V0
56P6H1V0
58P5H1V1
spider
60P3H1V0.3
60P5H2V0
64P2H1V0
non monotonic spaceship 1
67P5H1V1
big glider
enterprise
70P2H1V0.1
70P5H2V0
brain
72P6H2V0
74P8H2V0
hammerhead
77P4H1V0.1
77P6H1V1
lobster
86P5H1V1
barge 2
2 engine cordership
dragon
114P6H1V0
117P9H3V0
119P4H1V0
pre pulsar spaceship
snail
4 engine cordership
3 engine cordership
160P10H2V0
seal
barge spaceship
7 engine cordership
6 engine cordership
5 engine cordership
10 engine cordership
6 in a row cordership
8 engine cordership
233P3H1V0
274P6H1V0
Sir Robin
7 in a row cordership
295P5H1V1
13 engine cordership
339P7H1V0
p15 pre pulsar spaceship
600P6H1V0
spaghetti monster
demonoid
caterloopillar
In[]:=
es[[53]]
Out[]=
multum in parvo
In[]:=
VertexOutComponentg,
glider | GAME OF LIFE |
Out[]=
,,,,,,,,,,,,,,,,
glider
diagonal on off
duoplet
orthogonal on off
blinker
pre block
block
hook
tail
T tetromino
tub
boat
R pentomino
pre beehive
ship
bullet heptomino
pi heptomino
In[]:=
caterloopillar | GAME OF LIFE |
Out[]=
SparseArray
| |||||
Data not saved. Save now |
In[]:=
ArrayPlot[%90]
Out[]=
In[]:=
TransitiveReductionGraphSubgraphg,VertexOutComponentg,
,GraphLayout"LayeredEmbedding","RootVertex"->
,VertexShapeFunction(Inset[ArrayPlot[basePatterns[#2],ImageSize20],#1,#3]&)
beehive at beehive | GAME OF LIFE |
beehive at beehive | GAME OF LIFE |
Out[]=
In[]:=
TransitiveReductionGraphSubgraphg,VertexOutComponentg,
,GraphLayout"LayeredEmbedding","RootVertex"->
,VertexShapeFunction(Inset[ArrayPlot[basePatterns[#2],ImageSize20],#1,#3]&)
heavyweight spaceship | GAME OF LIFE |
heavyweight spaceship | GAME OF LIFE |
Out[]=
In[]:=
TransitiveReductionGraphSubgraphg,VertexOutComponentg,
onion rings | GAME OF LIFE |
Out[]=
GOL #3: subpattern graph v2
GOL #3: subpattern graph v2
In[]:=
es=EntityList["GameOfLife"];
In[]:=
subpatternArray=
;
In[]:=
subpatternGraph=AdjacencyGraph[es,Boole@Replace[subpatternArray,_Missing->False,{2}]*(1-IdentityMatrix[Length[es],SparseArray])]
Out[]=
In[]:=
ArrayPlot
["SparseArray"]
7 in a row cordership | GAME OF LIFE |
Out[]=
In[]:=
ArrayPlot[#["SparseArray"]]&/@VertexOutComponentsubpatternGraph,
7 in a row cordership | GAME OF LIFE |
Out[]=
,
,
,
,
,
,
In[]:=
VertexOutComponentGraphsubpatternGraph,
,VertexLabels"Name"
7 in a row cordership | GAME OF LIFE |
Out[]=
In[]:=
basePatterns=Unitize/@EntityValue["GameOfLife","SparseArray","EntityAssociation"];
In[]:=
VertexOutComponentGraphsubpatternGraph,
,VertexShapeFunction(Inset[ArrayPlot[basePatterns[#2],ImageSize40],#1]&)
7 in a row cordership | GAME OF LIFE |
Out[]=
In[]:=
VertexOutComponentGraphsubpatternGraph,
,VertexShapeFunction(Inset[ArrayPlot[basePatterns[#2],ImageSize40],#1]&)
p416 60P5H2V0 gun | GAME OF LIFE |
Out[]=
In[]:=
ReverseSort@AssociationMap[Length@VertexOutComponent[subpatternGraph,#]&,EntityList["GameOfLife"]]
In[]:=
ListLogPlot[{Total[Unitize[basePatterns[#]],3],Length@VertexInComponent[subpatternGraph,#]}&/@EntityList["GameOfLife"],AxesLabel{"cell count","# of times used as a subpattern"}]
Out[]=
In[]:=
ListLogLogPlot[{Total[Unitize[basePatterns[#]],3],Length@VertexInComponent[subpatternGraph,#]}&/@EntityList["GameOfLife"],AxesLabel{"cell count","# of times used as a subpattern"}]
Out[]=
In[]:=
ReverseSort@AssociationMap[Length@VertexOutComponent[subpatternGraph,#]&,EntityList["GameOfLife"]]
Additional random thoughts
Additional random thoughts


Cite this as: Stephen Macurdy, "Economic Growth in the Game of Life" from the Notebook Archive (2021), https://notebookarchive.org/2021-07-6gwkdae

Download

