The battle over cumulative selection and Dawkins’ Weasel program has raged on for some months [years?] here at TSZ and across numerous threads. So can it possibly be that we now, finally, have a definitive statement about cumulative selection?
Mung: And whether or not my program demonstrates the power of cumulative selection has not been settled…
To which keiths responded:
keiths: Anyone who understands cumulative selection can see that it doesn’t, because your fitness functions don’t reward proximity to the target — only an exact match. The fitness landscapes are flat except for a spike at the site of the target.
So there you have it. You need a target and a fitness function that rewards proximity to the target.
Imagine my surprise when I discovered that I had said the exact same thing nine months ago.
Mung: Here’s what he Weasel program teaches us:
1.) In order to demonstrate the power of cumulative selection one must first define a target.
2.) In order to demonstrate the power of cumulative selection one must define a fitness function that increases the likelihood of the search algorithm to find the target relative to the likelihood of a blind search finding the target.
Now perhaps I have misunderstood keiths here. Perhaps he did not really say, or really mean, what I think he said, or what it appears like he said. So I’d like to hear his response.
Is it possible that keiths has agreed with me all along while expending every effort possible to make it seem otherwise?
Just so there’s no mistake, here he is again saying the same thing:
keiths: Mung,
Besides failing in your attempt to code a Weasel and contradicting yourself regarding your intent, you also failed to demonstrate the power of cumulative selection in your program.
1) Your program doesn’t evolve a phrase; it evolves individual letters, one after the other, latching each one when it matches.
2) There is a separate fitness function for each letter.
3) The fitness functions don’t reward proximity to the target — they only reward an exact match for a single character.
The only thing your program demonstrates the “power” of is latching, not cumulative selection.
It’s a remarkable display of incompetence.
Perhaps. But it served its’ purpose. keiths admits I was right all along. So incompetence? Perhaps not.
You need a target. You need a fitness function that rewards proximity to the target. Is that your story keiths, and are you sticking to it? Weasel out of this!
I predict keiths will try to make this about my program and what it does or does not demonstrate rather than his revelation about cumulative selection.
phoodoo:
How should I know?
petrushka:
Where “pit bull” = “someone who doesn’t back off just because petrushka’s ego is threatened and his hackles are raised”.
Alan Fox,
I can see how the niche can fix a feature in a population but how is the feature created in the first place?
You’ve been at this a while. Give us your best understanding of how evolution would produce a new feature. Refer to Wagner, if you think it will help.
Dimitri Belyaev 😊
That’s the job of variation: mutations, recombination, crossing over, etc.
Colewd is an expert on these things. He knows more about them than Larry Moran.
I’m surprised he asked the question. I’d like to know what he has in mind.
Yes. I’d say if you can’t make the opposing case then you don’t really understand it.
petrushka,
Doesn’t really help.
Alan Fox,
So these need to work through trial and error of sequences until a feature that can be selected for is created? In some cased the creation of many new DNA sequences that code for proteins and regulatory sequences that build the feature?
Doesn’t the stop-motion video of the giant agar plate in this thread help, either?
New variation arrives in the gene pool at a steady rate. If the variation is beneficial, neutral or hardly deleterious (in the current niche) it may stick around. If something changes in the niche, there are rare alleles already in the gene pool which selection can work with.
The fox breeding experiment I linked to above produced tame foxes rapidly (in 40 generations), then levelled off. It’s likely that the necessary variation was already in the population when the experiment began.
petrushka,
Perhaps colewd is a bit like me; stuff slides out of memory.
Alan Fox,
It helps for bacterial adaption using existing enzymes.
Does it work for new features of multicellular animals that require unique proteins and regulatory RNA’s?
Can you explain what you mean by required?
It sounds like you are implying that new features occurred intentionally.
If you are seeking to disbelieve, there are many paths to lack of belief.
Believe what?
Not sure I understand what you mean by “unique” in this context. Any particular amino-acid sequence is unique. Change one amino-acid and you have a new unique protein. What’s the problem?
All the biochemical heavy lifting has been done when you get to metazoa. The cool thing is, as you say, regulatory genes. Again, what’s the problem?
But wouldn’t we see families of proteins if that happened?
Oh, we do.
Somehow such evidence doesn’t matter to your typical IDist, though.
Glen Davidson
Not to mention duplications!
Maybe I should point out that Wesley Elsberry has had a look at mung’s code here:
[01] TARGET_PHRASE = "METHINKS IT IS LIKE A WEASEL"
[02] TARGET = TARGET_PHRASE.chars
[03] TARGET_LENGTH = TARGET.length
[04] CHAR_SET = TARGET.uniq
[05]
[06] def make_baby
[07] Array.new(TARGET_LENGTH).map {CHAR_SET.sample}
[08] end
[09]
[10] def mutate weasel, trait
[11] weasel[trait] = CHAR_SET.sample
[12] end
[13]
[14] baby_weasel = make_baby
[15]
[16] mutations = 0
[17] TARGET_LENGTH.times do |i|
[18] while baby_weasel[i] != TARGET[i]
[19] mutate(baby_weasel, i)
[20] mutations += 1
[21] puts baby_weasel.join
[22] end
[23] end
[24] puts "And it only required #{mutations} mutations!"
[Dr Elsberry has added numbering to facilitate commenting]
He comments:
A commenter, KevinB writes:
KevinB:
And so we have a name for Mung’s misbegotten program:
The Skunk.
LoL. I’m [in]famous!
So I reduced the character set from which mutations were drawn. So what? How does that make something not a case of cumulative selection? It’s like saying there was never any cumulative selection in biology until we had exactly 64 codons.
Well, I was going to call it something else, but my next bit of Weasel coding will be renamed to SkunkWeasel.
I’m not going to get involved in Weasel wars. Dawkins wrote his program nearly forty years ago. His biomorphs are a much clearer illustration of how evolution works, with the operator acting as selective breeder.
Hey keiths, is mutation required for cumulative selection? How much mutation must there be before a program is no longer a Weasel program?
People knew about selective breeding long before Dawkins. How does his biomorph program demonstrate the power of cumulative selection?
I literally laughed out loud at that one.
On a bit more serious note, I’m not a coder at all, I can barely do basic HTML so I’m not one to complain about the quality or programming. For all I know, Mung’s code could be really fine, provided it was trying to do something entirely unrelated to selection or evolution.
But I do understand at least a bit about how evolution works. I could not sit down and program something that did not properly implement a mutation rate and something like an environmentally determined selection process. I could not be satisfied with my work until I had done at least that. But maybe that’s difficult to code, I imagine coding an environment requires a physics engine of some sort (ala BoxCar 2D), so a simplified approximation of an environment, as in an analogy to it could suffice.
How would that look? Well, maybe instead of a simulation of an actual 2 or 3-dimensional world with physical laws, an abstraction could be made. That abstraction could be a random string of symbols, itself slowly and randomly changing. And the organism could be another string, which is of course mutating. So there’s selection for the organism-string, to match the environment-string.
The bigger the difference between organism and environment, the less offspring-strings that organism-string makes.
Now, here is where something that interests me with regards to simulations of evolution comes in. I don’t know of any simulation that properly implements an abstraction of the ability of organisms to replicate themselves.
As far as I know, all simulated organisms are simply copied to the next generation, then mutated a bit (or some kind of analogy to sex with recombination is included). And this ability to copy it not part of the simulation, it’s just something that’s hardcoded into the program.
For example, in the BoxCar 2D program, even a car without the ability to move at all, that just happens to tip over a few pixels on start, still gets copied to the next generation if it happens to have higher fitness than other cars.
What I’d want to see is the capacity for replication itself to be subject to evolutionary constraint. Perhaps even modification. The organism has to meet certain criteria, which could still be abstractly defined, to even be able to replicate in the first place. But that abstraction should derive from the simulated phenotype. It might not be primarily environmentally constrained, in the sense that replication capacity should not be contingent on high fitness (degree of match to the environment-string), it could be something mostly different, with only weak relation to environmentally determined fitness.
I wonder if it is possible to actually have part of the code that copies the organism-string, be part of that string. Such that if certain mutations happen in that string, they might end up actually breaking the part of the code that is responsible for the copying process. Maybe the copying-responsible code could even contain the mutation rate, and the mutation rate could itself, therefore, potentially mutate, because it is part of the organism-string.
It iteratively brings about in increasing degree, that which is being selected for.
Nobody is saying that that is what is making your program not reproduce an instance of cumulative selection. Rather, that one was pointed out simply because it is silly.
Rumraket,
Sure, and it’s been done. See Digital Organism.
Very interesting. The article ends up mentioning Avida in brief, how is replication handled in Avida?
Rumraket,
Each organism runs on its own virtual machine, with a memory space that is protected from being written to by other organisms. To replicate itself, an organism allocates more memory, makes a copy of itself in that memory, and then declares the copy to be an offspring, whereupon Avida takes the offspring, assigns it to a new virtual machine, and begins executing it.
Mutations happen during the replication process.
Alan Fox,
Geez Alan, it might be a little useful if you read some prior posts. THIS experiment was what I was referring to when I said, the problem would exist as soon as the breeder began selecting for MULTIPLE traits, some which would clearly be contradictory, see? Now you are referring me right back to this, to show me how if you only select for ONE trait you can get specific results??
This example is the EXACT opposite of what is claimed by evolution, you still don’t get that. In evolution, aggressive foxes and tame foxes both can reproduce for different reasons. Tall ones and short ones can. Smart ones and dumb ones. A tall dumb one might be better than a small smart one-sometimes! You throw everything into the mix of what can “survive” and what you get is a scrambled mix of all. Precisely NOT specialization.
And you response is to link back to this. Holy cow.
Remember the niche Alan! The niche means ANY thing that survives works. Doesn’t matter how or why.
FWIW, we had issues with a skunk weasel living under our porch a couple of years ago. The thing had apparently latched onto the foundation. We couldn’t get rid of the damn thing, but eventually it went away on its own.
Maybe its target home moved or something.
Here’s Dawkins’ explanation from The Blind Watchmaker:
Don’t drink the KeithsKoolaid. It’s not about Weasel, it’s about cumulative selection.
Now if you think Weasel-style search algorithms are the only way to demonstrate the power of cumulative selection I will indeed grant you a deferment from the draft into the wars.
Thomas Ray’s Tierra comes close to what Rumraket is asking for. The genomes code for replication. Each run does start with at least one virtual organism that can replicate, after which a variety of replication styles evolve including parasitism and hyper-parasitism.
Yes, keiths couldn’t even get single-step selection right. My program is not an example of single-step selection as Dawkins uses the term. But keiths is never ever wrong.
Is that passage a good description? I mean, is cumulative selection just iterative single-step selection (i.e., selection not “sorted once and for all”) as is suggested here?
Patrick, all that Dawkins says in that quote is what the essential difference is between single-step selection and cumulative selection. He does not say [there anyways] that his biomorph program demonstrates the power of cumulative selection, and tht was the question I had asked. I guess he just wants us to assume it.
Do we agree that a GA could implement this process of selection/sorting without demonstrating the power of cumulative selection?
So this process may be necessary but not sufficient.
I don’t think it does.
So I could imagine any shape I desire and I could use his biomorph program to iteratively select for that shape and eventually the shape I was selecting for would appear on the screen?
LoL. now this is funny!
Wrong again boy wonder.
That’s impressive, didn’t know this. I’ve some additional respect for Avida now. I’m hard pressed to see how it could be made any more biologically realistic without massively influencing processor resources. No wonder IDcreationists try to avoid it at all costs.
Good question.
Here’s another. Can single-step selection be implemented in a GA?
IOW, if all the elements of a GA are present but the fitness function only rewards an exact match on the target.
I don’t see why not. Maybe that will be my next version of a Weasel program. 🙂
Well it’s pretty trivial to see for yourself. For example, if you wish to see really big claws, just keep selecting those with bigger claws.
Okay I see what you’re getting at. No, of course there are going to be some basic constraints that prevents the program from just brining about anything and everything. At a basic level the program just makes lines in 2 dimensions. Obviously you’re not going to be able to select a sphere to appear somehow. That doesn’t mean the program doesn’t demonstrate how cumulative selection works, it just means not everything imaginable is selectable.
C’mon Mung you can figure this stuff out yourself. Why the silly contrarianism?
I’ve written a real Weasel program as a real GA. It’s true. But it does not seem to be finding the target.
I think it will be difficult for me to convince some promising young biology student that it demonstrates the power of cumulative selection. How many generations should I let it run before I give up on it? One run is in 8 figures now and a second is in 7 figures.
What is the official keiths limit at which we can reject the hypothesis of cumulative selection for these runs? Or is cumulative selection always present, even if not visible?