On Jul 15, 2013, at 12:33 PM, David vun Kannon wrote:
> I have to say that I am surprised that crossover-prob has always only referred to uniform crossover per site probability. The parameter is in Tutorial1 for a reason, I would suppose, and that tutorial problem only uses one point crossover.
Yeah, it's actually just a mistake in Tutorial1. The thing is that until the latest version of ECJ, you *had* to specify crossover-prob even though it wasn't used. When revising Tutorial1 a while back, I forgot the reason why. You'll find that in Tutorial2 it says something different.
I've revised the demos and tutorial documentation to be more accurate and to remove all the warnings. Stupid me.
> I understand your point that if mutation-prob refers to per site probability, crossover-prob is consistent if it also refers to per site probability. I suppose that just goes against my expectation that even the simplest tutorial would show how to dial the crossover usage up and down. Anyone coming to ECJ after looking at other GA apps or reading the literature would expect that control to be easy and prominently displayed - I certainly did. Even your response below is in agreement with this.
I agree it's a stupidity. But historical stupidities are, well, they are what they are.
> I'm not at all surprised if I've made mistakes, but my purpose is simple. It is to run Tutorial1 without the warning and with the understanding of which parameters to vary in order to acheive an effect such as "invoke the crossover function on 50% of the new individuals, and the mutate function on 25% of the sites."
Right. For that, use the likelihood parameter. It's not attached to species but rather to the breeding pipeline so you can have different likelihoods for your mutation and crossover breeders.
> I'm unclear how the likelihood parameter cannot be crossover specific, given the text of the warning message. If I build a breeding pipeline that has crossover, mutation and inversion operators, what does likelihood control and what doesn't it control?
I would do it like this:
pop.subpop.0.species.pipe = ec.vector.breed.VectorMutationPipeline
pop.subpop.0.species.pipe.likelihood = 0.25
pop.subpop.0.species.pipe.source.0 = ec.vector.breed.VectorCrossoverPipeline
pop.subpop.0.species.pipe.source.0.likelihood = 0.5
pop.subpop.0.species.pipe.source.0.source.0 = ec.select.TournamentSelection
pop.subpop.0.species.pipe.source.0.source.1 = ec.select.TournamentSelection
You could use vector.mutate.likelihood and vector.xover.likelihood as well.
> On the subject of naming, if the parameter controls the probability of a function being invoked in a pipeline, I'd prefer something longer, such as breed-function-invocation-prob to likelihood. To me it is a question of coming back to a file after some time and trying to understand what it is meant to do, or like reading someone else's code. Terseness isn't a virtue, pace Strunk and White.
Well, ECJ is far from terse. That's one of the complaints people have about it. :-)
I need a general term that would be attached to *any* breeding pipeline as a parameter, not an operator-specific term (liek "breed-function-..."). Lemme know what you think.