1 package net.bmahe.genetics4j.core.spec.selection;
2
3 /**
4 * Marker interface for selection policy specifications in evolutionary algorithms.
5 *
6 * <p>SelectionPolicy defines the contract for specifying selection strategies and their parameters. Selection policies
7 * determine how individuals are chosen from the population for reproduction, directly influencing the evolutionary
8 * pressure and convergence characteristics of the algorithm.
9 *
10 * <p>Selection policies are used by:
11 * <ul>
12 * <li><strong>EA Configuration</strong>: To specify the parent selection strategy</li>
13 * <li><strong>Selection handlers</strong>: To create appropriate selector implementations</li>
14 * <li><strong>Strategy resolution</strong>: To match policies with their corresponding handlers</li>
15 * <li><strong>Parameter configuration</strong>: To define selection pressure and tournament sizes</li>
16 * </ul>
17 *
18 * <p>The framework provides several concrete selection policy implementations:
19 * <ul>
20 * <li>{@link Tournament}: Tournament selection with configurable tournament size</li>
21 * <li>{@link RouletteWheel}: Fitness-proportionate selection (roulette wheel)</li>
22 * <li>{@link RandomSelection}: Uniform random selection without fitness bias</li>
23 * <li>{@link ProportionalTournament}: Tournament with proportional selection pressure</li>
24 * <li>{@link MultiSelections}: Combination of multiple selection strategies</li>
25 * <li>{@link SelectAll}: Selects all individuals (useful for specific algorithms)</li>
26 * </ul>
27 *
28 * <p>Selection strategies vary in their characteristics:
29 * <ul>
30 * <li><strong>Selection pressure</strong>: How strongly the algorithm favors high-fitness individuals</li>
31 * <li><strong>Diversity preservation</strong>: How well the strategy maintains population diversity</li>
32 * <li><strong>Computational complexity</strong>: Efficiency of the selection process</li>
33 * <li><strong>Scalability</strong>: Performance with different population sizes</li>
34 * </ul>
35 *
36 * <p>Common selection patterns:
37 * <ul>
38 * <li><strong>Exploitative strategies</strong>: High selection pressure (large tournaments, elitism)</li>
39 * <li><strong>Explorative strategies</strong>: Low selection pressure (small tournaments, random)</li>
40 * <li><strong>Balanced strategies</strong>: Moderate pressure with diversity preservation</li>
41 * <li><strong>Adaptive strategies</strong>: Selection pressure that changes during evolution</li>
42 * </ul>
43 *
44 * <p>Selection policy design considerations:
45 * <ul>
46 * <li><strong>Problem characteristics</strong>: Multimodal vs unimodal, deceptive problems</li>
47 * <li><strong>Population size</strong>: Small populations may need lower selection pressure</li>
48 * <li><strong>Fitness landscape</strong>: Rugged landscapes benefit from diversity preservation</li>
49 * <li><strong>Convergence requirements</strong>: Balance between speed and solution quality</li>
50 * </ul>
51 *
52 * <p>Example usage in genetic algorithm configuration:
53 *
54 * <pre>{@code
55 * // Tournament selection with moderate pressure
56 * SelectionPolicy tournament = Tournament.of(3);
57 *
58 * // Roulette wheel for fitness-proportionate selection
59 * SelectionPolicy roulette = RouletteWheel.build();
60 *
61 * // Combined selection strategies
62 * SelectionPolicy multiSelection = MultiSelections.of(Tuple.of(0.7, tournament), Tuple.of(0.3, roulette));
63 *
64 * // Use in EA configuration
65 * EAConfiguration<Double> config = EAConfigurationBuilder.<Double>builder()
66 * .chromosomeSpecs(chromosomeSpec)
67 * .parentSelectionPolicy(tournament)
68 * .build();
69 * }</pre>
70 *
71 * @see net.bmahe.genetics4j.core.selection.Selector
72 * @see net.bmahe.genetics4j.core.selection.SelectionPolicyHandler
73 * @see Tournament
74 * @see RouletteWheel
75 * @see RandomSelection
76 * @see ProportionalTournament
77 * @see MultiSelections
78 */
79 public interface SelectionPolicy {
80
81 }