Ignore:
Timestamp:
08/24/15 19:57:12 (9 years ago)
Author:
oriona
Message:

new species added, hibernation added, morphology changed to more realistic, parameters in .show changed, refactoring

File:
1 edited

Legend:

Unmodified
Added
Removed
  • experiments/frams/foraminifera/data/scripts/foraminifera.expdef

    r421 r422  
    66user1:
    77genes which are not encoded in Ff genotype:
    8 minenergy - Minimum stored energy necessary for reproduction
    9 minage - minimal age for reproduction
     8min_repro_energy - Minimum energy necessary for reproduction
     9hibernation - Defines foram behavior in the case of no nutrients
    1010
    1111user2:
    1212Physiological parameters of foraminifera:
    13 Va - amount of the stored energy
     13max_energy_level - maximum energy level reached so far
    1414gen - generation: 0 haploid, 1 diploid
     15species - species: 0 not hibernating 1 hibernating
     16hibernated - 0/1 foram isn't/is hibernated
     17reproduce - 0/1 foram isn't/is ready for reproduction
    1518~
    1619code:~
     
    2831global nutrientenergywaiting;
    2932global reprocounter;
     33global colors;
     34global chambers;
     35global o;
     36global max_chamber_energ;
     37
    3038
    3139@include "foraminifera.inc"
     
    3947        Populations.clear();
    4048        GenePools[0].name = "Unused";
    41 
    42         SignalView.mode = 1;
    4349
    4450        var pop = Populations[0];
     
    5258        pop.othermask = 0x20001;
    5359        //pop.selfmask = 0x20002; pop.othermask = 0x10002;
    54         pop.perfperiod = 25;
     60        pop.perfperiod = 25; 
    5561
    5662        pop = Populations.addGroup("Nutrients");
     
    6167        pop.selfmask = 0x20002;
    6268        pop.othermask = 0x10000;
    63 
    64         //radius of the chamber
    65         ExpParams.rads = [1.2, 0.6];
    66         //inital genotypes
    67         ExpParams.genh = createForamGenotype(ExpParams.rads[0]);
    68         ExpParams.gend = createForamGenotype(ExpParams.rads[1])+"\nn:p=0,d=\"S\"";
     69        //pop.othermask = 0x10002;
     70
     71        //world
     72        SignalView.mode = 1;
     73        ExpParams.world_size = 100;
     74        World.wrldwat = ExpParams.world_size;
     75        World.wrldsiz = ExpParams.world_size;
     76        World.wrldbnd = 1;
     77        ExpParams.stress = 1;
    6978        ExpParams.creath = -0.99; //just above the bottom
    70         ExpParams.e_meta = 0.1;
    71         ExpParams.feedrate = 0.5;
    72         ExpParams.feede0 = 100;
    73         ExpParams.feedtrans = 3;
    74         ExpParams.nutrientsize = 0.1;
    75         ExpParams.nutrientgen = "//0\np:sh=2,sx="+ExpParams.nutrientsize+",sy="+ExpParams.nutrientsize+",sz="+ExpParams.nutrientsize+"\nn:d=T,p=0";
    7679        ExpParams.autorestart = 0;
    77         ExpParams.popsize = 10;
     80
    7881        //ExpParams.logging = 1; //uncomment to enable logging simulation parameters to log files
    7982
    80         //number of offspring
    81         ExpParams.energy0h = 40;
    82         ExpParams.energy0d = 25;
    83         //minial volume for reproduction
    84         ExpParams.minenerg = [300, 300];
    85         //minimal age for reproduction
    86         ExpParams.minage = [100, 100];
    87         //crossover probability
     83        //reproduction
     84        ExpParams.foramPop = 3;
    8885        ExpParams.crossprob = 0.4;
    89         //mutation probability
    9086        ExpParams.mutationprob = 0.2;
    91         ExpParams.repro_time = 45;
    92 
    93         //grwoth speed in simulation steps
    94         ExpParams.growth_step = 50;
    95 
     87        ExpParams.repro_time = 20;
     88        reprocounter = 0;
     89
     90        //morphology
     91        init_chambers();
     92        ExpParams.chamber_proculus_haplo = scale(60);
     93        ExpParams.chamber_difference_haplo = 0.0;
     94        ExpParams.chamber_proculus_diplo = scale(20);
     95        ExpParams.chamber_difference_diplo = 0.2;
     96        max_chamber_energ = [Vector.new(), Vector.new()];
     97        for (var j = 0; j < 2; j++)
     98        {
     99                for (var i = 0; i < chambers[0].size; i++)
     100                {
     101                        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                }                                 
     104        }
     105        ExpParams.zone1_range = scale(250);
     106        ExpParams.zone2_range = scale(5000);
     107
     108        //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;
     118        ExpParams.e_repro_cost_diplo = 0.3;
     119
     120        //nutrients
     121        ExpParams.nutrientsize = scale(10);
     122        ExpParams.energy_nut = 100 * Math.pow(ExpParams.nutrientsize, 3);
     123        ExpParams.nutrientPop = 10;
     124        ExpParams.feedrate = 0.0025;
     125        nutrientenergywaiting = ExpParams.energy_nut;
    96126        ExpState.totaltestedcr = 0;
    97127        ExpState.nutrient = "";
    98         nutrientenergywaiting = ExpParams.feede0;
    99         reprocounter = 0;
    100 
    101         ExpParams.worldsize = 50;
    102         World.wrldwat = 50;
    103         World.wrldsiz = ExpParams.worldsize;
    104         World.wrldbnd = 1;
    105128}
    106129
    107130@include "standard_placement.inc"
     131
     132function scale(x)
     133{
     134        return x*0.025;
     135}
     136
     137function getProperty(gen, prop_id)
     138{
     139        var ploid = "haplo";
     140        if (gen == 1) ploid = "diplo";
     141        return ExpParams.[prop_id + "_" + ploid];
     142}
     143
     144function addInitialForam(species, i)
     145{
     146        var geno = createForamGenotype(0, species, 0);
     147        var cr = Populations[0].add(geno);
     148        cr.name = "Initial creature" + species + "_" + i;
     149        placeCreatureRandomly(cr, 0, 0);
     150        cr.energy0 = getProperty(0, "energies0");
     151        cr.energy = cr.energy0;
     152        setGenotype({"opt" : 0, "cr" : cr, "species" : species});
     153}
    108154
    109155function onExpInit()
     
    112158        Populations[1].clear();
    113159
    114         for (var i = 0; i < ExpParams.popsize; i++)
    115         {
    116                 var cr = Populations[0].add(ExpParams.genh);
    117                 cr.name = "Initial creature" + i;
    118                 placeCreatureRandomly(cr, 0, 0);
    119                 cr.energy0 = ExpParams.energy0h;
    120                 cr.energy = cr.energy0;
    121                 cr.user1 = {"minenergy" : ExpParams.minenerg[0], "minage": ExpParams.minage[0]};
    122                 cr.user2 = {"Va" : ExpParams.energy0h, "gen" : 0, "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit" : ExpParams.energy0h};
    123         }
     160        for (var i = 0; i < ExpParams.foramPop; i++)
     161        {
     162                addInitialForam(0, i); 
     163                addInitialForam(1, i);
     164        }
     165        o = Populations[0][0].getMechPart(0).orient.clone();
    124166        ExpState.totaltestedcr = 0;
    125         nutrientenergywaiting = ExpParams.feede0;
     167        nutrientenergywaiting = ExpParams.energy_nut;
    126168}
    127169
     
    191233// -------------------------------- foram begin -----------------------------------
    192234
    193 function createForamGenotype(radius)
    194 {
    195         return "//0\np:sh=1,sx=" + radius + ",sy=" + radius + ",sz=" + radius + ", rz=3.14159265358979";
    196 }
    197 
    198235function onForamsBorn(cr)
    199236{
     
    214251}
    215252
    216 function readyToRepro(cr)
    217 {
    218         cr.signals.add("repro");
    219         cr.signals[0].power = 1;
    220 }
    221 
    222 function foramMove(cr)
    223 {
    224         //TODO moving inside sediment?
    225         cr.moveAbs(cr.pos_x, cr.pos_y, 0); //adjustment in z axis
    226 
     253function foramGrow(cr, chamber_num)
     254{
     255        var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num);
     256        var cr2 = Populations[0].add(geno);
     257
     258        cr2.energy0 = cr.energy;
     259        cr2.energy = cr2.energy0;
     260
     261        setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2});
     262        cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z);
     263
     264        Populations[0].delete(cr);
     265}
     266
     267function stepToNearest(cr, range)
     268{
    227269        var p = cr.getMechPart(0);
    228         var n = cr.signals.receiveSet("nutrient", ExpParams.nutrient_range);
     270        var n = cr.signals.receiveSet("nutrient", ExpParams.zone2_range);
    229271
    230272        //if signals are received find the source of the nearest
    231273        if (n.size > 0)
    232274        {
    233 
    234275                var i;
    235276                var mp;
     
    255296                mindistvec.scale(-0.08);
    256297                cr.localDrive = mindistvec;
    257         }
    258 
     298                return 1;
     299        }
     300       
    259301        else
     302                return 0;
     303}
     304
     305function moveEnergyDec(cr)
     306{
     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;
     314        }
     315}
     316
     317function foramMove(cr)
     318{
     319        //TODO moving inside sediment?
     320
     321        //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
     340        {
     341                var moved = stepToNearest(ExpParams.zone2_range); //TODO weighted sum of distance and energy
     342                if (moved==1)
     343                {
     344                        moveEnergyDec(cr);
     345                        return;
     346                }
     347        }
     348
     349        //no nutrients in zone 2
     350
     351        var hibernation = 0;
     352        if (cr.user2["gen"] == 0) hibernation =  cr.user1["hibernation"];
     353        else hibernation =  cr.user1[0]["hibernation"];
     354        //hibernation
     355        if (hibernation == 1)
     356        {
     357                moveEnergyDec(cr);
     358                cr.user2["hibernated"] = 1;
     359                cr.localDrive = XYZ.new(0,0,0);
     360        }
     361        //random move
     362        else
    260363        {
    261364                cr.localDrive = (0.1 * Math.rnd01, 0.1 * Math.rnd01, 0);
    262         }
    263 }
    264 
    265 function foramGrow(cr)
    266 {
    267                 //TODO how size is related to the energy?
    268                 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);
    269                 var geno = createForamGenotype(cr.user2["rsize"]);
    270                 if (cr.user2["gen"] == 1)
     365                moveEnergyDec(cr);
     366        }
     367}
     368
     369function 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        }
     380}
     381
     382function onForamsStep(cr)
     383{
     384        cr.getMechPart(0).orient.set(o);
     385
     386        if (deathConditions(cr) == 1)
     387        {
     388                Populations[0].kill(cr);
     389                return;
     390        }
     391
     392        foramMove(cr);
     393
     394        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]))       
    271398                {
    272                         geno += "\nn:p=0,d=\"S\""; //TODO why initial genotypes are not used as defined in ExpParams?
    273                         //TODO maybe it would be nice if they rotated so the "S" would show where they are going (direction/intention)
    274                 }
    275                 var cr2 = Populations[0].add(geno);
    276                 cr2.energy0 = cr.energy;
    277                 cr2.energy = cr2.energy0;
    278                 setGenotype(cr2, cr.user1, cr.user2);
    279                 cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z);
    280 
    281                 Populations[0].delete(cr);
    282 }
    283 
    284 function onForamsStep(cr)
    285 {
    286         foramMove(cr);
    287 
    288         //energy costs depend on size
    289         if (cr.energy > 100)
    290         {
    291                 //TODO energy costs dependent on size
    292                 // cr.energy_m = cr.user2["Va"]/cr.user2["vinit"];
    293         }
    294 
    295         //TODO lifespan should not be used, it is set to 0 with every growth_step
    296         if (cr.lifespan >= ExpParams.max_age)
    297         {
    298                 //TODO what is max age value? should there be one
    299                 //Populations[0].kill(cr);
    300                 //return;
    301         }
    302 
    303         //foram growth
    304         if (cr.lifespan == cr.user2["growth_step"])
    305         {
    306                 foramGrow(cr);
    307         }
     399                        foramGrow(cr, cr.numparts);
     400                        return;
     401                }       
     402        }
     403
     404        foramReproduce(cr);     
     405}
     406
     407function deathConditions(cr)
     408{
     409        if ((cr.energy <= ExpParams.e_death_level) || (Math.rnd01 < ExpParams.hunted_prob))
     410                return 1;
    308411        else
    309         {
    310                 var properSize = 0;
    311 
    312                 if (cr.user2["gen"] == 0)
    313                 {
    314                         properSize = cr.user2["Va"] >= cr.user1["minenergy"];
    315                 }
    316                 else
    317                 {
    318                         properSize = cr.user2["Va"] >= cr.user1[0]["minenergy"]; //TODO gene selection
    319                 }
    320 
    321                 //if creature has proper age and cytoplasm amount
    322                 if ( properSize )
    323                 {
    324                         //reproduce with probability repro_prob
    325                         if (Math.rnd01 <= ExpParams.repro_prob)
    326                         {
    327                                 readyToRepro(cr);
    328                         }
    329                 }
    330                 if ( properSize && (cr.signals.receive("repro") > 0))
    331                 {
    332                         readyToRepro(cr);
    333                 }
    334         }
     412                return 0;
    335413}
    336414
     
    345423}
    346424
    347 function setGenotype(cr, new_user1, new_user2)
    348 {
    349         cr.user2 = {"Va" : new_user2["Va"], "gen" : new_user2["gen"], "growth_step" : new_user2["growth_step"], "rsize" : new_user2["rsize"], "vinit": new_user2["vinit"]};
    350         if (cr.user2["gen"] == 0)
    351         {
    352                 cr.user1 = {"minenergy" : new_user1["minenergy"], "minage": new_user1["minage"] };
    353         }
    354         else if (cr.user2["gen"] == 1)
    355         {
    356                 cr.user1 = [ {"minenergy" : new_user1[0]["minenergy"], "minage": new_user1[0]["minage"] }, {"minenergy" : new_user1[1]["minenergy"], "minage": new_user1[1]["minage"] }];
    357         }
    358 
    359 }
    360 
    361425// --------------------------------foram end -------------------------------------
    362426
    363427// -------------------------------- nutrient begin --------------------------------
    364428
     429function createNutrientGenotype(nutrientsize, zone1_range)
     430{
     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";
     432}
     433
    365434function onNutrientsStep(cr)
    366435{
    367         cr.moveAbs(cr.pos_x % ExpParams.worldsize, cr.pos_y % ExpParams.worldsize, 0.5);
     436        cr.moveAbs(cr.pos_x % ExpParams.world_size, cr.pos_y % ExpParams.world_size, -ExpParams.zone1_range+0.5);
    368437}
    369438
    370439function addNutrient()
    371440{
    372         var cr = Populations[1].add(ExpParams.nutrientgen);
     441        var cr = Populations[1].add(createNutrientGenotype(ExpParams.nutrientsize, ExpParams.zone1_range));
    373442
    374443        cr.name = "Nutrients";
    375444        cr.idleen = 0;
    376         cr.energy0 = ExpParams.feede0;
     445        cr.energy0 = ExpParams.energy_nut;
    377446        cr.energy = cr.energy0;
    378447        cr.signals.add("nutrient");
     
    380449        cr.signals[0].value = cr.getMechPart(0);
    381450
    382         placeRandomlyNotColliding(cr);
    383 }
    384 
    385 function onNutrientsCollision()
    386 {
    387         if (Collision.Creature2.user2 != null)
    388         {
    389                 var e = Collision.Part2.ing * ExpParams.feedtrans;
    390                 //Simulator.print("transferring "+e+" from "+Collision.Creature1.name+" to "+Collision.Creature2.name+" ("+Collision.Creature2.energy+")");
    391                 Collision.Creature1.energy_m = Collision.Creature1.energy_m + e;
    392                 Collision.Creature2.energy_p = Collision.Creature2.energy_p + e;
    393                 Collision.Creature2.user2["Va"] = float(Collision.Creature2.user2["Va"]) + float(e);
     451        placeCreatureRandomly(cr, 0, 0);
     452}
     453
     454function nutrientGrowth()
     455{
     456        nutrientenergywaiting = nutrientenergywaiting + ExpParams.feedrate;
     457        if (nutrientenergywaiting > ExpParams.energy_nut)
     458        {
     459                for (var i = 0; i < ExpParams.nutrientPop; i++)
     460                {
     461                        addNutrient();
     462                }
     463
     464                nutrientenergywaiting = 0.0;
     465                Simulator.checkpoint();
    394466        }
    395467}
     
    397469// -------------------------------- nutrient end --------------------------------
    398470
     471// -------------------------------- step begin --------------------------------
     472
     473function onStep()
     474{
     475        if (ExpParams.logging == 1)
     476        {
     477                createStatistics();
     478        }
     479
     480        nutrientGrowth();
     481
     482        //reproduction --------------------------------------------
     483        reprocounter += 1;
     484        if (reprocounter > ExpParams.repro_time)
     485        {
     486                reprocounter = 0;
     487                reproduce_parents(0);
     488                reproduce_parents(1);
     489        }
     490
     491        //check for extinction -----------------------------------------------
     492        if (Populations[0].size == 0)
     493        {
     494                if (ExpParams.autorestart)
     495                {
     496                        Simulator.print("no more creatures, restarting...");
     497                        onExpInit();
     498                }
     499                else
     500                {
     501                        Simulator.print("no more creatures, stopped.");
     502                        Simulator.stop();
     503                }
     504        }
     505}
     506
     507function createStatistics()
     508{       
     509        var number_ploidy = [0, 0];
     510        var number_species = [0, 0];
     511        var e_inc = [0.0, 0.0];
     512        var e_nut = 0.0;
     513
     514        for (var i = 0; i < Populations[0].size; i++)
     515        {
     516                var cr = Populations[0].get(i);
     517                var gen = cr.user2["gen"];
     518                number_ploidy[gen] = number_ploidy[gen] + 1;
     519                var species = cr.user2["species"];
     520                number_species[species] = number_species[species] + 1;
     521                e_inc[gen] = e_inc[gen] + cr.energy;
     522        }
     523
     524        for (var i = 0; i < Populations[1].size; i++)
     525        {
     526                var cr = Populations[1].get(i);
     527                e_nut += cr.energy;
     528        }
     529
     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");
     537}
    399538
    400539function log(tolog, fname)
     
    410549}
    411550
    412 
    413 
     551// -------------------------------- step end --------------------------------
    414552
    415553@include "standard_events.inc"
     
    418556
    419557prop:
    420 id:max_age
    421 name:Maximal age
    422 type:d 100 1000 500
    423 group:Foraminifera
    424 
    425 prop:
    426 id:worldsize
     558id:e_repro_cost_haplo
     559name:cost of reproduction
     560type:f 0.1 0.9 0.5
     561group:Foraminifera
     562
     563prop:
     564id:e_repro_cost_diplo
     565name:cost of reproduction
     566type:f 0.1 0.9 0.3
     567group:Foraminifera
     568
     569prop:
     570id:chamber_proculus_haplo
     571name:size of proculus
     572type:f
     573group:Foraminifera
     574
     575prop:
     576id:chamber_proculus_diplo
     577name:size of proculus
     578type:f
     579group:Foraminifera
     580
     581prop:
     582id:chamber_difference_haplo
     583name:difference in size between subsequent chambers
     584type:f
     585group:Foraminifera
     586
     587prop:
     588id:chamber_difference_diplo
     589name:difference in size between subsequent chambers
     590type:f
     591group:Foraminifera
     592
     593prop:
     594id:hunted_prob
     595name:Probability of being hunted
     596type:f 0 1 0
     597group:Forminifera
     598
     599prop:
     600id:zone1_range
     601name:Zone 1 range
     602type:f 0 200
     603group:Foraminifera
     604
     605prop:
     606id:zone2_range
     607name:Zone 2 range
     608type:f 0 3000
     609group:Foraminifera
     610
     611prop:
     612id:colors
     613name:Haploid and diploid colors
     614type:x
     615group:Foraminifera
     616
     617prop:
     618id:min_repro_energ_haplo
     619name:Min reproduction energy of forams
     620type:f
     621group:Foraminifera
     622
     623prop:
     624id:min_repro_energ_diplo
     625name:Min reproduction energy of forams
     626type:f
     627group:Foraminifera
     628
     629prop:
     630id:repro_prob
     631name:Probability of reproduction
     632type:f 0 1 0.8
     633group:Foraminifera
     634
     635prop:
     636id:energies0_haplo
     637name:Energy of offspring from diploid forams
     638type:f
     639group:Foraminifera
     640
     641prop:
     642id:energies0_diplo
     643name:Energy of offspring from diploid forams
     644type:f
     645group:Foraminifera
     646
     647prop:
     648id:energy_hib
     649name:Energy used for hibernation during one step
     650type:f 0 1 0.001
     651group:Foraminifera
     652
     653prop:
     654id:energy_move
     655name:Energy used for movement during one step
     656type:f 0 20 0.001
     657group:Foraminifera
     658
     659prop:
     660id:min_vol
     661name:Minimal volume for reproduction
     662type:f 100 900 100
     663group:Foraminifera
     664
     665prop:
     666id:max_size
     667name:Maximal size
     668type:d 1 10 5
     669group:Foraminifera
     670
     671prop:
     672id:foramPop
     673name:Initial forams population size
     674type:d 1 1000 100
     675group:Foraminifera
     676
     677prop:
     678id:crossprob
     679name:Crossover probability
     680type:f 0 1 0
     681group:Foraminifera
     682
     683prop:
     684id:mutationprob
     685name:Mutation probability
     686type:f 0 1 0
     687group:Foraminifera
     688
     689prop:
     690id:e_death_level
     691name:Level of energy ... death
     692type:f 0
     693group:Foraminifera
     694
     695
     696prop:
     697id:e_meta
     698name:Idle metabolism
     699type:f 0 1
     700group:Energy
     701help:Each stick consumes this amount of energy in one time step
     702
     703prop:
     704id:feedrate
     705name:Feeding rate
     706type:f 0 100
     707group:Energy
     708help:How fast energy is created in the world
     709
     710prop:
     711id:energy_nut
     712name:Nutrients's energy
     713type:f 0 1000
     714group:Energy
     715
     716prop:
     717id:feedtrans
     718name:Ingestion multiplier
     719type:f 0 100
     720group:Energy
     721
     722prop:
     723id:nutrientsize
     724name:Nutrients's size
     725type:f 0.1
     726group:Energy
     727
     728prop:
     729id:e_meta
     730name:Idle metabolism
     731type:f 0 1
     732group:Energy
     733help:Each stick consumes this amount of energy in one time step
     734
     735prop:
     736id:feedrate
     737name:Feeding rate
     738type:f 0 100
     739group:Energy
     740help:How fast energy is created in the world
     741
     742prop:
     743id:feedtrans
     744name:Ingestion multiplier
     745group:Energy
     746type:f 0 100
     747
     748prop:
     749id:nutrientsize
     750name:Nutrients's size
     751group:Energy
     752type:f 0.1
     753
     754prop:
     755id:nutrientPop
     756name:Nutrients population size
     757group:Energy
     758type:d 1 1000 10
     759
     760
     761prop:
     762id:world_size
    427763name:World size
    428764type:d 10 1000 20
    429 
    430 prop:
    431 id:growth_step
    432 name:Growth step
    433 type:d -1 10000 1000
    434 group:Foraminifera
    435 help:You can turn off growth by setting this param to -1
    436 
    437 prop:
    438 id:rads
    439 name:Haploid and diploid radius
    440 type:x
    441 group:Foraminifera
    442 
    443 prop:
    444 id:minage
    445 name:Min reproduction age of forams
    446 type:x
    447 group:Foraminifera
    448 
    449 prop:
    450 id:minenerg
    451 name:Min reproduction energy of forams
    452 type:x
    453 group:Foraminifera
    454 
    455 prop:
    456 id:nutrient_range
    457 name:Range of nutrient smell
    458 type:d 0 10000 10000
     765group:World
     766
     767prop:
     768id:stress
     769name:Environmental stress
     770type:d 0 1 1
     771group:World
     772
     773prop:
     774id:repro_trigger
     775name:Reproduction trigger
     776type:d 0 1 1
     777group:World
     778
    459779
    460780prop:
     
    462782name:Time before reproduction
    463783type:d 0 1000
    464 
    465 prop:
    466 id:popsize
    467 name:Initial forams population size
    468 type:d 1 1000 100
    469 group:Foraminifera
    470 
    471 prop:
    472 id:energy0h
    473 name:Number of offspring from haploid forams
    474 type:d
    475 group:Foraminifera
    476 
    477 prop:
    478 id:energy0d
    479 name:Number of offspring from diploid forams
    480 type:d
    481 group:Foraminifera
    482 
    483 prop:
    484 id:repro_prob
    485 name:Probability of reproduction
    486 type:f 0 1 0.9
    487 group:Foraminifera
    488 
    489 prop:
    490 id:crossprob
    491 name:Crossover probability
    492 type:f 0 1 0
    493 group:Foraminifera
    494 
    495 prop:
    496 id:mutationprob
    497 name:Mutation probability
    498 type:f 0 1 0
    499 group:Foraminifera
    500 
    501 prop:
    502 id:genh
    503 name:Initial genotype of haploid forams
    504 type:s 1
    505 group:Foraminifera
    506 
    507 prop:
    508 id:gend
    509 name:Initial genotype of diploid forams
    510 type:s 1
    511 group:Foraminifera
    512784
    513785prop:
     
    522794-1   = just above the bottom~
    523795
    524 prop:
    525 id:e_meta
    526 name:Idle metabolism
    527 type:f 0 1
    528 group:Energy
    529 help:Each stick consumes this amount of energy in one time step
    530 
    531 prop:
    532 id:feedrate
    533 name:Feeding rate
    534 type:f 0 100
    535 group:Energy
    536 help:How fast energy is created in the world
    537 
    538 prop:
    539 id:feede0
    540 name:Nutrients's energy
    541 group:Energy
    542 type:f 0 1000
    543 
    544 prop:
    545 id:feedtrans
    546 name:Ingestion multiplier
    547 group:Energy
    548 type:f 0 100
    549 
    550 prop:
    551 id:nutrientgen
    552 name:Nutrients's genotype
    553 group:Energy
    554 type:s 1
    555 
    556 prop:
    557 id:nutrientsize
    558 name:Nutrients's size
    559 group:Energy
    560 type:f 0.1
    561 
    562 prop:
    563 id:nutrientPop
    564 name:Nutrients population size
    565 group:Energy
    566 type:d 1 1000 10
    567 
    568796state:
    569797id:nutrient
Note: See TracChangeset for help on using the changeset viewer.