Adding dimensions to Conway's Game of Life
Vložit
- čas přidán 10. 09. 2024
- Get the app here!
Android: play.google.co...
iOS: apps.apple.com...
Windows: www.microsoft....
In this video, features of 1 to 6 dimensional Conway's game of life simulations are discussed. Topics include calculating the maximum neighbors for a universe and some properties of such simulated universes. We see the effects of changing rules of the simulation as well as an extended simulation of a 6 dimensional life simulation.
You sound like a god showing off different universes like they're your toys
The formula d(n) = (d(n-1) * 3) + 2 is correct but would be far more easily expressed d(n) = (3^n) - 1
A more general (and better) formula is the one you provided! In the video, I tried to give a simple understanding why the neighbor count rises like it does.
@@creetah8563 another impressive part of 3^n is that it generalizes to all distances: neighbors(r, d) = (2r+1)^d - 1
Okay, that's interesting! I have actually tried game of life with greater than 1 distance neighbors as well. The results seemed rather explosive, and I didn’t experiment too much on that. Could be that it’s best on some specific rule configurations.
@@creetah8563 in that case i might suggest something like... weighted neighborhoods. the traditional idea is something like, nearer cells are more important, so you could get distance-action without exploding or imploding by prioritizing nearby cells with bigger weights, but you could also try to recover your traditional network behavior by using other neighborhood shapes such as crosses (all cells a chess rook could move to with distance
Yes, indeed. I think there is a lot of interesting work yet to be done on different cellural grid systems. Game of life is compelling because of it's simplicity, but I would definitely also like to work on other cellural simulations. Thanks for your response Ryan!
I'm having trouble understanding what I'm looking at. Is this just showing a 2d slice of the 6d universe? If so, which part? What do the colors mean? How often is a tick?
You are looking at a relatively small 6D universe of about 6 million cells. The simulation space is quite flat so that it's possible to show all of the information on the screen at the same time. The colors are rendered so, that the "hidden" (4D+) dimensions of the simulation are a rotation of the color space of the visible dimensions. The simulation space is also stretched on the screen so that cells in close proximity are drawn nearby each other regardless of their dimension.
A tick happens via the animated transition of the simulation space from one state to another. You can see a brief static rendering of the simulation space between these transitions. So, in this video, one tick happens about every 2 seconds.
@@creetah8563 i don't understand why the images, at least in the period through 3m or so, are all 4 way symmetrical. i've never seen a game of life that is symmetrical except for a few very specific cases where you start with a purely symmetrical position rather than a random seed...
You are absolutely correct. I used a symmetrical starting condition for this simulation. The results would be much more chaotic if a random seed was used.
Glad to find your channel! Subscribed. I love people fooling around with various coding projects, especially when you add some higher dimensional flavor to it.
Can't wait for more!
Thanks for the sub! Will definitely work on other multi-dim stuff as well!
5:35 i would conjecture the rule is 2^(d-1) is a good number for movement in d dimensions because 2^(d-1) cells are able to fill exactly one half of a side-length-2 corner of the cube of neighbors around a cell. in 2d, this means any two orthogonally adjacent neighbors to your target cell; in 3d this means a 2x2 square of neighbors touching your target; this extends outwards.
Yes! This is exactly the case, well put Ryan.
I've been extremely intrigued in emergence lately. I'm trying to grasp what would a 3D analogy of a higher dimensional system of automatons would look like. E8 would be where to start and from that one would derive the rules on how the automatons would behave and then construct a 3D analogue from that.
Hei kiitos videoista. Hyvää matskua..
You could visualize the "hidden dimensions" while simulating 4D+ cellural automatons by giving the hidden dimensions some complementing shape (and populating the same space). Another way would be to expose the hidden dimensions with rotations of the 3D simulation space.
One major issue with visualizing even 3D+ cellural automatons is that we really cannot see everything that's going on in the simulation space because foreground cells are blocking the background cells. For this reason, I have chosen to visualize even 6D game of life simulations in 2D space, so that we can expand the information into an image rather than having issues with cells blocking one another.
@@creetah8563 How do you simulated the 6th dimension without 3d? I could see, up/down, left/right, red value, green value, and blue value, being used to create 5d game of life, but what about 6th one, did you used cmyk instead of rgb?
@@exedeath I divide the simulation space visually into planes which represent slices of the 6d simulation space. These slices can be separated from each other via the perspective button on the upper right corner in the application. This allows the viewer to see all the information in the simulation up to 6d simultaneously. Cells with close proximity to one another are also rendered visually closest to each other. The slices of the simulation can be separated in the application via 3 different methods which alter their location. Additionally, they are separated by a rotation of their color space in a way that all the slices populate a single 360 degrees rotation of the color space.
It is possible to go to even higher dimensional simulations (I have tested up to 7d) but it get's exponentially more expensive to compute and visualize. Additionally, even the 6d simulations can easily have more than 100 slices of the simulation space, so it soon gets impossible to separate the simulation information even when using only 1 pixel for each cell of the simulation. I have found that each added dimension in the simulations is interesting and have special characteristics separating them from other dimensional counts for the simulation.
Adding dimensions? More like “Addicting information!” Thanks for doing this and sharing a great explanation.
*The intro to Speed Racer (2008) be like:*
Instead of a cube, a rhombic dodecahedron seems to be an interesting choice to me. Each of the 12 neighbors would be connected via one face, rather than 3 different kinds of neighbors, face, edge, and vertex. I always thought that hexagonal Life would be interesting. Edit: nevermind I'm dumb. The rhombic dodecahedral space would still be connected at vertexes, resulting in the same number of neighbors as cube.
It's hard to believe someone is dumb right after they have said 'a rhombic dodecahedron'
@@creetah8563 lol
3:10 In some far away universe gravity just got removed
what have I done..
Is it just a series of images at different stages or does the simulation run in real time?
In game of life simulations all cells are updated simultaneously. When you see a transition in the video, the rendering is passing from the previous state into the next. This is shown at 1x speed in the video (real time).
Simulating 3D → 4D → 5D → 6D simulations increases the computation exponentially. The application runs smoothly up to 6D given that you restrict the maximum simulation size.
@@creetah8563 Alright, thanks for the explanation!
@@creetah8563 I wonder if you could improve the performance via the use of sparse and dense matrices in conjunction with FFTs and Inverse FFTs? Almost similar to how some people generate the Mandelbrot Sets...
@@skilz8098 It's possible, thanks for the idea! With improved performance of the system, it would be possible to process even larger simulation spaces or further dimensions.
@@creetah8563 No problem! I find these kinds of mathematical concepts that are interpreted into computer software algorithms with visual graphical displays quite interesting.
Also, if you want a real challenge... try building the back end in either C or C++ using Vulkan and its SPIR-V shaders, well you can write Opengl GLSL shaders and convert them to SPIR-V, and from there maybe even use NVidia's Cuda Language for Compute Processing, and possibly even some of their other frameworks such as A.I. - Machine Learning Algorithms.
Then have the neural networks predict n-generations in based on the initial starting states. With this kind of power and using a well known technique within the graphics pipeline called render to texture; who knows how many dimensions, spatial domain size, and generations one could manage to display with the ability to have a camera to move in and around the view frustum, rotate the view, and to zoom in and out and even to switch or move through the different dimensions...
Having a solid framework like this could be useful for many different fields and their applications. From fluid dynamics, to microbial population, to cellular structure, to DNA sequencing, and even Graphene manufacturing and more.
With having models in the higher dimensions to work with; How much potential does it have to help us with our understanding of complex topics such as quantum mechanics, information theory, etc. pushing the limits of innovation and technology?
I would build the back end or the graphics side of the application done in C/C++ utilizing the shader models of modern hardware. I would also have the middle interface side of the framework done in C/C++ as well, but as for any kind of A.I. Programming, Neural Nets, Machine Learning Algorithms, etc... yes they can be done in C/C++ but I think this is where Python would come in handy...
Just send the data to be trained to the python scripts and once the network is trained you can just invoke it to run the test data from your C/C++ application that then waits for the results and passes them to the Graphics Pipeline and the shaders will take care of the of the job. Also most graphics cards these days does support and have a compute shader module where a lot of computation can be done there too.
One of the reasons I suggested using C/C++ as the back end is due to the fact that one can utilize vector intrinsics and write the assembly code directly in your C/C++ application to help speed up the computations while maintaining a good cache hit to cache miss ratio. This however wouldn't be a very small project. It could take a few months to do as opposed to a few days... Just writing a 3D Renderer alone within Vulkan to get a simple triangle drawn to the screen does take about 1,000 lines of C/C++ code! But I'm always willing to give suggestions!
Very nice video, I hope for your succes!
Thank you Christian. Wishing you all the best!
Suomi perkele 🥳🥳🥳
Cheetaw yeah that was cool!
hmm. What would happen, if you make a GoL like cellular automata, with cell values being more than just 1 and 0, but with something like a range of -8, -7, ... 0, 1, 2 ...., 8 etc.
And having a rule, where each cell is just counting the amount of neighbouring cells with values above (as +1), equals (as 0) and those with lower values as (-1).
The resulting sum of these neighbours count is the correcting value, being added/subtracted to the value of the actual cell. The result of original value and the correcting value gives us the value of this cell in the next iteration.
Make a walled off field with odd numbers, like 9x9 and give only the central cell a different value from the homogenic field.
I am not a coder nor good in math, did something manually on paper. Can someone work with this and tell me, if there is a pattern emerging which resembles a standing wave?
It seems to work as you described at least as a thought experiment! You could imagine waves propagating in that manner. I think diagonal movement needs to be considered separately - maybe some energy needs to be lost, lets say in relation to sqrt(2) ~ 1.4142.
@@creetah8563 I am unfortunately not talented enough to know, where to begin with, if its about developing that concept any further.
But maybe someone like you stumble on something or have the environment to set up your own approach. Would love to see something about that in the future.
I am convinced, If you put some extra layers to that, with "limited" interactions of those cells with corresponding cells of the "vibrating" field below, you could make crazy stuff.
In one of my "thought"-processes I imagined how this could work like a droplet on a pilot wave.
But as you mentioned, the limit of directions of such "waves" movement within such an array of quadratic fields, and the somewhat strange value pikes at the edges of those quadratic waves would be a problem for that.
Thanks for your answer!
@@Chareidos In my experience, working with this stuff on the computer only requires patience and time. You'd be amazed what you can do after just a couple of weeks practicing with some tutorials and lessons!
Fantastic video!
I'm glad you liked it Justas!
0:13 completely incorrect, you can extend the neighborhood on each side.
It's true that those cells in the extended neighborhood are neighbors of other cells. In the context of this video, only adjacent cells are considered neighbors.
@@creetah8563 You need to specify your neighborhood.
yet!
6d in an 2d representation in 3space is pretty convuluted. Would stick to 4d in 3space methinks whereby the fourth dimension would be just time. Would make it easier to Comprehend what's happening.
I agree adding the time dimension would be interesting! However, in that case no additional dimensions are added to the simulation space and the results of the simulation would be identical to those without the time dimension. You would be seeing the past (and the present simultaneously) without any changes to the actual simulation logic. This is interesting in any case, and I have seen people doing that at least with game of life 2d.
"yet"
Alright, the youtube algorithm decided I'm a spammer.
I will repost what I wrote under a different video (vide Neat AI does Lenia)
actually, not exactly. One could provide a simple solution by containing the GoL rules in each cell on their own, and calcualting externally the total energy of the system. Random emerrgence of such cells on the grid would be called dissopation, and not neccesarily be random. It requires a secondary set of contained rules that produces cells in cells, that do not interfere directly with the cells of a greater cell system, but determine where the energy accumulates to form an another greater cell. Well it does require relativity, but there certainly exists a quick workaround. You just have to define the size of a greater cell, and its interior n dimensional sequence.
It requires confined grids bound to each and every cell, for you to be able to calculate the energy densities. Rules remain the same for a cell of any energy density, but it would be interesting to see how energy densities of particular cells change. The only rule you would have to add is the one which defines all neighbouring cells as grids that interfere with each other. If a cell has no neighbours, its a confined grid with borders of given rules defined. Its grids in grids, and the more grids you have, the more rules you can add without interfering with the main rules. Not really particle physics at this point, but definitely a way to measure energy densities. The other thing is to add total and potential energy counter rules for the main grid, but there would be some difficulties with velocities. You would have to change the rules of the main grid, where a total energy of a cell defines its mass. Suppose confined structures as mass and gliders as speed factors on the main grid, but again, would gliders dissopate if there is no neighbouring cell, or would they stay confined within the internal cellular grid? Id have to look up into virtual particle interactions, but the general idea I have for now, is to have grids in empty grids, and the main frame to take the record of both options. If a glider is at the cross section of a confined cell grid, it actually crosses through the frame at which it would originally be, if the cells werent contained, and if it interacts with an another glider and forms a structure, it leaves the original cell and forms an another cell composed only of what has been formed. At this point, you would have to figure out how to keep the total net balance energy confined, and I got no other clue than to deploy grid inflation so that total to potential energy of the system remains the same for each and every turn. With that on mind, you would have to set up an another system of rules for empty grid interactions, and the idea is that mass (stable structures) attract empty grids. Voila. You can contact me and throw some spare change if youve liked that idea. I'll get myself some pizza for when its available to play in three dimensions.
a grid bending and grid expansion parameters would be sufficient. What the game really needs is spin and the newtonian dynamics.
That's on the energy system of a cellular automaton. Fairly simple to code, from what I know about code structure.
Here's the more difficult part that I originally wrote to Creetah
alright, it either ate my latest comment or idk. Seriously, I lost track of my thought process before. So, the general idea is that the equation 4 pi r squared formulates either the surface of a sphere, or the surface of four disks. Those four disks can serve a purpose of complex planar coordinate systems for each cell, and the surface of a sphere can work for the grid. It is important to note that hausdorff dimension of a disk is equal to two, and so is the hausdorff dimension of a square. That conception can serve as a close approximation for measuring the interplanar hausdorff distances, regardless of the shape of a grid piece. You may look up 3blue1brown video by searching for fractal sphere on youtube. Also, fun fact, a cell with 11 neighbours could imitate the neighbours of a spherical cell, as that's how many spheres can touch each other in three dimensions. The idea is to treat the sphere, transformated to the cylindrical grid mentioned above, inside of each and every cell, and calculate the interplanar distances on the four complexified disk (disk, disk', disk'', disk''') coordinate systems. It actually is a non deterministic stochastic automaton I'm explaining. I also recommend Blues video on quaternions, as thats how you can relate internal cellular grid to the mainframe grid, and as long as the mainframe grid allows mathematically for a cell to have up to 11 neighbours, it would be alright. The whole thing would be much easier to achieve using an one dimensional cellular automaton with, eh, how many states are there for each cell capable of having 11 neighbours (2048?) Well, that many. Thats one method of achieving somewhat of what I got on mind. The other thing would be accompanying vectors, but thats an extended search inside of a search engine for anything scientific regarding the phrase 'vector cellular automaton'. You definitely look up what a stochastic process is, but I got no clue on how to encode it as a grid frame for the cell, which was my original idea, thats why Id go with having the hausdorff distances of extreme points on a limited internal grid be the borders defined by vector points, and then the entire structue being treated as a fractal.
As of collision detection such system, the regular square grid pattern would work just fine, as calculating constantly changing fractals colliding with each other would be heavy on the computables - as long as the fractal state for a grid piece is kept in the memory for the moment of predicted grid collision.
There definitely is a need to have two computational planes - one being a grid for the rules of cellular automatons and, lets call them, "universal physics", and the other being a very detailed vector map, for collision detection and calculating of the hausdorff distances, for the things that usually happen "locally".
Good thought would be to implement the tennis racket theorem for spin physics.
If that can be done, it would certainly serve as a workbone for a greater environment for physics and chemistry.
Thank you for elaborating on these ideas! I also watched that video and found it quite fascinating. It's amazing what a simple grid can do if you apply some rules and mathematics to it.
@@creetah8563
I'd say not a problem, but i was somewhat problematic. Hehe.
How the fuck you simulate 6D.
Although it can be difficult to imagine with a human mind, a computer does not mind if it's 3D, 4D, 5D or even 6D. Like a 2D image is arranged in the computer memory using a sequence of numbers (1D data), it's possible to store 3D data with a sequence of 2D data. This goes up all the way up to 6D (4D data is a sequence of 3D data and so on). In the end, it's just a sequence of numbers if you ask the computer, regardless of how many dimensions there are.