- Timestamp:
- 03/13/16 02:45:09 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.inc
r474 r476 53 53 function setGenotype(mode) 54 54 { 55 if (mode ["opt"]== 0) //initial56 { 57 mode ["cr"].user1 = {"min_repro_energies" : [max_chamber_energ[0][getProperty(0, "min_repro_energ")], max_chamber_energ[1][getProperty(1, "min_repro_energ")]], "hibernation" : mode["species"]};58 mode ["cr"].user2 = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0, "hibernated" : 0, "species" : mode["species"], "reproduce" : 0, "dir" : randomDir()};59 } 60 else if (mode ["opt"]== 1) //child61 { 62 mode ["cr"].user2 = {"max_energy_level" : getProperty(1 - mode["parent_user2"]["gen"],"energies0"), "gen" : 1 - mode["parent_user2"]["gen"], "hibernated" : 0, "species" : mode["parent_user2"]["species"], "reproduce" : 0, "dir" : randomDir()};63 mode ["cr"].user1 = mode["parent_user1"];55 if (mode->opt == 0) //initial 56 { 57 mode->cr.data->genes = {"min_repro_energies" : [max_chamber_energ[0][getProperty(0, "min_repro_energ")], max_chamber_energ[1][getProperty(1, "min_repro_energ")]], "hibernation" : mode->species}; 58 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0, "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir()}; 59 } 60 else if (mode->opt == 1) //child 61 { 62 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(1 - mode->parent_lifeparams->gen,"energies0"), "gen" : 1 - mode->parent_lifeparams->gen, "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir()}; 63 mode->cr.data->genes = mode->parent_genes; 64 64 } 65 65 else //grow 66 66 { 67 mode ["cr"].user1 = mode["parent_user1"];68 mode ["cr"].user2 = mode["parent_user2"];67 mode->cr.data->genes = mode->parent_genes; 68 mode->cr.data->lifeparams = mode->parent_lifeparams; 69 69 } 70 70 } … … 72 72 function reproduce_haploid(parent, parent2, clone) 73 73 { 74 var number, energy0, new_ user1, gen;74 var number, energy0, new_genes, gen; 75 75 if (clone == 1) 76 76 { 77 77 energy0 = getProperty(0,"energies0"); 78 78 number = (( 1 - getProperty(1, "e_repro_cost")) * parent.energy) / energy0; 79 new_ user1 = parent.user1;80 parent. user2["gen"] = 1 - parent.user2["gen"]; //because of reversal of "gen" in createOffspring function81 gen = parent. user2["gen"];79 new_genes = parent.data->genes; 80 parent.data->lifeparams->gen = 1 - parent.data->lifeparams->gen; //because of reversal of "gen" in createOffspring function 81 gen = parent.data->lifeparams->gen; 82 82 } 83 83 else 84 84 { 85 85 energy0 = getProperty(1,"energies0"); 86 number = (((1 - getProperty(parent. user2["gen"], "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.user2["gen"], "e_repro_cost"))) * parent2.energy)) / energy0;87 new_ user1 = [parent.user1, parent2.user1];88 gen = 1 - parent. user2["gen"];86 number = (((1 - getProperty(parent.data->lifeparams->gen, "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent2.energy)) / energy0; 87 new_genes = [parent.data->genes, parent2.data->genes]; 88 gen = 1 - parent.data->lifeparams->gen; 89 89 } 90 90 … … 93 93 for (var j = 0; j < number; j++) 94 94 { 95 createOffspring(createForamGenotype(gen, parent. user2["species"], 0), energy0, new_user1, parent.user2);95 createOffspring(createForamGenotype(gen, parent.data->lifeparams->species, 0), energy0, new_genes, parent.data->lifeparams); 96 96 } 97 97 } … … 100 100 { 101 101 var energy0 = getProperty(0,"energies0"); 102 var number = ((1 - (getProperty(parent. user2["gen"], "e_repro_cost"))) * parent.energy) / energy0;102 var number = ((1 - (getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent.energy) / energy0; 103 103 104 104 Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0); … … 116 116 for (var k = 0; k < 2; k++) 117 117 { 118 createOffspring(createForamGenotype(1 - parent. user2["gen"], parent.user2["species"], 0), energy0, parent.user1[0], parent.user2);118 createOffspring(createForamGenotype(1 - parent.data->lifeparams->gen, parent.data->lifeparams->species, 0), energy0, parent.data->genes[0], parent.data->lifeparams); 119 119 } 120 120 … … 136 136 for (var i = pop.size-1; i >= 0; i--) 137 137 { 138 if (pop[i]. user2["reproduce"] == 1 && pop[i].user2["species"]== species)138 if (pop[i].data->lifeparams->reproduce == 1 && pop[i].data->lifeparams->species == species) 139 139 { 140 if ((pop[i]. user2["gen"]==1) || ((pop[i].user2["gen"]==0) && ExpParams.stress == 0))140 if ((pop[i].data->lifeparams->gen==1) || ((pop[i].data->lifeparams->gen==0) && ExpParams.stress == 0)) 141 141 { 142 142 continue; … … 169 169 170 170 171 if (cr. user2["gen"]== 1)171 if (cr.data->lifeparams->gen == 1) 172 172 { 173 173 reproduce_diploid(cr); … … 183 183 if (cr.signals.size == 0) 184 184 { 185 cr.signals.add("repro"+cr. user2["species"]);185 cr.signals.add("repro"+cr.data->lifeparams->species); 186 186 cr.signals[0].power = 1; 187 187 } 188 188 reproduced = 0; 189 cr. user2["reproduce"]= 1;189 cr.data->lifeparams->reproduce = 1; 190 190 } 191 191 … … 201 201 function print_repro_info(cr) 202 202 { 203 Simulator.print("Reproduced " + cr. user2["gen"] + " of species " + cr.user2["species"]+ " energy: " + cr.energy);203 Simulator.print("Reproduced " + cr.data->lifeparams->gen + " of species " + cr.data->lifeparams->species + " energy: " + cr.energy); 204 204 } 205 205 … … 211 211 var reproduced = 0; 212 212 213 if (cr. user2["gen"]== 0)214 { 215 properEnergy = ( cr.energy >= cr. user1["min_repro_energies"][cr.user2["gen"]] );213 if (cr.data->lifeparams->gen == 0) 214 { 215 properEnergy = ( cr.energy >= cr.data->genes->min_repro_energies[cr.data->lifeparams->gen] ); 216 216 } 217 217 else 218 218 { 219 properEnergy = ( cr.energy >= cr. user1[0]["min_repro_energies"][cr.user2["gen"]] ); //TODO gene selection219 properEnergy = ( cr.energy >= cr.data->genes[0]->min_repro_energies[cr.data->lifeparams->gen] ); //TODO gene selection 220 220 } 221 221 … … 228 228 reproduced = readyToRepro(cr); 229 229 } 230 else if (cr.signals.receive("repro"+cr. user2["species"]) > 0)230 else if (cr.signals.receive("repro"+cr.data->lifeparams->species) > 0) 231 231 { 232 232 reproduced = readyToRepro(cr); … … 239 239 { 240 240 cr.signals.clear(); 241 cr. user2["reproduce"]= 0;241 cr.data->lifeparams->reproduce = 0; 242 242 } 243 243 … … 247 247 function crossover(parent, gene) 248 248 { 249 var tmp = parent. user1[0][gene];250 parent. user1[0][gene] = parent.user1[1][gene];251 parent. user1[1][gene] = tmp;252 } 253 254 function createOffspring(geno, energy, parent_ user1, parent_user2)249 var tmp = parent.data->genes[0][gene]; 250 parent.data->genes[0][gene] = parent.data->genes[1][gene]; 251 parent.data->genes[1][gene] = tmp; 252 } 253 254 function createOffspring(geno, energy, parent_genes, parent_lifeparams) 255 255 { 256 256 var cr = Populations[0].add(geno); 257 257 cr.energy0 = energy; 258 258 cr.energy = cr.energy0; 259 setGenotype({"cr" : cr, "parent_ user1" : parent_user1, "parent_user2" : parent_user2, "opt" : 1});259 setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1}); 260 260 placeRandomlyNotColliding(cr); 261 261 }
Note: See TracChangeset
for help on using the changeset viewer.