- Timestamp:
- 08/01/15 16:32:10 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.inc
r416 r418 4 4 // -------------------------------- step begin -------------------------------- 5 5 6 function reproduce_haploid( repro_list)6 function reproduce_haploid(parent, parent2) 7 7 { 8 var len = repro_list.size; 9 if (len % 2 != 0) len = repro_list.size - 1; 8 var number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd; 10 9 11 for (var i = 0; i < len - 2 ; i = i + 2)10 for (var j = 0; j < number; j++) 12 11 { 13 var parent = Populations[0].get(repro_list[i]); 14 var parent2 = Populations[0].get(repro_list[i + 1]); 15 16 var number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd; 17 18 for (var j = 0; j < number; j++) 19 { 20 createOffspring(ExpParams.gend, ExpParams.ofnumd, [parent.user1, parent2.user1], {"Va" : ExpParams.ofnumd, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": ExpParams.rads[1], "vinit": ExpParams.ofnumd}); //TODO genes from both generations in user1 21 } 12 createOffspring(ExpParams.gend, ExpParams.ofnumd, [parent.user1, parent2.user1], {"Va" : ExpParams.ofnumd, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": ExpParams.rads[1], "vinit": ExpParams.ofnumd}); //TODO genes from both generations in user1 22 13 } 23 killParents(repro_list);24 14 } 25 15 26 function reproduce_diploid( repro_list)16 function reproduce_diploid(parent) 27 17 { 28 for (var i = 0; i < repro_list.size; i++) 18 var number = parent.user2["Va"] / ExpParams.ofnumh; 19 for (var j = 0; j < number / 2; j++) 29 20 { 30 var parent = Populations[0].get(repro_list[i]);31 32 if ( parent.user2["gen"] != 1)21 var crossed = 0; 22 //crossover 23 if (Math.rnd01 < ExpParams.crossprob) 33 24 { 34 Simulator.print("gen: " + parent.user2["gen"]); 25 crossover(parent, "vamin"); 26 crossed = 1; 35 27 } 36 28 37 if (parent.user2["gen"] == 1)29 for (var k = 0; k < 2; k++) 38 30 { 39 var number = parent.user2["Va"] / ExpParams.ofnumh; 40 for (var j = 0; j < number / 2; j++) 41 { 42 var crossed = 0; 43 //crossover 44 if (Math.rnd01 < ExpParams.crossprob) 45 { 46 crossover(parent, "vamin"); 47 crossed = 1; 48 } 31 createOffspring(ExpParams.genh, ExpParams.ofnumh, {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}, {"Va" : ExpParams.ofnumh, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit": ExpParams.ofnumh}); 32 } 49 33 50 for (var k = 0; k < 2; k++) 51 { 52 createOffspring(ExpParams.genh, ExpParams.ofnumh, {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}, {"Va" : ExpParams.ofnumh, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit": ExpParams.ofnumh}); 53 } 54 55 //reverse of crossover for fossilization 56 if (crossed == 1) 57 { 58 crossover(parent, "vamin"); 59 crossed = 0; 60 } 61 } 34 //reverse of crossover for fossilization 35 if (crossed == 1) 36 { 37 crossover(parent, "vamin"); 38 crossed = 0; 62 39 } 40 63 41 } 64 killParents(repro_list);65 42 } 66 43 … … 72 49 } 73 50 74 function killParents(repro_list)75 {76 for (var j = 0; j < repro_list.size; j++)77 {78 Populations[0].kill(repro_list[j]);79 }80 }81 51 82 52 function createOffspring(geno, energy, new_user1, new_user2) … … 164 134 { 165 135 reprocounter = 0; 166 var to_repro_h = []; 167 var to_repro_d = []; 168 for (var i = 0; i < Populations[0].size; i++) 136 var parent1 = null; 137 var parent2 = null; 138 var pop = Populations[0]; 139 for (var i = pop.size-1; i >= 0; i--) 169 140 { 170 var cr = Populations[0].get(i); 171 if (cr.signals.size > 0) 172 { 173 if (cr.user2["gen"] == 0) 141 if (pop[i].signals.size > 0) 142 { 143 if (pop[i].user2["gen"]==1) 174 144 { 175 to_repro_h.add(i); 145 reproduce_diploid(pop[i]); 146 pop.kill(i); 176 147 } 177 if (cr.user2["gen"] == 1)148 else if (parent1 == null) 178 149 { 179 to_repro_d.add(i);150 parent1 = pop[i]; 180 151 } 181 } 182 } 183 if (to_repro_h.size > 1) 184 { 185 reproduce_haploid(to_repro_h); 186 } 187 if (to_repro_d.size > 0) 188 { 189 reproduce_diploid(to_repro_d); 152 else if (parent2 == null) 153 { 154 parent2 = pop[i]; 155 } 156 else 157 { 158 reproduce_haploid(parent1, parent2); 159 pop.kill(parent1); 160 pop.kill(parent2); 161 parent1 = null; 162 parent2 = null; 163 } 164 165 } 190 166 } 191 167 }
Note: See TracChangeset
for help on using the changeset viewer.