- Timestamp:
- 03/12/16 00:13:49 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.expdef
r470 r474 31 31 global max_chamber_energ; 32 32 global dir_change; 33 global movePerStep; 33 34 34 35 @include "foraminifera.inc" … … 81 82 ExpParams.autorestart = 0; 82 83 84 //time 85 ExpParams.secPerStep = 60; 86 ExpParams.foramSpeedMmPerMin = 0.1; 87 movePerStep = getMovePerStep(); 88 83 89 //ExpParams.visualize = 1; //uncomment to visualize reticulopodia and indicate nutrients positions 84 90 … … 87 93 //reproduction 88 94 ExpParams.foramPop = 10; 89 ExpParams.crossprob = 0 .4;90 ExpParams.mutationprob = 0 .2;95 ExpParams.crossprob = 0; 96 ExpParams.mutationprob = 0; 91 97 ExpParams.repro_time = 20; 92 98 reprocounter = 0; 93 99 94 100 //morphology 95 dir_change = 500;101 dir_change = 30000; 96 102 ExpParams.zone1_range = micronsToFrams(3000); 97 103 ExpParams.zone2_range = micronsToFrams(6000); … … 114 120 ExpParams.min_repro_energ_diplo = 6; 115 121 116 ExpParams.e_meta = 0.000 2;117 ExpParams.energy_hib = 0.000 1;118 ExpParams.energy_move = 0.000 25;122 ExpParams.e_meta = 0.00005; 123 ExpParams.energy_hib = 0.000025; 124 ExpParams.energy_move = 0.00005; 119 125 120 126 ExpParams.energies0_haplo = max_chamber_energ[0][0] - 0.001*max_chamber_energ[0][0]; 121 127 ExpParams.energies0_diplo = max_chamber_energ[1][0] - 0.001*max_chamber_energ[1][0]; 122 ExpParams.feedtrans = 0. 5;128 ExpParams.feedtrans = 0.125; 123 129 ExpParams.e_repro_cost_haplo = 0.7; 124 130 ExpParams.e_repro_cost_diplo = 0.3; … … 128 134 ExpParams.energy_nut = 100 * Math.pow(ExpParams.nutrientsize, 3); 129 135 ExpParams.nutrientPop = 1; 130 ExpParams.feedrate = 0.1;131 nutrientenergywaiting = ExpParams.energy_nut;136 ExpParams.feedrate = 100; 137 nutrientenergywaiting = 0; 132 138 ExpState.totaltestedcr = 0; 133 139 ExpState.nutrient = ""; … … 135 141 136 142 @include "standard_placement.inc" 143 144 function getMovePerStep() 145 { 146 return micronsToFrams((ExpParams.foramSpeedMmPerMin/60)*1000)*ExpParams.secPerStep; 147 } 137 148 138 149 function micronsToFrams(micrometers) … … 247 258 function setForamMeta(cr, gen) 248 259 { 249 cr.idleen = ExpParams.e_meta * max_chamber_energ[gen][Math.min(lastChamberNum(cr), max_chamber_energ[gen].size-1)];260 cr.idleen = (ExpParams.e_meta * max_chamber_energ[gen][Math.min(lastChamberNum(cr), max_chamber_energ[gen].size-1)])*ExpParams.secPerStep; 250 261 } 251 262 … … 295 306 function foramGrow(cr, chamber_num) 296 307 { 297 var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num+1); 298 var cr2 = Populations[0].add(geno); 299 300 cr2.energy0 = cr.energy; 301 cr2.energy = cr2.energy0; 302 303 setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2}); 304 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z); 305 setForamMeta(cr2, cr2.user2["gen"]); 306 307 if (visualization(cr)) 308 { 309 Populations[2].delete(cr.user3); 310 } 311 Populations[0].delete(cr); 308 if ((chamber_num+1) < chambers[cr.user2["species"]].size) 309 { 310 var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num+1); 311 var cr2 = Populations[0].add(geno); 312 313 cr2.energy0 = cr.energy; 314 cr2.energy = cr2.energy0; 315 316 setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2}); 317 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z); 318 setForamMeta(cr2, cr2.user2["gen"]); 319 320 if (visualization(cr)) 321 { 322 Populations[2].delete(cr.user3); 323 } 324 Populations[0].delete(cr); 325 } 312 326 } 313 327 … … 352 366 { 353 367 mindistvec.normalize(); 354 mindistvec.scale(- 0.08);368 mindistvec.scale(-1*movePerStep); 355 369 cr.localDrive = mindistvec; 356 370 moveEnergyDec(cr); … … 361 375 362 376 else 377 { 363 378 return 0; 379 } 364 380 } 365 381 … … 368 384 if (cr.user2["hibernated"] == 0) 369 385 { 370 cr.energy_m += ExpParams.energy_move * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)];386 cr.energy_m += (ExpParams.energy_move * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)])*ExpParams.secPerStep; 371 387 } 372 388 } … … 399 415 } 400 416 //random move 401 else if (cr.lifespan%dir_change == 0) 402 { 403 var dir = (Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), 0); 404 dir.normalize(); 405 dir.scale(-0.08); 406 cr.localDrive = dir; 417 else if (cr.lifespan%(dir_change/ExpParams.secPerStep) == 0) 418 { 419 cr.user2["dir"] = randomDir(); 420 cr.localDrive = cr.user2["dir"]; 407 421 moveEnergyDec(cr); 408 422 } 423 else 424 { 425 cr.localDrive = cr.user2["dir"]; 426 } 427 } 428 429 function randomDir() 430 { 431 var dir = (Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), 0); 432 dir.normalize(); 433 dir.scale(-1*movePerStep); 434 return dir; 409 435 } 410 436 … … 412 438 { 413 439 cr1.localDrive = XYZ.new(0,0,0); 414 var e = cr2.getPart(0).ing * ExpParams.feedtrans; //TODO efficiency dependent on age440 var e = ExpParams.feedtrans*ExpParams.secPerStep; //TODO efficiency dependent on age 415 441 e = Math.min(cr2.energy, e) + 0.0000001; 416 442 //Simulator.print("transferring "+e+" to "+cr1.name+" from "+cr2.name+" ("+cr2.energy+")"); … … 431 457 else 432 458 { 433 cr.idleen = ExpParams.energy_hib * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)]; //hibernate459 cr.idleen = (ExpParams.energy_hib * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)])*ExpParams.secPerStep; //hibernate 434 460 } 435 461 cr.user2["hibernated"] = 1 - cr.user2["hibernated"]; … … 536 562 function nutrientGrowth() 537 563 { 538 nutrientenergywaiting = nutrientenergywaiting + ExpParams.feedrate;539 if (nutrientenergywaiting > ExpParams. energy_nut)564 nutrientenergywaiting = nutrientenergywaiting + 1; 565 if (nutrientenergywaiting > ExpParams.feedrate/ExpParams.secPerStep) 540 566 { 541 567 for (var i = 0; i < ExpParams.nutrientPop; i++) … … 564 590 //reproduction -------------------------------------------- 565 591 reprocounter += 1; 566 if (reprocounter > ExpParams.repro_time)592 if (reprocounter*ExpParams.secPerStep > ExpParams.repro_time) 567 593 { 568 594 reprocounter = 0; … … 618 644 619 645 log(log_numbers, "forams_log.txt"); 620 646 log(log_energies, "energies_log.txt"); 621 647 } 622 648 … … 649 675 name:Stop after the given number of simulation steps 650 676 type:d 0 1000000 0 677 678 prop: 679 id:foramSpeedMmPerMin 680 name:Speed of foraminfera in mm/min 681 type:f 0.1 682 flags: 16 683 group:Foraminifera 684 685 prop: 686 id:secPerStep 687 name:Seconds per simulation step 688 type:f 60.0 689 flags: 16 690 group:Foraminifera 651 691 652 692 prop: … … 798 838 id:feedrate 799 839 name:Feeding rate 800 type:f 0 100 840 type:f 0 1000000 801 841 group:Energy 802 842 help:How fast energy is created in the world … … 841 881 id:repro_time 842 882 name:Time before reproduction 843 type:d 0 1000 883 type:d 0 10000 844 884 845 885 prop:
Note: See TracChangeset
for help on using the changeset viewer.