1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.simulation.calculation.deterministic;
17
18 import p3j.experiment.results.BasicResults;
19 import p3j.misc.math.Matrix2D;
20 import p3j.simulation.calculation.deterministic.parameters.InFlowDescendantParameters;
21
22
23
24
25
26
27
28
29
30
31
32 public class InFlowDescendantPopulation extends
33 AbstractPopulation<InFlowDescendantParameters, BasicResults> {
34
35 @Override
36 public BasicResults calculatePopulation(String subPopName, int generation,
37 InFlowDescendantParameters parameters) {
38
39 BasicResults results = new BasicResults(subPopName, generation,
40 parameters.getNumOfYears(), parameters.getMaxAge());
41
42 calculateSurvivalProbabilities(parameters, results);
43
44
45
46
47 calculateMeanAndEndPopulation(parameters.getOldMeanXf(),
48 parameters.getOldFertX(), parameters.getFemalePropLiveBirth(),
49 results.getMeanXf(), results.getEndXf(),
50 parameters.getSurviveProbO100f(), results.getP1f(), results.getP2f(),
51 parameters.getNumOfYears(), parameters.getMaxAge());
52
53
54 calculateMeanAndEndPopulation(parameters.getOldMeanXf(),
55 parameters.getOldFertX(), parameters.getMalePropLiveBirth(),
56 results.getMeanXm(), results.getEndXm(),
57 parameters.getSurviveProbO100m(), results.getP1m(), results.getP2m(),
58 parameters.getNumOfYears(), parameters.getMaxAge());
59
60 return results;
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 protected static void calculateMeanAndEndPopulation(Matrix2D oldMeanXf,
88 Matrix2D oldFertX, Matrix2D propLiveBirth, Matrix2D meanPopulation,
89 Matrix2D endPopulation, Matrix2D surviveProbO100, Matrix2D p1,
90 Matrix2D p2, int numberOfYears, int maximumAge) {
91
92 for (int year = 1; year < numberOfYears; year++) {
93
94 double numOfChilds = AbstractPopulation.getNumOfChilds(oldMeanXf,
95 oldFertX, year);
96
97 for (int age = 0; age < maximumAge + 1; age++) {
98
99
100 if (age == maximumAge) {
101 meanPopulation.setQuick(
102 age,
103 year,
104 endPopulation.getQuick(age - 1, year - 1)
105 * p2.getQuick(age - 1, year - 1)
106 + endPopulation.getQuick(age, year - 1)
107 * surviveProbO100.getQuick(year, 0));
108 } else {
109 switch (age) {
110 case 0:
111 meanPopulation.setQuick(age, year,
112 numOfChilds * propLiveBirth.getQuick(year, 0));
113 break;
114 default:
115 meanPopulation.setQuick(
116 age,
117 year,
118 endPopulation.getQuick(age - 1, year - 1)
119 * p2.getQuick(age - 1, year - 1));
120 break;
121 }
122 }
123
124
125 if (age == maximumAge) {
126 endPopulation.setQuick(age, year, meanPopulation.getQuick(age, year)
127 * surviveProbO100.getQuick(year, 0));
128 } else {
129 endPopulation.setQuick(age, year, meanPopulation.getQuick(age, year)
130 * p1.getQuick(age, year));
131 }
132
133 }
134 }
135 }
136 }