Written on Thursday September 27, 2018
mutation each extinction
5.pop average 73
figures just fat
6.pop average 48
x.pop average 460 just fat longest with mu 131616 without only 38453
61.pop keeps doing too well to tell
I was trying to make s.pop into a six figures steady pop size stable population. I wanted to recreate 6.pop whose magic children have done so well that they climb off the measurement scale. I set things up so that s.pop was read from disc and stored in memory. Then, when s.pop died out, she’d be restored from memory rather than from disc. Mutations would happen unless the population was within a certain size range. Once it was all ready and as tested as I was willing to bother with, I let er rip.
It didn’t work, even after hours of running it over a couple of days. It occurred to me that the requirements for shutting down mutation might be too damn restrictive, but I still wanted to test the two figure setup. I tried running it on the server, but had no joy of it. That got me to thinking about running two experiments on my machine at once.
I changed the size requirements to be a bit more forgiving and let that run. Meanwhile, everything’s being done in figures instead of figures1. That means that only the fat ports are implemented, not skipcom, which I want, or snapcom, which I don’t want, or skipsnap which I want even less.
At that point I was thinking about how 6.pop had popped out of an experiment when I wasn’t looking for any such thing, how it might be an extremely low probability event, how I could run the system for hours and hours and maybe get lucky and catch one that I might not see again for days or weeks or months of computer time, and how that would be such a shame if it happened in a version I don’t plan to continue using. Further back in the mental landscape was the idea that maybe skipcom would be just that little bit more stable, and might be able to do what I wanted better than just fat ports.
In figures1 was a file called figures.txt. That was the place I stored skipcom before I decided to turn it into skipsnap. I change the figure.java file into skipsnap.txt, and figures.txt into figures.java. Then I took the test.java and Tracker.java files from figures, and copied them over the versions of those files in figures1. I love how flexible my system is, because that’s all I needed to setup for the next experiments.
I ran it using random birth to put in the population, rather than reading anything into memory. The brood size was set to 10. I didn’t happen to have the equivalent of s.pop in figures1, and didn’t want to bother producing it. As a quick and dirty way to encourage the population to find its own method of limiting its population size, mutations were off as long as the population size was less than 18 exclusive, while the max pop size was 20.
What I got was a population that was safe from mutation, stable, but not steady. The pop size ranged from as little as two figures, up to 17, back and forth. I didn’t have much hope for it.
While watching what was happening, I realized that with populations loaded to, and reloaded from, memory, I had a much better way of figuring out how many mutations a given population can survive on average. Right in the report is the number of extinctions, and the total number of mutations. All I have to do is divide mutations by extinctions. Since it will do many more trials than the ten I was using, it can provide a much more accurate measure. I set it up to just mutate, no matter the size, and to reload the newly created and saved population after an extinction. When I’d saved it, it happened to have a pop size of 5, so I named it 5.pop. it had an average of 73 mutations for each extinction. I wasn’t that excited, but then I decided to see how well 6.pop would do for the same test. She starts with one more figure than 5.pop does, but does much worse, coming in at only 48 mutations per.
I’d given up on using s.pop, and started just messing around, testing the averages for different populations. At one point, one test in figures, just the fat ports, had stopped. I was still running another one in figures1, fat ports and skipcom. I thought it a shame not to be running two experiments at once, so I set something up and ran it, but I cannot for the life of me remember what it was.
I was running out of time. I had an episode to record, and my brother had agreed to play co-host again from his far away location. He wanted to get it done at four, and that time was fast approaching, while I still had some research to get done.
I looked at the results for the experiment running in figures. They were right in line with my expectations—probably why I can’t remember what was going on. Still, there was a population running that was holding steady at 19 figures, just under the max pop size of 20. I noticed that the extinction count hadn’t gone up in a while, while the mutation count was still increasing. I paused the system and saved it. I hadn’t the slightest notion of how this one was going to act, and I’d already forgotten what I was testing. With no clue where it came from or how it would act, I named it x.pop.
A quick change to the system, and I loaded it from memory to see how stable it was with mutations turned off. It only made 38,453 figures, and then they all died. Purely on a whim, I decided to see how many mutations it took to cause an extinction on average. I was surprised when the early results were around 409 mutations per. What’s more, when I looked at the report, during one run it had made more than 47,000 figures. At least sometimes, it lived longer when being mutated than without mutation.
I left it running right up until it was time to record. It managed to make 131,616 figures for the longest run, and had an average of 460 mutations per extinction.
That’s when it finally hit me. Instead of trying to select for characteristics of populations that are mutation resistant, suppose we select for mutation resistance? Suppose that rather than pound my head against the mutation problem, I let evolution solve it for me. I know it can.
I’ve got different populations with different levels of resistance, including 61.pop. When I tried to get an average for 61, she ran for nearly an hour without dying. From earlier experiments, I know that she can be killed off by smaller numbers of mutation, but she can also make it for ridiculously longer periods and stupidly huge numbers. I suspect that a population might be able to survive mutations and be long term stable while being mutated. I suspect that if I produce such a population, there’s a chance it would go extinct without mutations.
At present, no matter how robust a given population is, when it dies out, the information is lost. There’s no transfer from one population to the next. Even if the earlier population lived for hours upon hours before the extinction, from the next population’s point of view, it may as well never have happened.
I’ve got some notions on how to select for mutation resistance, to move the information passed the extinction. It’s all about saving to, and restoring from, memory.