Changeset 430 for experiments


Ignore:
Timestamp:
09/08/15 01:03:24 (9 years ago)
Author:
oriona
Message:

new reticulopodia range implemented, visualization of reticulopodia

Location:
experiments/frams/foraminifera/data/scripts
Files:
3 edited

Legend:

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

    r429 r430  
    1313max_energy_level - maximum energy level reached so far
    1414gen - generation: 0 haploid, 1 diploid
    15 species - species: 0 not hibernating 1 hibernating
     15species - species: 0 hibernating 1 not hibernating
    1616hibernated - 0/1 foram isn't/is hibernated
    1717reproduce - 0/1 foram isn't/is ready for reproduction
     
    3535global o;
    3636global max_chamber_energ;
    37 
     37global dir_change;
    3838
    3939@include "foraminifera.inc"
     
    6969        //pop.othermask = 0x10002;
    7070
     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       
    7181        //world
    7282        SignalView.mode = 1;
    73         ExpParams.world_size = 100;
    74         World.wrldwat = ExpParams.world_size;
     83        ExpParams.world_size = scale(40000);
     84        World.wrldwat = 200;
    7585        World.wrldsiz = ExpParams.world_size;
    7686        World.wrldbnd = 1;
     
    8292
    8393        //reproduction
    84         ExpParams.foramPop = 3;
     94        ExpParams.foramPop = 10;       
    8595        ExpParams.crossprob = 0.4;
    8696        ExpParams.mutationprob = 0.2;
     
    8999
    90100        //morphology
     101        dir_change = 500;
     102        ExpParams.zone1_range = scale(5000);
     103        ExpParams.zone2_range = scale(8000);
    91104        init_chambers();
    92         ExpParams.chamber_proculus_haplo = scale(60);
     105        ExpParams.chamber_proculus_haplo = scale(50);
    93106        ExpParams.chamber_difference_haplo = 0.0;
    94107        ExpParams.chamber_proculus_diplo = scale(20);
     
    100113                {
    101114                        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 
    103115                }                                 
    104116        }
    105         ExpParams.zone1_range = scale(250);
    106         ExpParams.zone2_range = scale(5000);
    107117
    108118        //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;
    118130        ExpParams.e_repro_cost_diplo = 0.3;
    119131
     
    121133        ExpParams.nutrientsize = scale(10);
    122134        ExpParams.energy_nut = 100 * Math.pow(ExpParams.nutrientsize, 3);
    123         ExpParams.nutrientPop = 10;
    124         ExpParams.feedrate = 0.0025;
     135        ExpParams.nutrientPop = 1;
     136        ExpParams.feedrate = 0.1;
    125137        nutrientenergywaiting = ExpParams.energy_nut;
    126138        ExpState.totaltestedcr = 0;
     
    157169        Populations[0].clear();
    158170        Populations[1].clear();
     171        Populations[2].clear();
    159172
    160173        for (var i = 0; i < ExpParams.foramPop; i++)
     
    223236        ExpState.nutrient = tmpvec;
    224237        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
    226239
    227240        for (var cr in Populations[0])
     
    233246// -------------------------------- foram begin -----------------------------------
    234247
     248function 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
     253function lastChamberNum(cr)
     254{
     255        return cr.numparts-1;
     256}
     257
    235258function onForamsBorn(cr)
    236259{
    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        }
    238266}
    239267
     
    253281function foramGrow(cr, chamber_num)
    254282{
    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);
    256284        var cr2 = Populations[0].add(geno);
    257285
     
    261289        setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2});
    262290        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        }
    264297        Populations[0].delete(cr);
    265298}
     
    279312                var mindist = 100000000000;
    280313                var mindistvec = null;
     314                var eating = 0;
    281315
    282316                for (i = 0; i < n.size; i++)
    283317                {
    284                         mp = n[i].value;
     318                        mp = n[i].value.getMechPart(0);
    285319                        distvec.set(mp.pos);
    286320                        distvec.sub(p.pos);
    287321                        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)
    289331                        {
    290332                                mindist = dist;
     
    293335                }
    294336
    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
    298345                return 1;
    299346        }
     
    305352function moveEnergyDec(cr)
    306353{
    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)];
    314357        }
    315358}
     
    320363
    321364        //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?
    340368        {
    341369                var moved = stepToNearest(ExpParams.zone2_range); //TODO weighted sum of distance and energy
    342370                if (moved==1)
    343                 {
    344                         moveEnergyDec(cr);
     371                {
    345372                        return;
    346373                }
     
    348375
    349376        //no nutrients in zone 2
    350 
    351377        var hibernation = 0;
    352378        if (cr.user2["gen"] == 0) hibernation =  cr.user1["hibernation"];
     
    355381        if (hibernation == 1)
    356382        {
     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;
    357393                moveEnergyDec(cr);
    358                 cr.user2["hibernated"] = 1;
    359                 cr.localDrive = XYZ.new(0,0,0);
    360         }
    361         //random move
     394        }
     395}
     396
     397function 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
     411function reverseHib(cr)
     412{
     413        if (cr.user2["hibernated"] == 1)
     414        {
     415                setForamMeta(cr, cr.user2["gen"]); //unhibernate
     416        }
    362417        else
    363418        {
    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"];
    380422}
    381423
     
    383425{
    384426        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"));
    385429
    386430        if (deathConditions(cr) == 1)
     
    392436        foramMove(cr);
    393437
     438        var repro = foramReproduce(cr);
     439        if (repro == 1)
     440        {
     441                return;
     442        }
     443
    394444        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)]))   
    398448                {
    399                         foramGrow(cr, cr.numparts);
    400                         return;
     449                        foramGrow(cr, lastChamberNum(cr));
    401450                }       
    402         }
    403 
    404         foramReproduce(cr);     
     451        }       
    405452}
    406453
     
    415462function onForamsDied(cr)
    416463{
     464        if (ExpParams.showRet == 1)
     465        {
     466                Populations[2].delete(cr.user3);
     467        }
    417468        //fossilization
    418469        var geno = GenePools[0].add(cr.genotype);
     
    429480function createNutrientGenotype(nutrientsize, zone1_range)
    430481{
    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";
    432483}
    433484
     
    447498        cr.signals.add("nutrient");
    448499
    449         cr.signals[0].value = cr.getMechPart(0);
     500        cr.signals[0].value = cr;
    450501
    451502        placeCreatureRandomly(cr, 0, 0);
     
    503554                }
    504555        }
     556        if (Simulator.stepNumber == 150000)
     557                Simulator.stop();
    505558}
    506559
    507560function createStatistics()
    508561{       
    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]];
    512564        var e_nut = 0.0;
    513565
     
    516568                var cr = Populations[0].get(i);
    517569                var gen = cr.user2["gen"];
    518                 number_ploidy[gen] = number_ploidy[gen] + 1;
    519570                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;
    522574        }
    523575
     
    528580        }
    529581
    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");
    537587}
    538588
    539589function log(tolog, fname)
    540590{
    541         var f = File.appendDirect(fname, "forams data");
     591        var f = File.appendDirect(fname, "forams data"); 
    542592        f.writeString("" + Simulator.stepNumber);
    543593        for (var  i = 0; i < tolog.size; i++)
     
    554604
    555605~
     606
     607prop:
     608id:showRet
     609name:Show reticulopodia
     610type:d 0 1 0
     611group:Foraminifera
    556612
    557613prop:
     
    734790id:world_size
    735791name:World size
    736 type:d 10 1000 20
     792type:d 10 10000 20
    737793group:World
    738794
  • experiments/frams/foraminifera/data/scripts/foraminifera.inc

    r422 r430  
    55{
    66        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,"] ];
    2828}
    2929
     
    3131{
    3232        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];
    3434
    3535        chamber_num = Math.min(chamber_num, chambers[species].size - 1);
     
    3838        {
    3939                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];
    4141        }
    4242
     
    4545                geno += "\n" +  "j:"+ i +", "+ (i+1) +", sh=1";
    4646        }
     47
    4748        if (species == 1) geno += "\nn:p=0,d=\"S\"";
    4849
     
    5455        if (mode["opt"] == 0) //initial
    5556        {
    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"]};
    5758                mode["cr"].user2 = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0,  "hibernated" : 0, "species" : mode["species"], "reproduce" : 0};
    5859        }
     
    7576        {
    7677                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;
    7879                new_user1 = parent.user1;
    7980                parent.user2["gen"] = 1 - parent.user2["gen"]; //because of reversal of "gen" in createOffspring function
     
    8384        {
    8485                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;
    8687                new_user1 = [parent.user1, parent2.user1];
    8788                gen = 1 - parent.user2["gen"];
    8889        }
    8990
    90         Simulator.print("number of offspring: " + number);
     91        Simulator.print("haploid number of offspring: " + number + " energ0: " + energy0);
    9192
    9293        for (var j = 0; j < number; j++)
     
    99100{
    100101        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);
    104105
    105106        for (var j = 0; j < number / 2; j++)
     
    149150                                        parent2 = pop[i];
    150151                                } 
    151                                 else
     152                                if (parent1 != null && parent2 != null)
    152153                                {
    153154                                        reproduce_haploid(parent1, parent2, 0);
     
    158159                                        parent1 = null;
    159160                                        parent2 = null;
    160                                 }
    161                
     161                                }       
    162162                        }
    163163                }
     
    204204}
    205205
     206
     207
    206208function foramReproduce(cr)
    207209{
     
    231233                }
    232234                if (reproduced == 1)
    233                                 return;
     235                                return 1;
    234236        }
    235237
     
    239241                cr.user2["reproduce"] = 0;
    240242        }
     243
     244        return 0;
    241245}
    242246
  • experiments/frams/foraminifera/data/scripts/foraminifera.show

    r423 r430  
    2121        GLDisplay.minfps = 10;
    2222
    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]};
    2424}
    2525
     
    2727{
    2828        ExpParams.[param_id] = Params[param_id][ShowParams.[param_id]];
    29 }
    30 
    31 function ShowParams_nutrientPop_set()
    32 {
    33         setShowParam("nutrientPop");
    3429}
    3530
     
    5752
    5853prop:
    59 id:nutrientPop
    60 name:Nutrients amount
    61 type:d 0 2 1 ~5~10~15
    62 
    63 prop:
    6454id:feedrate
    6555name:Feeding rate
Note: See TracChangeset for help on using the changeset viewer.