1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.experiment.results;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import p3j.misc.math.Matrix2D;
22
23
24
25
26
27
28
29
30 public class MergeSubPopOldAgeDependencyRatioSelector extends
31 MergeSubPopSumOverAgesSelector {
32
33
34 static final int LOWER_BORDER = 15;
35
36
37 static final int UPPER_BORDER = 65;
38
39
40
41
42
43
44
45
46
47
48
49
50 public MergeSubPopOldAgeDependencyRatioSelector(
51 AbstractAggregationSelector[] selectorsForAddition,
52 AbstractAggregationSelector[] selectorsForSubtraction,
53 String customFileName) {
54 super(selectorsForAddition, selectorsForSubtraction, customFileName);
55 }
56
57
58
59
60
61
62
63
64
65
66
67
68 public MergeSubPopOldAgeDependencyRatioSelector(
69 List<AbstractAggregationSelector> selectorsForAddition,
70 List<AbstractAggregationSelector> selectorsForSubtraction,
71 String customFileName) {
72 super(selectorsForAddition, selectorsForSubtraction, customFileName);
73 }
74
75 @Override
76 public void consider(int trialCount, ResultsOfTrial result) {
77
78 List<double[]> additionArraysYoungPop = new ArrayList<double[]>();
79 List<double[]> additionArraysOldPop = new ArrayList<double[]>();
80 List<double[]> subtractionArraysYoungPop = new ArrayList<double[]>();
81 List<double[]> subtractionArraysOldPop = new ArrayList<double[]>();
82
83 for (AbstractAggregationSelector selector : getAddAggregationSelectors()) {
84 additionArraysYoungPop.add(Matrix2D.sumRows(selector.select(result),
85 LOWER_BORDER, UPPER_BORDER).toArray()[0]);
86 additionArraysOldPop.add(Matrix2D.sumRows(selector.select(result),
87 UPPER_BORDER, null).toArray()[0]);
88 }
89
90 for (AbstractAggregationSelector selector : getSubtractAggregationSelectors()) {
91 subtractionArraysYoungPop.add(Matrix2D.sumRows(selector.select(result),
92 LOWER_BORDER, UPPER_BORDER).toArray()[0]);
93 subtractionArraysYoungPop.add(Matrix2D.sumRows(selector.select(result),
94 UPPER_BORDER, null).toArray()[0]);
95 }
96
97 double[] rowSumYoungPop = sumPerElement(additionArraysYoungPop,
98 subtractionArraysYoungPop);
99 double[] rowSumOldPop = sumPerElement(additionArraysOldPop,
100 subtractionArraysOldPop);
101
102 double[] rowQuotients = new double[rowSumYoungPop.length];
103 for (int i = 0; i < rowQuotients.length; i++) {
104 rowQuotients[i] = rowSumOldPop[i] / rowSumYoungPop[i];
105 }
106
107 System.arraycopy(rowQuotients, 0, aggregation[trialCount], 0,
108 rowQuotients.length);
109 }
110
111 }