View Javadoc
1   package net.bmahe.genetics4j.samples.clustering;
2   
3   import net.bmahe.genetics4j.core.postevaluationprocess.FitnessSharing;
4   
5   public class FitnessSharingUtils {
6   
7   	// tag::fitness_sharing[]
8   	public static final FitnessSharing clusterDistance = FitnessSharing.ofStandard((i0, i1) -> {
9   		final var cluster0 = PhenotypeUtils.toPhenotype(i0);
10  		final var cluster1 = PhenotypeUtils.toPhenotype(i1);
11  
12  		double distanceAcc = 0.0D;
13  		for (int i = 0; i < cluster0.length; i++) {
14  			double distance = 0.0D;
15  			distance += (cluster1[i][0] - cluster0[i][0]) * (cluster1[i][0] - cluster0[i][0]);
16  			distance += (cluster1[i][1] - cluster0[i][1]) * (cluster1[i][1] - cluster0[i][1]);
17  
18  			distanceAcc += Math.sqrt(distance);
19  		}
20  
21  		return distanceAcc;
22  	}, 5.0);
23  	// end::fitness_sharing[]
24  
25  	public static final FitnessSharing hausDorffFitnessSharing = FitnessSharing.ofStandard((i0, i1) -> {
26  		final var p0 = PhenotypeUtils.toPhenotype(i0);
27  		final var p1 = PhenotypeUtils.toPhenotype(i1);
28  
29  		double min0 = Double.MAX_VALUE;
30  		for (int i = 0; i < p0.length; i++) {
31  			for (int j = 0; j < p1.length; j++) {
32  				final double distance = Math
33  						.sqrt((p0[i][0] - p1[j][0]) * (p0[i][0] - p1[j][0]) - (p0[i][1] - p1[j][1]) * (p0[i][1] - p1[j][1]));
34  				if (distance < min0) {
35  					min0 = distance;
36  				}
37  			}
38  		}
39  
40  		double min1 = Double.MAX_VALUE;
41  		for (int i = 0; i < p1.length; i++) {
42  			for (int j = 0; j < p0.length; j++) {
43  				final double distance = Math
44  						.sqrt((p0[i][0] - p1[j][0]) * (p0[i][0] - p1[j][0]) - (p0[i][1] - p1[j][1]) * (p0[i][1] - p1[j][1]));
45  				if (distance < min1) {
46  					min1 = distance;
47  				}
48  			}
49  		}
50  
51  		return Math.max(min0, min1);
52  
53  	}, 5.0);
54  
55  }