Changeset 430 for experiments/frams/foraminifera
- Timestamp:
- 09/08/15 01:03:24 (9 years ago)
- Location:
- experiments/frams/foraminifera/data/scripts
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.expdef
r429 r430 13 13 max_energy_level - maximum energy level reached so far 14 14 gen - generation: 0 haploid, 1 diploid 15 species - species: 0 not hibernating 1hibernating15 species - species: 0 hibernating 1 not hibernating 16 16 hibernated - 0/1 foram isn't/is hibernated 17 17 reproduce - 0/1 foram isn't/is ready for reproduction … … 35 35 global o; 36 36 global max_chamber_energ; 37 37 global dir_change; 38 38 39 39 @include "foraminifera.inc" … … 69 69 //pop.othermask = 0x10002; 70 70 71 //ExpParams.showRet = 1; //uncomment to show reticulopodia 72 73 pop = Populations.addGroup("Reticulopodia"); 74 pop.nnsim = 0; 75 pop.enableperf = 0; 76 pop.death = 0; 77 pop.energy = 0; 78 pop.selfmask = 0x20002; 79 pop.othermask = 0x10000; 80 71 81 //world 72 82 SignalView.mode = 1; 73 ExpParams.world_size = 100;74 World.wrldwat = ExpParams.world_size;83 ExpParams.world_size = scale(40000); 84 World.wrldwat = 200; 75 85 World.wrldsiz = ExpParams.world_size; 76 86 World.wrldbnd = 1; … … 82 92 83 93 //reproduction 84 ExpParams.foramPop = 3;94 ExpParams.foramPop = 10; 85 95 ExpParams.crossprob = 0.4; 86 96 ExpParams.mutationprob = 0.2; … … 89 99 90 100 //morphology 101 dir_change = 500; 102 ExpParams.zone1_range = scale(5000); 103 ExpParams.zone2_range = scale(8000); 91 104 init_chambers(); 92 ExpParams.chamber_proculus_haplo = scale( 60);105 ExpParams.chamber_proculus_haplo = scale(50); 93 106 ExpParams.chamber_difference_haplo = 0.0; 94 107 ExpParams.chamber_proculus_diplo = scale(20); … … 100 113 { 101 114 max_chamber_energ[j].add(((Math.pow(getProperty(j, "chamber_proculus"),3) + Math.pow(getProperty(j, "chamber_proculus") + (i) * getProperty(j, "chamber_difference"),3))*(i+1))/2); 102 103 115 } 104 116 } 105 ExpParams.zone1_range = scale(250);106 ExpParams.zone2_range = scale(5000);107 117 108 118 //energetics 109 ExpParams.min_repro_energ_haplo = max_chamber_energ[0][2]; 110 ExpParams.min_repro_energ_diplo = max_chamber_energ[1][8]; 111 ExpParams.e_meta = 0.00003 * max_chamber_energ[0][0]; 112 ExpParams.energy_hib = 0.00003 * max_chamber_energ[0][0]; 113 ExpParams.energy_move = 0.0003 * max_chamber_energ[0][0]; 114 ExpParams.energies0_haplo = max_chamber_energ[0][0] - 0.1*max_chamber_energ[0][0]; 115 ExpParams.energies0_diplo = max_chamber_energ[1][0] - 0.1*max_chamber_energ[1][0]; 116 ExpParams.feedtrans = 0.05; 117 ExpParams.e_repro_cost_haplo = 0.5; 119 ExpParams.min_repro_energ_haplo = 4; 120 ExpParams.min_repro_energ_diplo = 6; 121 122 ExpParams.e_meta = 0.0002; 123 ExpParams.energy_hib = 0.0001; 124 ExpParams.energy_move = 0.00025; 125 126 ExpParams.energies0_haplo = max_chamber_energ[0][0] - 0.001*max_chamber_energ[0][0]; 127 ExpParams.energies0_diplo = max_chamber_energ[1][0] - 0.001*max_chamber_energ[1][0]; 128 ExpParams.feedtrans = 0.5; 129 ExpParams.e_repro_cost_haplo = 0.7; 118 130 ExpParams.e_repro_cost_diplo = 0.3; 119 131 … … 121 133 ExpParams.nutrientsize = scale(10); 122 134 ExpParams.energy_nut = 100 * Math.pow(ExpParams.nutrientsize, 3); 123 ExpParams.nutrientPop = 1 0;124 ExpParams.feedrate = 0. 0025;135 ExpParams.nutrientPop = 1; 136 ExpParams.feedrate = 0.1; 125 137 nutrientenergywaiting = ExpParams.energy_nut; 126 138 ExpState.totaltestedcr = 0; … … 157 169 Populations[0].clear(); 158 170 Populations[1].clear(); 171 Populations[2].clear(); 159 172 160 173 for (var i = 0; i < ExpParams.foramPop; i++) … … 223 236 ExpState.nutrient = tmpvec; 224 237 File.writeObject(sim_params.*); 225 ExpState.nutrient = null; //vectors are only created for saving and then discarded 238 ExpState.nutrient = null; //vectors are only created for saving and then discardedsetForam 226 239 227 240 for (var cr in Populations[0]) … … 233 246 // -------------------------------- foram begin ----------------------------------- 234 247 248 function setForamMeta(cr, gen) 249 { 250 cr.idleen = ExpParams.e_meta * max_chamber_energ[gen][Math.min(lastChamberNum(cr), max_chamber_energ[gen].size-1)]; 251 } 252 253 function lastChamberNum(cr) 254 { 255 return cr.numparts-1; 256 } 257 235 258 function onForamsBorn(cr) 236 259 { 237 cr.idleen = ExpParams.e_meta; 260 setForamMeta(cr, 1); 261 if (ExpParams.showRet == 1) 262 { 263 var ret = Populations[2].add("//0\np:sh=3,sx=0.01,sy="+ExpParams.zone1_range+",sz="+ExpParams.zone1_range+",ry=1.57"); 264 cr.user3 = ret; 265 } 238 266 } 239 267 … … 253 281 function foramGrow(cr, chamber_num) 254 282 { 255 var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num );283 var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num+1); 256 284 var cr2 = Populations[0].add(geno); 257 285 … … 261 289 setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2}); 262 290 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z); 263 291 setForamMeta(cr2, cr2.user2["gen"]); 292 293 if (ExpParams.showRet == 1) 294 { 295 Populations[2].delete(cr.user3); 296 } 264 297 Populations[0].delete(cr); 265 298 } … … 279 312 var mindist = 100000000000; 280 313 var mindistvec = null; 314 var eating = 0; 281 315 282 316 for (i = 0; i < n.size; i++) 283 317 { 284 mp = n[i].value ;318 mp = n[i].value.getMechPart(0); 285 319 distvec.set(mp.pos); 286 320 distvec.sub(p.pos); 287 321 dist = distvec.length; 288 if (dist < mindist) 322 if (dist < ExpParams.zone1_range) 323 { 324 if (n[i].value != null) 325 { 326 energyTransfer(cr, n[i].value); 327 eating = 1; 328 } 329 } 330 else if (eating == 0 && cr.user2["hibernated"] == 0 && dist < mindist) 289 331 { 290 332 mindist = dist; … … 293 335 } 294 336 295 mindistvec.normalize(); 296 mindistvec.scale(-0.08); 297 cr.localDrive = mindistvec; 337 if (!eating && cr.user2["hibernated"] == 0) 338 { 339 mindistvec.normalize(); 340 mindistvec.scale(-0.08); 341 cr.localDrive = mindistvec; 342 moveEnergyDec(cr); 343 } 344 298 345 return 1; 299 346 } … … 305 352 function moveEnergyDec(cr) 306 353 { 307 if (cr.user2["hibernated"] == 1) 308 { 309 cr.energy_m += ExpParams.energy_hib; 310 } 311 else 312 { 313 cr.energy_m += ExpParams.energy_move; 354 if (cr.user2["hibernated"] == 0) 355 { 356 cr.energy_m += ExpParams.energy_move * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)]; 314 357 } 315 358 } … … 320 363 321 364 //adjustment in z axis 322 cr.moveAbs(cr.pos_x, cr.pos_y, 0.5); 323 324 //are there any nutrients in zone 1? 325 if (cr.boundingBoxCollisions() == 2) 326 { 327 if (cr.user2["hibernated"] == 1) 328 cr.user2["hibernated"] = 0; 329 return; 330 } 331 332 else if (cr.user2["hibernated"] == 1) 333 { 334 moveEnergyDec(cr); 335 return; 336 } 337 338 //are there any nutrients in zone 2? 339 else 365 cr.moveAbs(cr.pos_x, cr.pos_y, 0); 366 367 //are there any nutrients in zone 1 or 2? 340 368 { 341 369 var moved = stepToNearest(ExpParams.zone2_range); //TODO weighted sum of distance and energy 342 370 if (moved==1) 343 { 344 moveEnergyDec(cr); 371 { 345 372 return; 346 373 } … … 348 375 349 376 //no nutrients in zone 2 350 351 377 var hibernation = 0; 352 378 if (cr.user2["gen"] == 0) hibernation = cr.user1["hibernation"]; … … 355 381 if (hibernation == 1) 356 382 { 383 reverseHib(cr); 384 cr.localDrive = XYZ.new(0,0,0); 385 } 386 //random move 387 else if (cr.lifespan%dir_change == 0) 388 { 389 var dir = (Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), Math.rndUni(-ExpParams.zone2_range, ExpParams.zone2_range), 0);//(0.1 * Math.rnd01, 0.1 * Math.rnd01, 0); 390 dir.normalize(); 391 dir.scale(-0.08); 392 cr.localDrive = dir; 357 393 moveEnergyDec(cr); 358 cr.user2["hibernated"] = 1; 359 cr.localDrive = XYZ.new(0,0,0); 360 } 361 //random move 394 } 395 } 396 397 function energyTransfer(cr1, cr2) 398 { 399 cr1.localDrive = XYZ.new(0,0,0); 400 var e = cr2.getPart(0).ing * ExpParams.feedtrans; //TODO efficiency dependent on age 401 e = Math.min(cr2.energy, e) + 0.0000001; 402 //Simulator.print("transferring "+e+" to "+cr1.name+" from "+cr2.name+" ("+cr2.energy+")"); 403 cr2.energy_m = cr2.energy_m + e; 404 cr1.energy_p = cr1.energy_p + e; 405 if (cr1.user2["hibernated"] == 1) 406 { 407 reverseHib(cr1); 408 } 409 } 410 411 function reverseHib(cr) 412 { 413 if (cr.user2["hibernated"] == 1) 414 { 415 setForamMeta(cr, cr.user2["gen"]); //unhibernate 416 } 362 417 else 363 418 { 364 cr.localDrive = (0.1 * Math.rnd01, 0.1 * Math.rnd01, 0); 365 moveEnergyDec(cr); 366 } 367 } 368 369 function onForamsCollision() 370 { 371 if (Collision.Creature1.user2 != null) 372 { 373 Collision.Creature1.localDrive = XYZ.new(0,0,0); 374 var e = Collision.Part2.ing * ExpParams.feedtrans; //TODO efficiency dependent on age 375 //Simulator.print("transferring "+e+" to "+Collision.Creature1.name+" from "+Collision.Creature2.name+" ("+Collision.Creature2.energy+")"); 376 Collision.Creature2.energy_m = Collision.Creature2.energy_m + e; 377 Collision.Creature1.energy_p = Collision.Creature1.energy_p + e; 378 Collision.Creature1.user2["hibernated"] = 0; 379 } 419 cr.idleen = ExpParams.energy_hib * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)]; //hibernate 420 } 421 cr.user2["hibernated"] = 1 - cr.user2["hibernated"]; 380 422 } 381 423 … … 383 425 { 384 426 cr.getMechPart(0).orient.set(o); 427 if (ExpParams.showRet == 1) 428 cr.user3.moveAbs(cr.center_x-ExpParams.zone1_range, cr.center_y-ExpParams.zone1_range, cr.center_z-ExpParams.zone1_range-getProperty(cr.user2["gen"], "chamber_proculus")); 385 429 386 430 if (deathConditions(cr) == 1) … … 392 436 foramMove(cr); 393 437 438 var repro = foramReproduce(cr); 439 if (repro == 1) 440 { 441 return; 442 } 443 394 444 cr.user2["max_energy_level"] = Math.max(cr.energy, cr.user2["max_energy_level"]); 395 if ( cr.numparts <= chambers[0].size)396 { 397 if ((cr.user2["max_energy_level"] >= max_chamber_energ[cr.user2["gen"]][ cr.numparts-1]))445 if (lastChamberNum(cr) <= chambers[0].size-1) 446 { 447 if ((cr.user2["max_energy_level"] >= max_chamber_energ[cr.user2["gen"]][lastChamberNum(cr)])) 398 448 { 399 foramGrow(cr, cr.numparts); 400 return; 449 foramGrow(cr, lastChamberNum(cr)); 401 450 } 402 } 403 404 foramReproduce(cr); 451 } 405 452 } 406 453 … … 415 462 function onForamsDied(cr) 416 463 { 464 if (ExpParams.showRet == 1) 465 { 466 Populations[2].delete(cr.user3); 467 } 417 468 //fossilization 418 469 var geno = GenePools[0].add(cr.genotype); … … 429 480 function createNutrientGenotype(nutrientsize, zone1_range) 430 481 { 431 return "//0\np:sh=3,sx="+ nutrientsize+",sy="+(zone1_range + nutrientsize)+",sz="+(zone1_range+nutrientsize)+",ry=1.5,vr=0.0,1.0,0.0";482 return "//0\np:sh=3,sx="+(nutrientsize+25)+",sy="+nutrientsize+",sz="+nutrientsize+",ry=1.5,vr=0.0,1.0,0.0"; 432 483 } 433 484 … … 447 498 cr.signals.add("nutrient"); 448 499 449 cr.signals[0].value = cr .getMechPart(0);500 cr.signals[0].value = cr; 450 501 451 502 placeCreatureRandomly(cr, 0, 0); … … 503 554 } 504 555 } 556 if (Simulator.stepNumber == 150000) 557 Simulator.stop(); 505 558 } 506 559 507 560 function createStatistics() 508 561 { 509 var number_ploidy = [0, 0]; 510 var number_species = [0, 0]; 511 var e_inc = [0.0, 0.0]; 562 var number = [[0, 0],[0,0]]; // [species][gen] 563 var e_inc = [[0, 0],[0,0]]; 512 564 var e_nut = 0.0; 513 565 … … 516 568 var cr = Populations[0].get(i); 517 569 var gen = cr.user2["gen"]; 518 number_ploidy[gen] = number_ploidy[gen] + 1;519 570 var species = cr.user2["species"]; 520 number_species[species] = number_species[species] + 1; 521 e_inc[gen] = e_inc[gen] + cr.energy; 571 572 number[species][gen] = number[species][gen] + 1; 573 e_inc[species][gen] = e_inc[species][gen] + cr.energy; 522 574 } 523 575 … … 528 580 } 529 581 530 var log_numbers = [number_ploidy[0], number_ploidy[1], Populations[1].size]; 531 var log_species = [number_species[0], number_species[1]]; 532 var log_energy = [e_inc[0], e_inc[1], e_nut]; 533 534 log(log_numbers, "log_sizes.txt"); 535 log(log_species, "log_species.txt"); 536 log(log_energy, "log_energy.txt"); 582 var log_numbers = [number[0][0], number[0][1], number[1][0], number[1][1], Populations[1].size]; 583 var log_energies = [e_inc[0][0], e_inc[0][1], e_inc[1][0], e_inc[1][1], e_nut]; 584 585 log(log_numbers, "forams_log.txt"); 586 log(log_energies, "energies_log.txt"); 537 587 } 538 588 539 589 function log(tolog, fname) 540 590 { 541 var f = File.appendDirect(fname, "forams data"); 591 var f = File.appendDirect(fname, "forams data"); 542 592 f.writeString("" + Simulator.stepNumber); 543 593 for (var i = 0; i < tolog.size; i++) … … 554 604 555 605 ~ 606 607 prop: 608 id:showRet 609 name:Show reticulopodia 610 type:d 0 1 0 611 group:Foraminifera 556 612 557 613 prop: … … 734 790 id:world_size 735 791 name:World size 736 type:d 10 1000 20792 type:d 10 10000 20 737 793 group:World 738 794 -
experiments/frams/foraminifera/data/scripts/foraminifera.inc
r422 r430 5 5 { 6 6 colors = ["1.0,1.0,0.0","1.0,0.5,0.0"]; 7 chambers = [ [" //0\np:sh=1,",8 " p:0.98089325428009, 0.00591040402650833, 0.00389722990803421,",9 " p:1.90962779521942, -0.256769120693207, -0.16194811463356,",10 " p:2.63965249061584, -0.727959632873535, -0.609036147594452,",11 " p:3.17575979232788, -1.34843015670776, -1.14828503131866,",12 " p:3.55273032188416, -2.22369408607483, -1.3917418718338,",13 " p:3.64916682243347, -3.11888360977173, -1.01666414737701,",14 " p:3.50461649894714, -3.84039807319641, -0.377427101135254,",15 " p:3.15921688079834, -4.50001525878906, 0.261153399944305,",16 " p:2.51528453826904, -5.16421365737915, 0.59241509437561,"],17 [" //0\np:sh=1,",18 " p:1.08020961284637, -0.0597195439040661, -0.0393781512975693,",19 " p:1.08020961284637, -0.0597195439040661, -0.0393781512975693,",20 " p:0.615013539791107, 0.778662621974945, 0.535521030426025,",21 " p:0.488581955432892, 0.826426684856415, -0.381044268608093,",22 " p:0.732419908046722, -0.0084995785728097, -1.02214300632477,",23 " p:1.35288727283478, 0.875738024711609, -1.03719782829285,",24 " p:0.342692613601685, 0.938660383224487, -1.45657968521118,",25 " p:1.0958571434021, 0.316927701234818, -1.813929438591,",26 " p:0.903768002986908, 1.11856341362, -2.53161096572876,",27 " p:0.21014116704464, 0.295340299606323, -2.45328187942505,"] ];7 chambers = [ ["0.0,0.0,0.0,", //longitudal 8 "0.98089325428009, 0.00591040402650833, 0.00389722990803421,", 9 "1.90962779521942, -0.256769120693207, -0.16194811463356,", 10 "2.63965249061584, -0.727959632873535, -0.609036147594452,", 11 "3.17575979232788, -1.34843015670776, -1.14828503131866,", 12 "3.55273032188416, -2.22369408607483, -1.3917418718338,", 13 "3.64916682243347, -3.11888360977173, -1.01666414737701,", 14 "3.50461649894714, -3.84039807319641, -0.377427101135254,", 15 "3.15921688079834, -4.50001525878906, 0.261153399944305,", 16 "2.51528453826904, -5.16421365737915, 0.59241509437561,"], 17 ["0.0,0.0,0.0,", //coiled 18 "1.08020961284637, -0.0597195439040661, -0.0393781512975693,", 19 "1.08020961284637, -0.0597195439040661, -0.0393781512975693,", 20 "0.615013539791107, 0.778662621974945, 0.535521030426025,", 21 "0.488581955432892, 0.826426684856415, -0.381044268608093,", 22 "0.732419908046722, -0.0084995785728097, -1.02214300632477,", 23 "1.35288727283478, 0.875738024711609, -1.03719782829285,", 24 "0.342692613601685, 0.938660383224487, -1.45657968521118,", 25 "1.0958571434021, 0.316927701234818, -1.813929438591,", 26 "0.903768002986908, 1.11856341362, -2.53161096572876,", 27 "0.21014116704464, 0.295340299606323, -2.45328187942505,"] ]; 28 28 } 29 29 … … 31 31 { 32 32 var rad = getProperty(gen, "chamber_proculus"); 33 var geno = chambers[species][0] + "sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen];33 var geno = "//0\np:" + chambers[species][0] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen]; 34 34 35 35 chamber_num = Math.min(chamber_num, chambers[species].size - 1); … … 38 38 { 39 39 rad = getProperty(gen, "chamber_proculus") + getProperty(gen, "chamber_difference") * (i + 1); 40 geno += "\n" + chambers[species][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen];40 geno += "\n" + "p:" + chambers[species][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen]; 41 41 } 42 42 … … 45 45 geno += "\n" + "j:"+ i +", "+ (i+1) +", sh=1"; 46 46 } 47 47 48 if (species == 1) geno += "\nn:p=0,d=\"S\""; 48 49 … … 54 55 if (mode["opt"] == 0) //initial 55 56 { 56 mode["cr"].user1 = {"min_repro_energies" : [ getProperty(0, "min_repro_energ"), getProperty(1, "min_repro_energ")], "hibernation" : 1 - mode["species"]};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" : 1 - mode["species"]}; 57 58 mode["cr"].user2 = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0, "hibernated" : 0, "species" : mode["species"], "reproduce" : 0}; 58 59 } … … 75 76 { 76 77 energy0 = getProperty(0,"energies0"); 77 number = getProperty(1, "e_repro_cost") * parent.energy/ energy0;78 number = (( 1 - getProperty(1, "e_repro_cost")) * parent.energy) / energy0; 78 79 new_user1 = parent.user1; 79 80 parent.user2["gen"] = 1 - parent.user2["gen"]; //because of reversal of "gen" in createOffspring function … … 83 84 { 84 85 energy0 = getProperty(1,"energies0"); 85 number = getProperty(parent.user2["gen"], "e_repro_cost") * parent.energy / energy0 + getProperty(parent.user2["gen"], "e_repro_cost") * parent2.energy/ energy0;86 number = (((1 - getProperty(parent.user2["gen"], "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.user2["gen"], "e_repro_cost"))) * parent2.energy)) / energy0; 86 87 new_user1 = [parent.user1, parent2.user1]; 87 88 gen = 1 - parent.user2["gen"]; 88 89 } 89 90 90 Simulator.print(" number of offspring: " + number);91 Simulator.print("haploid number of offspring: " + number + " energ0: " + energy0); 91 92 92 93 for (var j = 0; j < number; j++) … … 99 100 { 100 101 var energy0 = getProperty(0,"energies0"); 101 var number = getProperty(parent.user2["gen"], "e_repro_cost") * parent.energy/ energy0;102 103 Simulator.print(" number of offspring: " + number);102 var number = ((1 - (getProperty(parent.user2["gen"], "e_repro_cost"))) * parent.energy) / energy0; 103 104 Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0); 104 105 105 106 for (var j = 0; j < number / 2; j++) … … 149 150 parent2 = pop[i]; 150 151 } 151 else152 if (parent1 != null && parent2 != null) 152 153 { 153 154 reproduce_haploid(parent1, parent2, 0); … … 158 159 parent1 = null; 159 160 parent2 = null; 160 } 161 161 } 162 162 } 163 163 } … … 204 204 } 205 205 206 207 206 208 function foramReproduce(cr) 207 209 { … … 231 233 } 232 234 if (reproduced == 1) 233 return ;235 return 1; 234 236 } 235 237 … … 239 241 cr.user2["reproduce"] = 0; 240 242 } 243 244 return 0; 241 245 } 242 246 -
experiments/frams/foraminifera/data/scripts/foraminifera.show
r423 r430 21 21 GLDisplay.minfps = 10; 22 22 23 Params = { "nutrientPop" : [5,10,15], "feedrate" : [0.001,0.0025,0.004], "feedtrans" : [0.01,0.05,0.1],"energy_nut" :[0.5,1.5,3.0], "stress" : [0,1]};23 Params = { "feedrate" : [0.05,0.1,0.2], "feedtrans" : [0.01,0.05,0.1],"energy_nut" :[0.5,1.5,3.0], "stress" : [0,1]}; 24 24 } 25 25 … … 27 27 { 28 28 ExpParams.[param_id] = Params[param_id][ShowParams.[param_id]]; 29 }30 31 function ShowParams_nutrientPop_set()32 {33 setShowParam("nutrientPop");34 29 } 35 30 … … 57 52 58 53 prop: 59 id:nutrientPop60 name:Nutrients amount61 type:d 0 2 1 ~5~10~1562 63 prop:64 54 id:feedrate 65 55 name:Feeding rate
Note: See TracChangeset
for help on using the changeset viewer.