- Timestamp:
- 06/30/15 23:02:42 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/forams_benthic.expdef
r402 r404 34 34 global foodenergywaiting; 35 35 global reprocounter; 36 global delta_change;37 36 38 37 @include "forams_repro.inc" … … 53 52 pop.name = "Creatures"; 54 53 pop.en_assim = 0; 55 pop.nnsim = 1;54 pop.nnsim = 0; 56 55 pop.enableperf = 1; 57 56 pop.death = 1; … … 70 69 pop.othermask = 0x10000; 71 70 72 73 var size_h = ExpParams.haplo_rad * ExpParams.delta_rate + ExpParams.haplo_rad; 74 var size_d = ExpParams.diplo_rad * ExpParams.delta_rate + ExpParams.diplo_rad; 75 ExpParams.gend = "//0\np:sh=1,sx=" + ExpParams.diplo_rad + ",sy=" + ExpParams.diplo_rad + ",sz=" + ExpParams.diplo_rad + ", rz=3.14159265358979"; 76 ExpParams.genh = "//0\np:sh=1,sx=" + size_h + ",sy=" + size_h + ",sz=" + size_h + ", rz=3.14159265358979"; 71 //radius of the chamber 72 ExpParams.rads = [1.2, 0.6]; 73 //inital genotypes 74 ExpParams.genh = "//0\np:sh=1,sx=" + ExpParams.rads[0] + ",sy=" + ExpParams.rads[0] + ",sz=" + ExpParams.rads[0] + ", rz=3.14159265358979"; 75 ExpParams.gend = "//0\np:sh=1,sx=" + ExpParams.rads[1] + ",sy=" + ExpParams.rads[1] + ",sz=" + ExpParams.rads[1] + ", rz=3.14159265358979"; 76 ExpParams.gend += "\nn:p=0,d=\"S\""; 77 77 ExpParams.e_meta = 0.1; 78 78 ExpParams.feedrate = 0.5; … … 91 91 ExpParams.v_min_d = 300; 92 92 ExpParams.v_min_h = 300; 93 //radius of the chamber94 ExpParams.haplo_rad = 1.2;95 ExpParams.diplo_rad = 0.6;96 93 //minimal age for reproduction 97 94 ExpParams.age_min_d = 100; … … 104 101 ExpParams.repro_thr = 1; 105 102 106 //size change rate107 ExpParams.delta_rate = 0.1;108 103 //grwoth speed in time steps 109 104 ExpParams.growth_step = 50; … … 118 113 World.wrldsiz = ExpParams.wsize; 119 114 World.wrldbnd = 1; 120 121 delta_change = 0.5;122 115 } 123 116 … … 136 129 cr.energ0 = ExpParams.v_min_h - ExpParams.repro_thr; 137 130 cr.energy = cr.energ0; 138 cr.user1 = {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h , "delta_h" : ExpParams.haplo_rad * ExpParams.delta_rate, "delta_d" : ExpParams.diplo_rad * ExpParams.delta_rate};139 cr.user2 = {"Va" : ExpParams.v_min_h - ExpParams.repro_thr, "gen" : 0, "growth_step" : ExpParams.growth_step, "rsize" : ExpParams. haplo_rad, "vinit" : ExpParams.v_min_h - ExpParams.repro_thr};131 cr.user1 = {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}; 132 cr.user2 = {"Va" : ExpParams.v_min_h - ExpParams.repro_thr, "gen" : 0, "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit" : ExpParams.v_min_h - ExpParams.repro_thr}; 140 133 } 141 134 ExpState.totaltestedcr = 0; … … 230 223 cr.signals.add("repro"); 231 224 cr.signals[0].power = 1; 232 233 225 } 234 226 235 227 function onCreaturesStep(cr) 236 228 { 237 cr.moveAbs(cr.pos_x, cr.pos_y, 0); //adjustment in z axis 229 //TODO moving inside sediment? 230 cr.moveAbs(cr.pos_x, cr.pos_y, 0); //adjustment in z axis 238 231 var p = cr.getMechPart(0); 239 232 var n = cr.signals.receiveSet("food", ExpParams.food_range); … … 276 269 if (cr.energy > 100) 277 270 { 271 //TODO energy costs dependant on size 278 272 // cr.energy_m = cr.user2["Va"]/cr.user2["vinit"]; 279 273 } … … 281 275 if (cr.lifespan >= ExpParams.max_age) 282 276 { 277 //TODO what is max age value? should there be one? 283 278 Populations[0].kill(cr); 279 return; 284 280 } 285 281 286 282 //foram growth 287 else if (cr.lifespan == cr.user2["growth_step"]) 288 { 289 var pos = [cr.center_x, cr.center_y, cr.center_z]; 290 var energy = cr.energy; 291 var cr2 = null; 292 if (cr.user2["gen"] == 0) 293 { 294 var new_r = ExpParams.haplo_rad * Math.min(Math.max(cr.user2["Va"] / cr.user2["vinit"] * 0.5, 1), 2.5); 295 cr.user2["rsize"] = new_r; 296 cr2 = Populations[0].add("//0\np:sh=1,sx=" + cr.user2["rsize"] + ",sy=" + cr.user2["rsize"] + ",sz=" + cr.user2["rsize"] + ", rz=3.14159265358979"); 297 cr2.user1 = {"vamin" : cr.user1["vamin"], "amin": cr.user1["amin"], "delta_h" : cr.user1["delta_h"], "delta_d" : cr.user1["delta_d"]}; 298 } 299 else if (cr.user2["gen"] == 1) 300 { 301 var new_r = ExpParams.diplo_rad * Math.min(Math.max(cr.user2["Va"] / cr.user2["vinit"] * 0.5, 1), 2.5); 302 cr.user2["rsize"] = new_r; 303 304 var geno = "//0\np:sh=1,sx=" + cr.user2["rsize"] + ",sy=" + cr.user2["rsize"] + ",sz=" + cr.user2["rsize"] + ", rz=3.14159265358979"; 305 geno += "\nn:p=0,d=\"S\""; //TODO is this the only difference with haploid code? TODO why initial genotypes are not used as defined in ExpParams? 283 if (cr.lifespan == cr.user2["growth_step"]) 284 { 285 //TODO how size is related to the energy? 286 cr.user2["rsize"] = ExpParams.rads[cr.user2["gen"]] * Math.min(Math.max(float(cr.user2["Va"] / cr.user2["vinit"]) * 0.5, 1.0), 2.5); 287 var geno = "//0\np:sh=1,sx=" + cr.user2["rsize"] + ",sy=" + cr.user2["rsize"] + ",sz=" + cr.user2["rsize"] + ", rz=3.14159265358979"; 288 if (cr.user2["gen"] == 1) 289 { 290 geno += "\nn:p=0,d=\"S\""; //TODO why initial genotypes are not used as defined in ExpParams? 306 291 //TODO maybe it would be nice if they rotated so the "S" would show where they are going (direction/intention) 307 cr2 = Populations[0].add(geno); 308 309 310 cr2.user1 = [ {"vamin" : cr.user1[0]["vamin"], "amin": cr.user1[0]["amin"], "delta_h" : cr.user1[0].get("delta_h"), "delta_d" : cr.user1[0]["delta_d"] }, {"vamin" : cr.user1[1]["vamin"], "amin": cr.user1[1]["amin"], "delta_h" : cr.user1[1]["delta_h"], "delta_d" : cr.user1[1]["delta_d"] }]; 311 } 312 cr2.energy = energy; 313 cr2.user2 = {"Va" : cr.user2["Va"], "gen" : cr.user2["gen"], "growth_step" : cr.user2["growth_step"], "rsize" : cr.user2["rsize"], "vinit": cr.user2["vinit"]}; 292 } 293 var cr2 = Populations[0].add(geno); 294 cr2.energy = cr.energy; 295 setGenotype(cr2, cr.user1, cr.user2); 314 296 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z); 315 297 … … 355 337 } 356 338 339 function setGenotype(cr, new_user1, new_user2) 340 { 341 cr.user2 = {"Va" : new_user2["Va"], "gen" : new_user2["gen"], "growth_step" : new_user2["growth_step"], "rsize" : new_user2["rsize"], "vinit": new_user2["vinit"]}; 342 if (cr.user2["gen"] == 0) 343 { 344 cr.user1 = {"vamin" : new_user1["vamin"], "amin": new_user1["amin"] }; 345 } 346 else if (cr.user2["gen"] == 1) 347 { 348 cr.user1 = [ {"vamin" : new_user1[0]["vamin"], "amin": new_user1[0]["amin"] }, {"vamin" : new_user1[1]["vamin"], "amin": new_user1[1]["amin"] }]; 349 } 350 351 } 352 357 353 // -------------------------------- creature end -------------------------------- 358 354 … … 376 372 cr.signals[0].value = cr.getMechPart(0); 377 373 378 var retry = 100; //try 100 times 379 while (retry--) 380 { 381 placeCreatureRandomly(cr, 0, 0); 382 if (!cr.boundingBoxCollisions(0)) 383 return cr; 384 } 385 386 return cr; 374 placeRandomlyNotColliding(cr); 387 375 } 388 376 … … 395 383 Collision.Creature1.energy_m = Collision.Creature1.energy_m + e; 396 384 Collision.Creature2.energy_p = Collision.Creature2.energy_p + e; 397 var ener = float(Collision.Creature2.user2["Va"]); 398 var sum = float(float(ener) + float(e)); 399 Collision.Creature2.user2["Va"] = float(sum); 385 Collision.Creature2.user2["Va"] = float(Collision.Creature2.user2["Va"]) + float(e); 400 386 } 401 387 } … … 434 420 435 421 prop: 436 id:haplo_rad437 name:Haploid radius438 type:f 0.1 3 1.2439 440 prop:441 422 id:growth_step 442 423 name:Growth step 443 type:d 50 10000 1000 444 445 prop: 446 id:delta_rate 447 name:Delta rate 448 type:f 0.0001 0.1 0.001 449 450 prop: 451 id:diplo_rad 452 name:Diploid radius 453 type:f 0.1 3 0.6 454 455 prop: 456 id:foodPop 457 name:Food size 458 type:d 1 1000 10 459 460 prop: 461 id:age_min 462 name:Minimal age for reproduction 463 type:d 100 10000 200 424 type:d 10 10000 1000 425 426 prop: 427 id:rads 428 name: haploid and diploid radius 429 type:x 464 430 465 431 prop: … … 489 455 prop: 490 456 id:repro_thr 491 name: Threshold for reproduction457 name:amount of energy initial creatures need to gather to reproduce 492 458 type:d 1 1000 1 493 459 … … 615 581 flags:16 616 582 583 prop: 584 id:foodPop 585 name:food size 586 type:d 1 1000 10 587 617 588 state: 618 589 id:food
Note: See TracChangeset
for help on using the changeset viewer.