Ignore:
Timestamp:
03/13/16 02:45:09 (8 years ago)
Author:
sz
Message:
  • use arrow syntax (dict->key instead of dictkey?)
  • use creature/genotype.data instead of user1/2/3 (user1=>genes, user2->lifeparams, user3=reticulopodiacreature)
File:
1 edited

Legend:

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

    r474 r476  
    5353function setGenotype(mode)
    5454{
    55         if (mode["opt"] == 0) //initial
    56         {
    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" : mode["species"]};
    58                 mode["cr"].user2 = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0,  "hibernated" : 0, "species" : mode["species"], "reproduce" : 0, "dir" : randomDir()};
    59         }
    60         else if (mode["opt"]  == 1) //child
    61         {
    62                 mode["cr"].user2 = {"max_energy_level" : getProperty(1 - mode["parent_user2"]["gen"],"energies0"), "gen" : 1 - mode["parent_user2"]["gen"],  "hibernated" : 0, "species" : mode["parent_user2"]["species"], "reproduce" : 0, "dir" : randomDir()};
    63                 mode["cr"].user1 = mode["parent_user1"];
     55        if (mode->opt == 0) //initial
     56        {
     57                mode->cr.data->genes = {"min_repro_energies" : [max_chamber_energ[0][getProperty(0, "min_repro_energ")], max_chamber_energ[1][getProperty(1, "min_repro_energ")]], "hibernation" : mode->species};
     58                mode->cr.data->lifeparams = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0,  "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir()};
     59        }
     60        else if (mode->opt  == 1) //child
     61        {
     62                mode->cr.data->lifeparams = {"max_energy_level" : getProperty(1 - mode->parent_lifeparams->gen,"energies0"), "gen" : 1 - mode->parent_lifeparams->gen,  "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir()};
     63                mode->cr.data->genes = mode->parent_genes;
    6464        }
    6565        else //grow
    6666        {
    67                 mode["cr"].user1 = mode["parent_user1"];
    68                 mode["cr"].user2 = mode["parent_user2"];
     67                mode->cr.data->genes = mode->parent_genes;
     68                mode->cr.data->lifeparams = mode->parent_lifeparams;
    6969        }
    7070}
     
    7272function reproduce_haploid(parent, parent2, clone)
    7373{       
    74         var number, energy0, new_user1, gen;
     74        var number, energy0, new_genes, gen;
    7575        if (clone == 1)
    7676        {
    7777                energy0 = getProperty(0,"energies0");
    7878                number = (( 1 - getProperty(1, "e_repro_cost")) * parent.energy) / energy0;
    79                 new_user1 = parent.user1;
    80                 parent.user2["gen"] = 1 - parent.user2["gen"]; //because of reversal of "gen" in createOffspring function
    81                 gen = parent.user2["gen"];
     79                new_genes = parent.data->genes;
     80                parent.data->lifeparams->gen = 1 - parent.data->lifeparams->gen; //because of reversal of "gen" in createOffspring function
     81                gen = parent.data->lifeparams->gen;
    8282        }
    8383        else
    8484        {
    8585                energy0 = getProperty(1,"energies0");
    86                 number = (((1 - getProperty(parent.user2["gen"], "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.user2["gen"], "e_repro_cost"))) * parent2.energy)) / energy0;
    87                 new_user1 = [parent.user1, parent2.user1];
    88                 gen = 1 - parent.user2["gen"];
     86                number = (((1 - getProperty(parent.data->lifeparams->gen, "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent2.energy)) / energy0;
     87                new_genes = [parent.data->genes, parent2.data->genes];
     88                gen = 1 - parent.data->lifeparams->gen;
    8989        }
    9090
     
    9393        for (var j = 0; j < number; j++)
    9494        {
    95                 createOffspring(createForamGenotype(gen, parent.user2["species"], 0), energy0, new_user1, parent.user2);
     95                createOffspring(createForamGenotype(gen, parent.data->lifeparams->species, 0), energy0, new_genes, parent.data->lifeparams);
    9696        }
    9797}
     
    100100{
    101101        var energy0 = getProperty(0,"energies0");
    102         var number = ((1 - (getProperty(parent.user2["gen"], "e_repro_cost"))) * parent.energy) / energy0;
     102        var number = ((1 - (getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent.energy) / energy0;
    103103
    104104        Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0);
     
    116116                for (var k = 0; k < 2; k++)
    117117                {
    118                         createOffspring(createForamGenotype(1 - parent.user2["gen"], parent.user2["species"], 0), energy0, parent.user1[0], parent.user2);
     118                        createOffspring(createForamGenotype(1 - parent.data->lifeparams->gen, parent.data->lifeparams->species, 0), energy0, parent.data->genes[0], parent.data->lifeparams);
    119119                }
    120120
     
    136136                for (var i = pop.size-1; i >= 0; i--)
    137137                {
    138                         if (pop[i].user2["reproduce"] == 1 && pop[i].user2["species"] == species)
     138                        if (pop[i].data->lifeparams->reproduce == 1 && pop[i].data->lifeparams->species == species)
    139139                        {
    140                                 if ((pop[i].user2["gen"]==1) || ((pop[i].user2["gen"]==0) && ExpParams.stress == 0))
     140                                if ((pop[i].data->lifeparams->gen==1) || ((pop[i].data->lifeparams->gen==0) && ExpParams.stress == 0))
    141141                                {
    142142                                        continue;
     
    169169       
    170170       
    171         if (cr.user2["gen"] == 1)
     171        if (cr.data->lifeparams->gen == 1)
    172172        {
    173173                reproduce_diploid(cr);
     
    183183                if (cr.signals.size == 0)
    184184                {
    185                         cr.signals.add("repro"+cr.user2["species"]);
     185                        cr.signals.add("repro"+cr.data->lifeparams->species);
    186186                        cr.signals[0].power = 1;
    187187                }
    188188                reproduced = 0;
    189                 cr.user2["reproduce"] = 1;
     189                cr.data->lifeparams->reproduce = 1;
    190190        }
    191191
     
    201201function print_repro_info(cr)
    202202{
    203         Simulator.print("Reproduced " + cr.user2["gen"] + " of species " + cr.user2["species"] + " energy: " + cr.energy);
     203        Simulator.print("Reproduced " + cr.data->lifeparams->gen + " of species " + cr.data->lifeparams->species + " energy: " + cr.energy);
    204204}
    205205
     
    211211        var reproduced = 0;
    212212
    213         if (cr.user2["gen"] == 0)
    214         {
    215                 properEnergy = ( cr.energy >= cr.user1["min_repro_energies"][cr.user2["gen"]] );
     213        if (cr.data->lifeparams->gen == 0)
     214        {
     215                properEnergy = ( cr.energy >= cr.data->genes->min_repro_energies[cr.data->lifeparams->gen] );
    216216        }
    217217        else
    218218        {
    219                 properEnergy = ( cr.energy >= cr.user1[0]["min_repro_energies"][cr.user2["gen"]] ); //TODO gene selection
     219                properEnergy = ( cr.energy >= cr.data->genes[0]->min_repro_energies[cr.data->lifeparams->gen] ); //TODO gene selection
    220220        }
    221221
     
    228228                        reproduced = readyToRepro(cr);
    229229                }
    230                 else if (cr.signals.receive("repro"+cr.user2["species"]) > 0)
     230                else if (cr.signals.receive("repro"+cr.data->lifeparams->species) > 0)
    231231                {
    232232                        reproduced = readyToRepro(cr);
     
    239239        {
    240240                cr.signals.clear();
    241                 cr.user2["reproduce"] = 0;
     241                cr.data->lifeparams->reproduce = 0;
    242242        }
    243243
     
    247247function crossover(parent, gene)
    248248{
    249         var tmp = parent.user1[0][gene];
    250         parent.user1[0][gene] = parent.user1[1][gene];
    251         parent.user1[1][gene] = tmp;
    252 }
    253 
    254 function createOffspring(geno, energy, parent_user1, parent_user2)
     249        var tmp = parent.data->genes[0][gene];
     250        parent.data->genes[0][gene] = parent.data->genes[1][gene];
     251        parent.data->genes[1][gene] = tmp;
     252}
     253
     254function createOffspring(geno, energy, parent_genes, parent_lifeparams)
    255255{
    256256        var cr = Populations[0].add(geno);
    257257        cr.energy0 = energy;
    258258        cr.energy = cr.energy0;
    259         setGenotype({"cr" : cr, "parent_user1" : parent_user1, "parent_user2" : parent_user2, "opt" : 1});
     259        setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1});
    260260        placeRandomlyNotColliding(cr);
    261261}
Note: See TracChangeset for help on using the changeset viewer.