Both sides previous revisionPrevious revisionNext revision | Previous revision |
ulam:demos:coevolution [2015/10/14 14:47] – [The Huegene model] ackley | ulam:demos:coevolution [2017/08/15 03:58] (current) – ackley |
---|
| |
Suppose there are two species of creatures, the //Plants// and the //Herbivores//, existing in a two-dimensional grid of sites that each can hold one creature. Plants are immobile, but they spontaneously grow over time and will split into empty adjacent sites if they are large enough. The Herbivores move randomly and attempt to eat any Plants they stumble over. Herbivores must eat enough Plants to avoid starving to death, and if they accumulate enough energy they can produce an offspring Herbivore in a neighboring empty site. | Suppose there are two species of creatures, the //Plants// and the //Herbivores//, existing in a two-dimensional grid of sites that each can hold one creature. Plants are immobile, but they spontaneously grow over time and will split into empty adjacent sites if they are large enough. The Herbivores move randomly and attempt to eat any Plants they stumble over. Herbivores must eat enough Plants to avoid starving to death, and if they accumulate enough energy they can produce an offspring Herbivore in a neighboring empty site. |
{{ youtube>jQaXtbrVNaU?medium|Plant vs Herbivore}} | {{ youtube>jQaXtbrVNaU?500x280|Plant vs Herbivore}} |
| |
The Plants have genetic information that allows them to appear as any (24 bit RGB) color. Any given Plant has a fixed color for its whole lifetime, but if it manages to produce an offspring Plant, the child's color will be slightly modified --- "mutated", completely at random --- compared to the parent. Regardless of their color, all //Plants// are equally efficient at growing and having offspring plants, and so on --- in a world consisting only of //Plants// their colors are completely irrelevant to their evolutionary success. | The Plants have genetic information that allows them to appear as any (24 bit RGB) color. Any given Plant has a fixed color for its whole lifetime, but if it manages to produce an offspring Plant, the child's color will be slightly modified --- "mutated", completely at random --- compared to the parent. Regardless of their color, all //Plants// are equally efficient at growing and having offspring plants, and so on --- in a world consisting only of //Plants// their colors are completely irrelevant to their evolutionary success. |
If we put a single Plant into an empty grid, it will gradually produce a population of Plants around it, with increasingly mutated colors the further we get from the original "Ancestor". What will happen if we then start dropping Herbivores near the Plant population, until we get one that "catches" --- that can eat the available Plants successfully enough to produce offspring? | If we put a single Plant into an empty grid, it will gradually produce a population of Plants around it, with increasingly mutated colors the further we get from the original "Ancestor". What will happen if we then start dropping Herbivores near the Plant population, until we get one that "catches" --- that can eat the available Plants successfully enough to produce offspring? |
| |
The video at right shows one possible result, run in the MFM simulator for several hours of real time and displayed so that about 90 events happen at each site during each displayed second. | The video at right shows one possible result, run in the MFM simulator for several hours of real time and displayed so that about 90 events happen at each site during each second. |
| |
===== ULAM source code ===== | ===== ULAM source code ===== |
*/ | */ |
element Plant { | element Plant { |
typedef Plant Self; | |
typedef Unsigned(8) Channel; | typedef Unsigned(8) Channel; |
typedef Channel ARGB[4]; | typedef Channel ARGB[4]; |
*/ | */ |
element Herbivore { | element Herbivore { |
typedef Herbivore Self; | |
typedef Unsigned(8) Channel; | typedef Unsigned(8) Channel; |
typedef Channel ARGB[4]; | typedef Channel ARGB[4]; |