View Javadoc
1   package net.bmahe.genetics4j.core;
2   
3   import org.immutables.value.Value;
4   
5   /**
6    * Represents an individual in an evolutionary algorithm, consisting of a genotype and its associated fitness value.
7    * 
8    * <p>This interface encapsulates the fundamental concept of an individual solution in evolutionary computation,
9    * combining genetic representation (genotype) with its evaluated performance (fitness).
10   * 
11   * @param <T> the type of the fitness value, must be comparable for selection and ranking purposes
12   */
13  @Value.Immutable
14  public interface Individual<T extends Comparable<T>> {
15  
16  	/**
17  	 * Returns the genotype of this individual.
18  	 * 
19  	 * @return the genetic representation containing chromosomes that define this individual's traits
20  	 */
21  	@Value.Parameter
22  	Genotype genotype();
23  
24  	/**
25  	 * Returns the fitness value of this individual.
26  	 * 
27  	 * @return the evaluated performance or quality measure of this individual's genotype
28  	 */
29  	@Value.Parameter
30  	T fitness();
31  
32  	/**
33  	 * Creates a new individual with the specified genotype and fitness.
34  	 * 
35  	 * @param <U>      the type of the fitness value
36  	 * @param genotype the genetic representation of the individual
37  	 * @param fitness  the evaluated fitness value of the individual
38  	 * @return a new Individual instance with the given genotype and fitness
39  	 */
40  	static <U extends Comparable<U>> Individual<U> of(final Genotype genotype, final U fitness) {
41  		return ImmutableIndividual.of(genotype, fitness);
42  	}
43  }