ec
Class Problem

java.lang.Object
  extended by ec.Problem
All Implemented Interfaces:
Prototype, Setup, java.io.Serializable, java.lang.Cloneable
Direct Known Subclasses:
CoevolutionaryRosenbrock, CompetitiveMaxOne, ECSuite, GPProblem, MasterProblem, Sum

public abstract class Problem
extends java.lang.Object
implements Prototype

Problem is a prototype which defines the problem against which we will evaluate individuals in a population.

Since Problems are Prototypes, you should expect a new Problem class to be cloned and used, on a per-thread basis, for the evolution of each chunk of individuals in a new population. If you for some reason need global Problem information, you will have to provide it statically, or copy pointers over during the clone() process (there is likely only one Problem prototype, depending on the Evaluator class used).

Note that Problem does not implement a specific evaluation method. Your particular Problem subclass will need to implement a some kind of Problem Form (for example, SimpleProblemForm) appropriate to the kind of evaluation being performed on the Problem. These Problem Forms will provide the evaluation methods necessary.

Problem forms will define some kind of evaluation method. This method may be called in one of two ways by the Evaluator.

Problems should be prepared for both of the above situations. The easiest way to handle it is to simply evaluate each individual as his evaluate(...) method is called, and do nothing during prepareToEvaluate or finishEvaluating. That should be true for the vast majority of Problem types.

Version:
2.0
Author:
Sean Luke
See Also:
Serialized Form

Field Summary
static java.lang.String P_PROBLEM
           
 
Constructor Summary
Problem()
           
 
Method Summary
 boolean canEvaluate()
          Asynchronous Steady-State EC only: Returns true if the problem is ready to evaluate.
 java.lang.Object clone()
          Creates a new individual cloned from a prototype, and suitable to begin use in its own evolutionary context.
 void closeContacts(EvolutionState state, int result)
          Called to shut down remote evaluation network contacts when the run is completed.
 Parameter defaultBase()
          Here's a nice default base for you -- you can change it if you like
 void describe(Individual ind, EvolutionState state, int threadnum, int log, int verbosity)
          Deprecated. 
 void describe(Individual ind, EvolutionState state, int subpopulation, int threadnum, int log, int verbosity)
           
 void evaluate(EvolutionState state, Individual ind, int threadnum)
          Deprecated. 
 void evaluate(EvolutionState state, Individual ind, int subpopulation, int threadnum)
           
 void finishEvaluating(EvolutionState state, int threadnum)
          Will be called by the Evaluator after prepareToEvaluate(...) is called and then a series of individuals are evaluated.
protected  Parameter getBase()
           
 void initializeContacts(EvolutionState state)
          Called to set up remote evaluation network contacts when the run is started.
 void prepareToEvaluate(EvolutionState state, int threadnum)
          May be called by the Evaluator prior to a series of individuals to evaluate, and then ended with a finishEvaluating(...).
 void reinitializeContacts(EvolutionState state)
          Called to reinitialize remote evaluation network contacts when the run is restarted from checkpoint.
protected  void setBase(Parameter base)
           
 void setup(EvolutionState state, Parameter base)
          Sets up the object by reading it from the parameters stored in state, built off of the parameter base base.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

P_PROBLEM

public static final java.lang.String P_PROBLEM
See Also:
Constant Field Values
Constructor Detail

Problem

public Problem()
Method Detail

getBase

protected Parameter getBase()

setBase

protected void setBase(Parameter base)

defaultBase

public Parameter defaultBase()
Here's a nice default base for you -- you can change it if you like

Specified by:
defaultBase in interface Prototype

setup

public void setup(EvolutionState state,
                  Parameter base)
Description copied from interface: Prototype
Sets up the object by reading it from the parameters stored in state, built off of the parameter base base. If an ancestor implements this method, be sure to call super.setup(state,base); before you do anything else.

For prototypes, setup(...) is typically called once for the prototype instance; cloned instances do not receive the setup(...) call. setup(...) may be called more than once; the only guarantee is that it will get called at least once on an instance or some "parent" object from which it was ultimately cloned.

Specified by:
setup in interface Prototype
Specified by:
setup in interface Setup

clone

public java.lang.Object clone()
Description copied from interface: Prototype
Creates a new individual cloned from a prototype, and suitable to begin use in its own evolutionary context.

Typically this should be a full "deep" clone. However, you may share certain elements with other objects rather than clone hem, depending on the situation:

Implementations.

Specified by:
clone in interface Prototype
Overrides:
clone in class java.lang.Object

evaluate

@Deprecated
public void evaluate(EvolutionState state,
                                Individual ind,
                                int threadnum)
Deprecated. 


evaluate

public void evaluate(EvolutionState state,
                     Individual ind,
                     int subpopulation,
                     int threadnum)

describe

@Deprecated
public void describe(Individual ind,
                                EvolutionState state,
                                int threadnum,
                                int log,
                                int verbosity)
Deprecated. 


describe

public void describe(Individual ind,
                     EvolutionState state,
                     int subpopulation,
                     int threadnum,
                     int log,
                     int verbosity)

prepareToEvaluate

public void prepareToEvaluate(EvolutionState state,
                              int threadnum)
May be called by the Evaluator prior to a series of individuals to evaluate, and then ended with a finishEvaluating(...). If this is the case then the Problem is free to delay modifying the individuals or their fitnesses until at finishEvaluating(...). If no prepareToEvaluate(...) is called prior to evaluation, the Problem must complete its modification of the individuals and their fitnesses as they are evaluated as stipulated in the relevant evaluate(...) documentation for SimpleProblemForm or GroupedProblemForm. The default method does nothing. Note that prepareToEvaluate() can be called *multiple times* prior to finishEvaluating() being called -- in this case, the subsequent calls may be ignored.


finishEvaluating

public void finishEvaluating(EvolutionState state,
                             int threadnum)
Will be called by the Evaluator after prepareToEvaluate(...) is called and then a series of individuals are evaluated. However individuals may be evaluated without prepareToEvaluate or finishEvaluating being called at all. See the documentation for prepareToEvaluate for more information. The default method does nothing.


initializeContacts

public void initializeContacts(EvolutionState state)
Called to set up remote evaluation network contacts when the run is started. By default does nothing.


reinitializeContacts

public void reinitializeContacts(EvolutionState state)
Called to reinitialize remote evaluation network contacts when the run is restarted from checkpoint. By default does nothing.


closeContacts

public void closeContacts(EvolutionState state,
                          int result)
Called to shut down remote evaluation network contacts when the run is completed. By default does nothing.


canEvaluate

public boolean canEvaluate()
Asynchronous Steady-State EC only: Returns true if the problem is ready to evaluate. In most cases, the default is true.