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.MigChildParameters;
21
22
23
24
25
26
27
28
29
30
31
32
33 public class MigChildPopulation extends
34 AbstractPopulation<MigChildParameters, BasicResults> {
35
36 @Override
37 public BasicResults calculatePopulation(MigChildParameters parameters) {
38
39 BasicResults results = new BasicResults(parameters.getNumOfYears(),
40 parameters.getMaxAge());
41
42 calculateSurvivalProbabilities(parameters, results);
43
44
45
46
47 calculateMeanAndEndPopulation(parameters.getOldMeanXf(), parameters
48 .getOldFertX(), parameters.getFemalePropLiveBirth(), results
49 .getMeanXf(), results.getEndXf(), parameters.getSurviveProbO100f(),
50 results.getP1f(), results.getP2f(), parameters.getNumOfYears(),
51 parameters.getMaxAge());
52
53
54 calculateMeanAndEndPopulation(parameters.getOldMeanXf(), parameters
55 .getOldFertX(), parameters.getMalePropLiveBirth(), results.getMeanXm(),
56 results.getEndXm(), parameters.getSurviveProbO100m(), results.getP1m(),
57 results.getP2m(), parameters.getNumOfYears(), parameters.getMaxAge());
58
59 return results;
60 }
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 protected static void calculateMeanAndEndPopulation(Matrix2D oldMeanXf,
87 Matrix2D oldFertX, Matrix2D propLiveBirth, Matrix2D meanPopulation,
88 Matrix2D endPopulation, Matrix2D surviveProbO100, Matrix2D p1,
89 Matrix2D p2, int numberOfYears, int maximumAge) {
90
91 for (int year = 1; year < numberOfYears; year++) {
92
93 double numOfChilds = AbstractPopulation.getNumOfChilds(oldMeanXf,
94 oldFertX, year);
95
96 for (int age = 0; age < maximumAge + 1; age++) {
97
98
99 if (age == maximumAge) {
100 meanPopulation.setQuick(age, year, endPopulation.getQuick(age - 1,
101 year - 1)
102 * p2.getQuick(age - 1, year - 1)
103 + endPopulation.getQuick(age, year - 1)
104 * surviveProbO100.getQuick(year, 0));
105 } else {
106 switch (age) {
107 case 0:
108 meanPopulation.setQuick(age, year, numOfChilds
109 * propLiveBirth.getQuick(year, 0));
110 break;
111 default:
112 meanPopulation.setQuick(age, year, endPopulation.getQuick(age - 1,
113 year - 1)
114 * p2.getQuick(age - 1, year - 1));
115 break;
116 }
117 }
118
119
120 if (age == maximumAge) {
121 endPopulation.setQuick(age, year, meanPopulation.getQuick(age, year)
122 * surviveProbO100.getQuick(year, 0));
123 } else {
124 endPopulation.setQuick(age, year, meanPopulation.getQuick(age, year)
125 * p1.getQuick(age, year));
126 }
127
128 }
129 }
130 }
131 }