Subject: | |
From: | |
Reply To: | |
Date: | Wed, 13 Jul 2005 19:56:30 -0400 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
On Jul 13, 2005, at 7:08 PM, Robert Hovden wrote:
> When using ec.select.BestSelection, how do you declare "n" in the
> parameter
> file? I cannot find it in the API docs.
It's just
<<base>>.n
For example, the default base -- which will probably be sufficient for
you, is just
select.best.n
Thanks for the heads-up, I've updated the classdocs.
> I would also like to know if there is a simple to way to do a rank
> selection,
> where the individuals are organized by fitness and then various
> selection
> methods could be performed based on their rank value.
ECJ doesn't have rank selection among its selection methods (except for
an odd GP beast called "greedy overselection"). This is mostly
because, in my experience, rank selection has largely been supplanted
by tournament selection in the literature.
But there are lots of nifty uses for rank selection. How to implement
it? First, you need to generate the ranks. You'd do this most easily
by maintaining an array of arrays of integers (one subarray per
subpopulation) representing individuals' ranks. Do this in
prepareToProduce(...). Then in produce you need to pick individuals
according the ranks you've generated. The easiest way to do this is to
only override
public int produce(final int subpopulation,
final EvolutionState state,
final int thread)
... leaving the other produce(...) to its default form (which calls
this one). The primary remaining issue is settling on a standard
procedure for selecting from among ranks; I'm not aware of one beyond
rank-proportionate selection (icky). Has anyone constructed such a
class? Let us know.
Sean
|
|
|