- Timestamp:
- 03/27/16 00:12:20 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.expdef
r486 r487 33 33 global changePeriod; 34 34 global phase; 35 global species_genes; 35 36 36 37 @include "foraminifera.inc" … … 52 53 pop.death = 1; 53 54 pop.energy = 1; 54 pop.selfmask = 0 x10001;55 pop.othermask = 0 x20001;55 pop.selfmask = 0; 56 pop.othermask = 0; 56 57 //pop.selfmask = 0x20002; pop.othermask = 0x10002; 57 58 pop.perfperiod = 25; 59 pop.bodysim = 0; 58 60 59 61 pop = Populations.addGroup("Nutrients"); … … 62 64 pop.death = 1; 63 65 pop.energy = 1; 64 pop.selfmask = 0 x20002;65 pop.othermask = 0 x10000;66 pop.selfmask = 0; 67 pop.othermask = 0; 66 68 //pop.othermask = 0x10002; 69 pop.bodysim = 0; 67 70 68 71 pop = Populations.addGroup("ReticulopodiaNutrients"); … … 71 74 pop.death = 0; 72 75 pop.energy = 0; 73 pop.selfmask = 0x20002; 74 pop.othermask = 0x10000; 76 pop.selfmask = 0; 77 pop.othermask = 0; 78 pop.bodysim = 0; 75 79 76 80 //world … … 90 94 //ExpProperties.visualize = 1; //uncomment to visualize reticulopodia and indicate nutrients positions 91 95 92 //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files 96 //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files 93 97 94 98 //reproduction … … 100 104 ExpProperties.divisionCost = 15.6; 101 105 reprocounter = 0; 106 107 species_genes = []; 102 108 103 109 init_chambers(); … … 143 149 changePeriod = 0; 144 150 phase = "high"; 145 ExpProperties.foodperiod = 21600;151 ExpProperties.foodperiod = 3600; 146 152 ExpProperties.foodPeriodChange = 0; 147 153 ExpProperties.nutrientradius = micronsToFrams(10); … … 195 201 } 196 202 203 function getGene(cr, gen_id, gen_set) 204 { 205 if (cr.data->lifeparams->gen == 0) 206 return cr.data->genes[gen_id]; 207 else 208 return cr.data->genes[gen_set][gen_id]; 209 } 210 197 211 function addForam(species, iter, chambernum, ploid) 198 212 { 199 var geno = createForam Genotype(ploid, species, chambernum);213 var geno = createForamMorphology(species_genes[species]->morphotype, ploid, chambernum); 200 214 var cr = Populations[0].add(geno); 201 215 cr.name = "Initial creature" + species + "_" + iter; … … 203 217 cr.energy0 = energyFromVolume(max_chamber_volume[ploid][chambernum],0); 204 218 cr.energy = cr.energy0; 205 setGenotype({"opt" : 0, "cr" : cr, "species" : species });219 setGenotype({"opt" : 0, "cr" : cr, "species" : species, "energy0" : cr.energy0, "genes" : species_genes[species]}); 206 220 if (ploid == 1) 207 221 { … … 219 233 } 220 234 //add new foram with random energy bewtween starting energy and reproduction treshold 221 addForam(species, iter, Math.rndUni(0,getProperty(ploid, "min_repro_energ")),ploid); 235 addForam(species, iter, Math.rndUni(0,species_genes[species]->min_repro_energies[ploid]),ploid); 236 } 237 238 //new species can be added as a dictionary with parameter values that are different than default values 239 function addSpecies(new_genes) 240 { 241 species_genes.add({"min_repro_energies" : [4,6], "energies0" : [20, 1.25], "hibernation" : 0, "morphotype" : 0}); 242 for (var i = 0; i < new_genes.size; i++) 243 { 244 var key = new_genes.getKey(i); 245 species_genes[species_genes.size-1][key] = new_genes[key]; 246 } 222 247 } 223 248 … … 228 253 Populations[2].clear(); //reticulopodia and nutrients 229 254 230 for (var i = 0; i < ExpProperties.foramPop; i++) 231 { 232 addInitialForam(0, i); 233 //addInitialForam(1, i); 255 if (species_genes.size == 0) 256 { 257 addSpecies({}); //default 258 } 259 260 for (var spec = 0; spec < species_genes.size; spec++) 261 { 262 for (var i = 0; i < ExpProperties.foramPop; i++) 263 { 264 addInitialForam(spec, i); 265 } 234 266 } 235 267 o = Populations[0][0].getMechPart(0).orient.clone(); 236 268 ExpState.totaltestedcr = 0; 237 nutrientenergywaiting = ExpProperties.energy_nut;238 269 } 239 270 … … 361 392 if ((chamber_num+1) < chambers[cr.data->lifeparams->species].size) 362 393 { 363 var geno = createForam Genotype(cr.data->lifeparams->gen, cr.data->lifeparams->species, chamber_num+1);394 var geno = createForamMorphology(getGene(cr, "morphotype", 0), cr.data->lifeparams->gen, chamber_num+1); 364 395 var cr2 = Populations[0].add(geno); 365 396 … … 367 398 cr2.energy = cr2.energy0; 368 399 369 setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : 2 });400 setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : 2, "energy0" : cr.energy0}); 370 401 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z); 371 402 setForamMeta(cr2); … … 442 473 } 443 474 475 function fence(pos) 476 { 477 return Math.min(Math.max(0,pos),World.wrldsiz); 478 } 479 444 480 function foramMove(cr) 445 481 { … … 447 483 448 484 //adjustment in z axis 449 cr.moveAbs( cr.pos_x, cr.pos_y, 0);485 cr.moveAbs(fence(cr.pos_x), fence(cr.pos_y), 0); 450 486 451 487 //are there any nutrients in zone 1 or 2? … … 459 495 460 496 //no nutrients in zone 2 461 var hibernation = 0; 462 if (cr.data->lifeparams->gen == 0) hibernation = cr.data->genes->hibernation; 463 else hibernation = cr.data->genes[0]->hibernation; 464 //hibernation 465 if (hibernation == 1) 497 if (getGene(cr, "hibernation",0) == 1) 466 498 { 467 499 reverseHib(cr); … … 469 501 } 470 502 //random move 471 else if ( cr.lifespan%int(dir_change/ExpProperties.secPerStep) == 0)503 else if (Simulator.stepNumber%int(dir_change/ExpProperties.secPerStep) == 0) 472 504 { 473 505 cr.data->lifeparams->dir = randomDir(); … … 732 764 function createStatistics() 733 765 { 734 var number = [ [0, 0],[0,0]]; // [species][gen]735 var e_inc = [ [0, 0],[0,0]];766 var number = []; 767 var e_inc = []; 736 768 var e_nut = 0.0; 769 770 for (var s = 0; s < species_genes.size; s++) 771 { 772 number.add([0,0]);// [haplo][diplo] 773 e_inc.add([0,0]); 774 } 737 775 738 776 for (var i = 0; i < Populations[0].size; i++) … … 752 790 } 753 791 754 var log_numbers = [number[1][0], number[1][1], number[0][0], number[0][1], Populations[1].size]; 755 var log_energies = [e_inc[1][0], e_inc[1][1], e_inc[0][0], e_inc[0][1], e_nut]; 792 var log_numbers = []; 793 var log_energies = []; 794 795 for (var s = 0; s < species_genes.size; s++) 796 { 797 for (var p = 0; p < 2; p++) 798 { 799 log_numbers.add(number[s][p]); 800 log_energies.add(e_inc[s][p]); 801 } 802 } 803 804 log_numbers.add(Populations[1].size); 805 log_energies.add(e_nut); 756 806 757 807 log(log_numbers, "forams_log.txt");
Note: See TracChangeset
for help on using the changeset viewer.