CPA Prototype


#21

I was thinking about that. So basically the way it works now is that, for each compound, there is an ocean level and every step the level in the patch is moved 1% closer to the ocean level. How about just moving the ocean level 0.01% towards the patch level at the same time? (Or some other, smaller, fraction which represents the ratio of the mass of the patch to the mass of the ocean). That would keep track very nicely of the effect the microbes were having on the ocean. Moreover it would allow some transport between patches, if the ocean level of O2 starts at 0 but one patch is a net producer then slowly the whole ocean will start to oxygenate.

I figure that would be pretty elegant for what we want to do.

We could even just add an “Atmospheric Stabilisation” where each turn the atmosphere and the ocean move towards each other 0.01% (of course only gasses would be in the atmosphere, not protein! (though I used to work in a Pizza Hut and it’s atmosphere was like 25% pepperoni by mass)).


#22

I like that idea, it’s good to have a buffer for the non-biological compounds. We could even add some implicit processes which cause biological material (say, ATP, etc) outside living organisms to chemically break down as time passes – simply make sure that when they break down they decompose into constituent compounds at a good ratio, and you’re golden. Together, those would basically be the ocean-stabilization system you have going, just with some more nuance.


#23

From another thread “Also, the cell still stockpiles CO2, which sometimes kill you since you don’t have any room for oxygen, so keep that in mind.”

Under the threshold system, there is a low threshold where the microbe will try to absorb compounds, a high threshold above which it will try to use up compounds and a vent threshold above which the microbe will just vent the excess instantaneously. This means stockpiling is no longer a problem as each compound has it’s own set of thresholds.

The problem this raises, however, is how to relate the thresholds to one another. Say you add a vacuole what effect should that have? Should it increase all your thresholds for all compounds? Should you be able to choose a specific compound for it to store?

Normally it really doesn’t matter what your thresholds are because compounds are just passing through the bins as they are processed and storage isn’t really important. However it is very important during a period when a resource is scarce. Maybe there is a day night cycle or maybe there are periodic bacterial blooms which use up all of one compound. In these cases what you are storing, and how much of it you have, becomes very important.

Edit: @seregon will hate this because it’s discontinuous but…

We could have a low vent threshold and a high vent threshold. When the level of the compound gets to the high threshold it instantly vents down to the level of the low threshold. Obviously disgustingly discontinuous but it would work really well with the compound clouds because the microbes would produce a reasonable sized cloud every once in a while rather than trying to produce a little cloud every timestep.

I suppose in the CPA system the release could be spread out over time to get the continuity back whereas in the swimming around it could be instant.


#24

I like that idea – a discontinuous system with two vent thresholds, if integrated over all the organisms in aggregate, and assuming that the organisms have a relatively-wide distribution of how much of the compound they have, would give you a continuous venting curve, which can keep seregon happy.


#25

I’ve been thinking a little bit about Auto-Evo implementation, what do you think of this? So basically the system is to offer a species 5 possible changes and let it pick the one which is “most beneficial to it” over a certain time span. I think the following would probably work as a way of implementing this.

  1. When it is a species turn to be evolved make 5 clones of the patch it is in.
  2. In each of these patches alter the species in some way (in fact there should probably be a control where the species is not altered to discount the possibility all 5 changes are negative).
  3. Run all these patches forward to the next Auto-Evo time using exactly the same algorithms as the other patches.
  4. Select the patch in which the species in question has done the “best” and delete all the others.

I think this would work quite nicely, cloning the patch is probably quite straightforward.

I put the term “best” in brackets because it needs some delicacy. For example if the population is oscillating you can’t simply take a single value as it might be in a trough. A time weighted average might be better. It might be best to weight the average towards values near the end of the time span where the changes have had most effect.

So if the population number is P(t) for t = t1, t2, t3 … tn then have a value like

Average Population = Sum_t P(t) / (1 + (tn - t))

Finally there is one more delicacy which is that if there is to be a flow of compounds between patches (like light cascading down through a stack or ocean currents moving compounds) then that system will need to be set up in such a way that it can route the compounds in parallel to these 5 patches while they are being tested. Moreover if there is a patch which takes an input from the one being tested some thought will need to be put into working out which of the 5 patches’ output it will be connected to.


#26

I can add a few more problems to the list:

  1. It’s a huge multiplier on the amount of computation required to run it.
  2. Patches will often have enough mixing that a species will have a range over multiple patches, and won’t necessarily diverge in the two, meaning it’s a lot more complicated to figure out what we need to simulate multiple futures for

I think we will have to use heuristics by necessity – for example, if we can approximate the partial derivatives of the goal function w.r.t. the evolved parameters, that will be good enough to get nearly the same result without a simulation. Sure, there’s the problem of confounding factors and interactions between various parameters, but I think we could figure those out bit by bit and slowly make a more realistic projection, or maybe, if we decide it won’t be enough for realistic choices, reduce the amount of work the best-of-possible-futures simulation would do.


#27

The problem is that knowing the derivatives is only really valuable in a linear system. The map from the parameter space to the population level is highly non-linear and discontinuous and so it will provide no useful information. It’s like what will happen if you add a mitochondria? Well the effect of faster sugar processing is linear and could be predicted but the fact that you are now slower and now a predator will catch you that couldn’t before which boosts it’s population which increases the interactions you have with it which reduces your population even further can’t be.

When it comes to having “too many patches” we’ll need to work out how many that is. If it’s 500 then having even 100 of them devoted to being clones working out Auto-Evo results is fine. If the max number of patches is like 6 then yeah we can’t clone one 5 times.


#28

So I’ve been doing a bit of work on this today and it’s been an odd experience. So the model I’m working on is only running the compounds system, so that means each cell absorbs compounds, processes them, makes more of itself and then dies. This model is using the new compounds list (which is really nice to have) and is basically exactly the same as the old one with no bacteria. There’s no predation and therefore nothing non-linear about the model. So this is the kind of graph I could expect, convergance to an equilibrium.

But then sometimes it will do this!

My only explanation is that the patch is running out of something and that is causing this strange behaviour (like it would fall into equilibrium but there’s not enough phosphate or something and when it runs out it causes the erratic behaviour).

Working on this is hard because it’s important to understand what is happening (so it’s not too chaotic) but the system is suuuuuper comlicated so understanding it is hard. Adding in the predation is going to make it even more complicated. Anyway I’ll keep chipping away at it.

Edit: This looks pretty even though I have no idea what it means :slight_smile:


#29

So I added predation in. It’s looking ok but also it’s non-linear now, so it’s a lot harder to predict, which I guess is the fun of it!

Now it just needs Auto-Evo (which is something I haven’t really done before but which I think is quit tractable in one patch).

(BTW these graphs show the populations of the 5 species in the patch).




#30

So I added an Auto-Evo prototype! Which is a pretty cool step. It’s super basic right now. Each microbe has a “fight strength” (which measures how strong it is at fighting). It’s assumed everyone is predating on each other and so the stronger you are the more compounds you can steal!

Anyway here is some text output. As you can see the sim clones the patch 5 times, assigns different fight strengths to one of the species in the different patches, runs the simulation forwards and picks the patch where that species did best to clone for the next round.

I got stuck for aaaaages because it just wasn’t working, predation was doing nothing. And then I realised that after assigning the new “fight strengths” I wasn’t actually feeding that info into the predation system, so the predation system kept running off the old values so the updates did nothing. It’s fixed now, here’s some sample output.

Right now it’s just the worlds worst algorithm for maximising between a set of 5 numbers. But I can add the ability to add or subtract an organelle to the mix quite easily (I hope) and then it’s really auto-evo.


Press SPACE to start.
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.754651201513 1 : 0.630489045995 2 : 1.75414530619 3 : 0.783196179264 4 : 0.614428963385 .
The best version was in patch 2 with average population 1.75414530619
Mutation will be applied to species 3
Patch 0 will be the control where species 3 has fight strength 0.799354792645
In patch 1 the fight strength has been set to 0.373117542223
In patch 2 the fight strength has been set to 0.359348950753
In patch 3 the fight strength has been set to 0.720311437945
In patch 4 the fight strength has been set to 0.562343156208
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 1.33284520679 1 : 1.07763681175 2 : 1.06845425608 3 : 1.30102653671 4 : 1.19476673758 .
The best version was in patch 0 with average population 1.33284520679
Mutation will be applied to species 2
Patch 0 will be the control where species 2 has fight strength 0.165642703726
In patch 1 the fight strength has been set to 0.729646392214
In patch 2 the fight strength has been set to 0.679137866817
In patch 3 the fight strength has been set to 0.672461094159
In patch 4 the fight strength has been set to 0.994364828776
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.216834441683 1 : 0.594851848916 2 : 0.562848744065 3 : 0.558934757155 4 : 0.751004957837 .
The best version was in patch 4 with average population 0.751004957837
Mutation will be applied to species 4
Patch 0 will be the control where species 4 has fight strength 0.144702198985
In patch 1 the fight strength has been set to 0.0392951511741
In patch 2 the fight strength has been set to 0.293362999852
In patch 3 the fight strength has been set to 0.665202339106
In patch 4 the fight strength has been set to 0.248122717271
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.254030581144 1 : 0.207782202286 2 : 0.345149813049 3 : 0.704804631903 4 : 0.313758150154 .
The best version was in patch 3 with average population 0.704804631903
Mutation will be applied to species 3
Patch 0 will be the control where species 3 has fight strength 0.799354792645
In patch 1 the fight strength has been set to 0.0856754690802
In patch 2 the fight strength has been set to 0.0969957222969
In patch 3 the fight strength has been set to 0.869255072583
In patch 4 the fight strength has been set to 0.623476751795
[Finished in 61.2s]


#31

I’ve been working on this today.

So I added Flagella and Pili, the pili give you extra fight strength but make you slower (your speed is (number of flagella) / (number of organelles total) which is basically F/m from Netwon’s 2nd law) and the Flagella make you faster.

Then I added a new process “Use Energy” which is the drawback for Flagella (because if they have no drawback you will end up with millions of them).

Then I added a function to calculate fight strength, you get +1 point for each pilus and +2 for each agent gland. I’m going to put in a function to make agent glands spill their agents into the environment over time.

Then I made auto-evo do nothing other than add and subtract organelles. Here are the results, pretty encouraging so far (though it is doing a suspicious amount of removing)! It needs more work, like making sure it doesn’t test the same adaptation twice. I should probably also ban taking out the Nucleus, as that is the end of your species (because it can no longer reproduce), same with taking away the last of your cytoplasm. Then on to improving the predation, there’s a lot left to do.

Press SPACE to start.
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.671540980176 1 : 0.652549566773 2 : 0.920932027552 3 : 0.991623618115 4 : 1.51821634036 .
The best version was in patch 4 with average population 1.51821634036
Mutation will be applied to species 4
Patch 0 will be the control where species
In patch 1 removing Pilus
In patch 2 removing Pilus
In patch 3 removing Pilus
In patch 4 adding Cytoplasm
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.274413813797 1 : 0.300821843165 2 : 0.300818935432 3 : 0.300816623845 4 : 0.262283926596 .
The best version was in patch 1 with average population 0.300821843165
Mutation will be applied to species 4
Patch 0 will be the control where species
In patch 1 removing Flagella
In patch 2 removing Nucleus
In patch 3 removing Pilus
In patch 4 removing Flagella
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.124915024653 1 : 0.125522474128 2 : 0.126250564205 3 : 0.132958844778 4 : 0.125526545945 .
The best version was in patch 3 with average population 0.132958844778
Mutation will be applied to species 2
Patch 0 will be the control where species
In patch 1 removing Agent Gland
In patch 2 adding Chemoplast
In patch 3 adding Lysosomes
In patch 4 removing Flagella
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.0725548500441 1 : 0.0788814003915 2 : 0.0713950452204 3 : 0.0723400478035 4 : 0.0737124757885 .
The best version was in patch 1 with average population 0.0788814003915
Mutation will be applied to species 3
Patch 0 will be the control where species
In patch 1 removing Mitochondria
In patch 2 adding Agent Gland
In patch 3 adding Agent Gland
In patch 4 adding Pilus
Percentage Completed : 0 10 20 30 40 50 60 70 80 90 done
The resulting populations are :
0 : 0.142734595367 1 : 0.145989153456 2 : 0.131621933423 3 : 0.131621949926 4 : 0.135007811685 .
The best version was in patch 1 with average population 0.145989153456
Mutation will be applied to species 2
Patch 0 will be the control where species
In patch 1 adding Agent Gland
In patch 2 removing Chemoplast
In patch 3 removing Chloroplast
In patch 4 adding Flagella


#32

(Not really sure why some of the text in the above post is big).

Did some more work on the prototype today, good news is that now it’s got more sensible criteria for choosing which adaptations to make and it does kind of work. I haven’t put in any drawbacks to being big (speed is not factored in) and so you would think the species would just get bigger and bigger, here is the position at the beginning.

Current State: F = Flagella, A = Agents, P = Pilli, T = Total number of organelles:
F : 0 A : 1 P : 0 T : 7 .
F : 1 A : 0 P : 3 T : 13 .
F : 3 A : 0 P : 0 T : 9 .
F : 2 A : 0 P : 0 T : 11 .
F : 1 A : 1 P : 0 T : 14 .

and here it is again after 50,000 steps and 100 auto-evos

Current State: F = Flagella, A = Agents, P = Pilli, T = Total number of organelles:
F : 0 A : 3 P : 3 T : 28 .
F : 3 A : 2 P : 9 T : 26 .
F : 4 A : 3 P : 3 T : 20 .
F : 2 A : 3 P : 1 T : 26 .
F : 1 A : 4 P : 4 T : 27 .

As you can see it has correctly detected that bigger is better and that more agent glands and pilli is good (because they have no drawback). However the total populations go from

The resulting populations are :
0 : 0.162049525373 1 : 0.169942198052 2 : 0.171268341588 3 : 0.15482677436 4 : 0.168311961156 .

to

The resulting populations are :
0 : 4.38359402133e-94 1 : 3.95512962317e-94 2 : 3.95512962317e-94 3 : 3.95512962317e-94 4 : 3.95512962317e-94 .

which is obviously a bit of a problem. In the long run the species are having trouble keeping their populations up. I’ll work on this some more tomorrow.


#33

Good news everyone.

I managed to fix the bug where the populations were constantly declining. Turned out when I was calculating what each species was made of I wasn’t clearing the old values but just adding to them. So the first turn you need 10 DNA to make your nucleus. Then in the second turn you need 20 to make the same nucleus etc. So they system was working fine but the populations were getting smaller and smaller.

It’s kind of being weird though, like it turned these species

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 2 A : 1 P : 0 C : 2 T : 9 .
F : 0 A : 0 P : 2 C : 1 T : 14 .
F : 3 A : 1 P : 1 C : 1 T : 12 .
F : 0 A : 0 P : 0 C : 0 T : 10 .
F : 1 A : 1 P : 1 C : 3 T : 16 .

into these

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 1 A : 0 P : 0 C : 0 T : 2 .
F : 0 A : 0 P : 2 C : 0 T : 2 .
F : 1 A : 1 P : 0 C : 0 T : 2 .
F : 2 A : 2 P : 3 C : 0 T : 11 .
F : 0 A : 1 P : 0 C : 0 T : 2 .

Why did it take away all the chloroplasts? How can any of them survive if there’s not chloroplasts in the whole patch??? They may have been in the process of all dying out, not sure. In general it thinks being smaller is better (if they are of size 2 it means just nucleus and cytoplasm remain). My guess is they do this because by removing an organelle you are made of less stuff per cell so the total population gets a big bump. Like if you go from 3 organelles to 2 that’s like a 50% population increase, so any other adaptation has to be better than this or it will be discarded. The problem is this is very short termist. Maybe the number of steps between auto-evos is too short.

With more steps between auto-evos it turned this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 1 P : 0 C : 0 T : 8 .
F : 2 A : 1 P : 0 C : 2 T : 7 .
F : 1 A : 1 P : 0 C : 0 T : 7 .
F : 0 A : 1 P : 1 C : 1 T : 14 .
F : 1 A : 0 P : 0 C : 0 T : 19 .

into this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 0 P : 1 C : 1 T : 2 .
F : 0 A : 3 P : 1 C : 1 T : 6 .
F : 0 A : 1 P : 0 C : 0 T : 2 .
F : 1 A : 2 P : 1 C : 0 T : 7 .
F : 0 A : 1 P : 0 C : 0 T : 8 .

Which I guess is better because it added a chloroplast! Also I just noticed that top species has no nucleus or cytoplasm. Damn I thought I fixed that :frowning:


#34

Ok so I fixed the whole “don’t remove the nucleus or the last of the cytoplasm” thing, these results are quite interesting. It turns this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 0 P : 1 C : 0 T : 8 .
F : 2 A : 0 P : 3 C : 2 T : 21 .
F : 2 A : 1 P : 0 C : 4 T : 21 .
F : 0 A : 3 P : 1 C : 1 T : 7 .
F : 2 A : 4 P : 2 C : 0 T : 20 .

which are all quite random setups, into this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 0 P : 0 C : 0 T : 2 .
F : 0 A : 2 P : 4 C : 0 T : 10 .
F : 1 A : 3 P : 0 C : 4 T : 17 .
F : 0 A : 7 P : 3 C : 0 T : 12 .
F : 0 A : 9 P : 0 C : 0 T : 11 .

So the top species is a scavenger, it’s just nucleus + cytoplasm. The third is a photosynthesizer with 4 chloroplasts. The others are specialist predators. The bottom one has 9 agent glands and a nucleus and cytoplasm and that’s it. The penultimate one is the same.

This is the kind of thing I was hoping it would do :smile: ATM there is no real penalty to being big and no advantage to being fast (so all flegella do is burn energy for nothing). I’m hoping that if I make it advantageous to be fast then they will be given more flagella. There may also need to be a function which spills agent continually from each agent gland (as otherwise they are not really penalised enough).

Also the whole “it’s best to get rid of all your organelles” thing needs to be thought about, that’s a pretty huge problem.

Still some progress!

Edit: Also here is a nice population dynamics-y looking picture.


#35

There needs to be quite a lot of timesteps between each auto-evo to make sure the true state of the system merges away from the initial conditions. At the moment my computer can do 1000 timesteps (which I think should be enough) in 16 seconds, so that’s reasonable I guess (my computer is kinda old but not a potato). That’s how long the player will have to wait while the computation is done. Really it would be better to have 10,000 timesteps however that’s quite long.

I think it will be sped up a lot with c++ and multi-threading. I think we might be able to do something clever where the computation is done in the background while the player is swimming around. However this is for 1 patch with 5 species in it (granted it’s copied 5 times by auto-evo so it’s really like 5 patches). I imagine we would want 20+ species per patch and 20+ patches? Which is a big step up in the amount of computation (especially because predation is run for each species in relation to each other and so grows exponentially with the number of species).

Anyway I guess we won’t know how fast it’ll be before we build it in c++. Also the player can calibrate it for their own computer by changing the number of species per patch and number of patches. I guess if you’ve got a potato you’re gonna be living in a small world.

Today I added a mechanism to give the faster species a discount when it is the prey (because it can choose to run away) which finally gives flagella a meaning. Here’s a run (with 1000 timesteps between auto-evos and note none of them have collapsed down to 2 organelles).

From this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 3 P : 1 C : 0 T : 8 .
F : 1 A : 3 P : 1 C : 3 T : 22 .
F : 2 A : 1 P : 1 C : 5 T : 16 .
F : 0 A : 2 P : 1 C : 1 T : 9 .
F : 3 A : 5 P : 1 C : 2 T : 19 .

to this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 0 A : 4 P : 1 C : 0 T : 7 .
F : 1 A : 5 P : 1 C : 0 T : 14 .
F : 2 A : 1 P : 1 C : 3 T : 10 .
F : 0 A : 4 P : 0 C : 0 T : 7 .
F : 1 A : 4 P : 0 C : 1 T : 10 .

I’m sad by how little it values chloroplasts. Maybe predation is too strong or something.

Here’s another run, with predation turned down (there’s parameters for changing the strength of predation and how much discount speed gives you). This was 100 auto-evos with 1000 time steps between them (took 26 minutes).

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 1 A : 0 P : 1 C : 0 T : 7 .
F : 1 A : 4 P : 6 C : 1 T : 21 .
F : 1 A : 1 P : 1 C : 1 T : 7 .
F : 2 A : 2 P : 2 C : 6 T : 21 .
F : 1 A : 2 P : 1 C : 1 T : 13 .

to

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, T = Total number of organelles:
F : 1 A : 0 P : 0 C : 0 T : 4 .
F : 1 A : 2 P : 0 C : 0 T : 5 .
F : 2 A : 0 P : 2 C : 1 T : 7 .
F : 1 A : 0 P : 0 C : 1 T : 5 .
F : 1 A : 2 P : 1 C : 0 T : 6 .

Interesting how this time it reduced the amount of agent glands and pilli to reflect the lowered effectiveness of predation. Again not so sure why it’s so keen on getting rid of chloroplasts, maybe 2 is enough to fund 5 species with sugar. I guess plants make sugar for themselves and for us.

Also note how the species are all quite small. I think this is because they want to be fast (speed = number of flagella / number of organelles) and it’s easier to reproduce if you are made of less stuff. However it would be nice to find a way of getting bigger cells to emerge. Looking at the list of organelles (because I turned off hydrogen sulphide) there are only 4 options, Cytoplasm, Chloroplast, Mitochondria and Lysosomes. And you don’t really need Mitochondria or Lysosomes, they only break things down.

Anyway I ran it again with a more comprehensive readout.

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 0 A : 2 P : 0 C : 0 Y : 2 L : 1 M : 2 T : 13 .
F : 1 A : 0 P : 0 C : 0 Y : 2 L : 0 M : 1 T : 7 .
F : 3 A : 2 P : 1 C : 1 Y : 2 L : 1 M : 2 T : 17 .
F : 1 A : 3 P : 1 C : 0 Y : 1 L : 0 M : 1 T : 8 .
F : 0 A : 0 P : 1 C : 0 Y : 1 L : 0 M : 3 T : 10 .

to this

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 0 A : 2 P : 0 C : 1 Y : 1 L : 0 M : 0 T : 5 .
F : 0 A : 1 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 3 .
F : 0 A : 1 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 3 .
F : 1 A : 0 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 3 .
F : 0 A : 0 P : 1 C : 0 Y : 1 L : 0 M : 1 T : 4 .

As you can see the cells totally ditch lysosomes and mitochondria. I guess the cost of making them is much more than their usefulness, which should prolly be changed.

Overall I’m pretty happy with how it’s working right now.

Edit: Lame. I ran it for 500 auto evos of 1000 steps (which took like 2 hours) and they all just fell down to nothing.

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 0 A : 0 P : 1 C : 0 Y : 1 L : 0 M : 0 T : 3 .
F : 0 A : 0 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 2 .
F : 0 A : 1 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 3 .
F : 0 A : 0 P : 0 C : 0 Y : 1 L : 1 M : 0 T : 3 .
F : 0 A : 0 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 2 .

Here is an obligatory pop-dynamicy image.


#36

Is auto-evo optimizing for populations containing more individuals, or containing more biomass (particularly, dry biomass)?

Cuz the main problem you seem to be facing could be from optimizing for number of individuals when it should be optimizing for dry biomass.


#37

Ok yeah good point.

So I took out all references to population and made everything refer to the compounds locked bin (biomass). This takes out all the discontinuities. I changed the absorbtion formula from

populationsurface_areahow much you want

to just

how much you want

because population and surface area are both computed by the changing blueprint and so they will experience shocks. I think it made everything more stable. Here is a quick run

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 3 A : 2 P : 0 C : 1 Y : 2 L : 1 M : 0 T : 12 .
F : 3 A : 3 P : 2 C : 3 Y : 2 L : 2 M : 1 T : 18 .
F : 0 A : 0 P : 1 C : 0 Y : 2 L : 1 M : 1 T : 7 .
F : 1 A : 2 P : 1 C : 1 Y : 5 L : 1 M : 1 T : 16 .
F : 1 A : 0 P : 1 C : 3 Y : 1 L : 0 M : 0 T : 7 .

to

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 6 A : 4 P : 0 C : 0 Y : 1 L : 1 M : 0 T : 14 .
F : 2 A : 6 P : 6 C : 0 Y : 1 L : 0 M : 1 T : 17 .
F : 2 A : 0 P : 3 C : 3 Y : 1 L : 0 M : 1 T : 13 .
F : 2 A : 6 P : 0 C : 0 Y : 1 L : 0 M : 0 T : 10 .
F : 3 A : 5 P : 7 C : 0 Y : 1 L : 0 M : 0 T : 17 .

which is pretty reasonable, basically a classic arms race. Here’s another, longer, run

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 2 A : 1 P : 1 C : 3 Y : 5 L : 0 M : 2 T : 20 .
F : 1 A : 0 P : 2 C : 0 Y : 1 L : 2 M : 0 T : 8 .
F : 3 A : 0 P : 1 C : 0 Y : 2 L : 1 M : 0 T : 11 .
F : 0 A : 1 P : 1 C : 1 Y : 1 L : 1 M : 1 T : 9 .
F : 1 A : 0 P : 1 C : 3 Y : 2 L : 2 M : 1 T : 12 .

to

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 1 A : 3 P : 4 C : 0 Y : 1 L : 1 M : 0 T : 13 .
F : 7 A : 2 P : 2 C : 1 Y : 2 L : 1 M : 0 T : 17 .
F : 1 A : 5 P : 4 C : 0 Y : 1 L : 0 M : 0 T : 12 .
F : 0 A : 3 P : 1 C : 1 Y : 1 L : 1 M : 1 T : 11 .
F : 1 A : 3 P : 6 C : 0 Y : 1 L : 0 M : 0 T : 12 .

Which seems alright, still a very low number of chloroplasts. Also that’s a very speedy plant!


#38

Do you provide environmental glucose to avoid having everything die at the beginning?

If so, maybe you can try to ramp off the amount of available glucose, and see if more species take up photosynthesis.


#39

At the beginning each species is given a random amount of each compound but then they are fed with no more. Also the values in the patch are moved towards the values in the ocean as a whole so any glucose which is spilled by a species is washed away. I guess I could try increasing the rate of this washing away and decrease the strength of predation and see what that does.

Here is an image of the first step where all the species die away to a level where they can sustain their population.

Here are the results of a long run with predation turned off (where the only way to get glucose is to make it yourself).

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 1 A : 0 P : 2 C : 0 Y : 1 L : 1 M : 0 T : 7 .
F : 1 A : 0 P : 1 C : 0 Y : 3 L : 0 M : 1 T : 10 .
F : 0 A : 2 P : 2 C : 2 Y : 4 L : 1 M : 0 T : 14 .
F : 5 A : 1 P : 1 C : 2 Y : 3 L : 1 M : 3 T : 22 .
F : 3 A : 0 P : 0 C : 2 Y : 4 L : 4 M : 2 T : 21 .

to

Current State: F = Flagella, A = Agents, P = Pilli, C = Chloroplast, Y = Cytoplasm, L = Lysosomes, M = Mitochondria, T = Total number of organelles:
F : 1 A : 0 P : 1 C : 2 Y : 2 L : 2 M : 2 T : 11 .
F : 2 A : 0 P : 0 C : 2 Y : 2 L : 0 M : 1 T : 11 .
F : 0 A : 2 P : 1 C : 4 Y : 2 L : 1 M : 1 T : 12 .
F : 3 A : 0 P : 0 C : 2 Y : 3 L : 1 M : 1 T : 11 .
F : 2 A : 0 P : 0 C : 1 Y : 2 L : 4 M : 0 T : 12 .

So yeah they all have chloroplasts now, and mitochondria are more common while agents and pilli have been reduced (as they are useless when predation is off). So that’s all pretty encouragin :smile_cat:

There’s a smile cat emoticon! How am I only learning this now :smile_cat:

I guess this means maybe the effectiveness of predation needs to be turned down a bit (though I guess this variable can be exposed to the player when they set up the patch). If it’s high there’ll be a lot of predators for a few photosynthesizers and if it’s low there’ll be more phototysnthesizers (and probably a higher overall population) which is interesting in itself.


#40

Ok so it seems like trophic levels don’t arise properly. Does each species have a process that burns most of the ATP it produces? Because that’s what you’d need for trophic levels, and I’d wager that it isn’t happening.