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.expdef

    r475 r476  
    66
    77Technical information:
    8 Genes and parameter values which control reproduction are stored in user1 and user2 fields.
    9 
    10 user1:
     8Genes and parameter values which control reproduction are stored in data->genes and data->lifeparams fields.
     9
     10genes:
    1111genes which are not encoded in Ff genotype:
    1212min_repro_energy - Minimum energy necessary for reproduction
    1313hibernation - Defines foram behavior in the case of no nutrients
    1414
    15 user2:
     15lifeparams:
    1616Physiological parameters of foraminifera:
    1717max_energy_level - maximum energy level reached so far
     
    220220                {
    221221                        //cr.rotate(0,0,Math.rnd01*Math.twopi);
    222                         if ((typeof(g.user1) == "Vector") && (g.user1.size >= 3))
     222                        if ((typeof(g.data->genes) == "Vector") && (g.data->genes.size >= 3))
    223223                        {
    224224                                // [x,y,energy]
    225                                 cr.move(g.user1[0] - cr.center_x, g.user1[1] - cr.center_y, 0);
    226                                 cr.energy = g.user1[2];
     225                                cr.move(g.data->genes[0] - cr.center_x, g.data->genes[1] - cr.center_y, 0);
     226                                cr.energy = g.data->genes[2];
    227227                        }
    228228                        else
     
    278278        {
    279279                var ret = Populations[2].add("//0\np:sh=3,sx=0.01,sy="+ExpParams.zone1_range+",sz="+ExpParams.zone1_range+",ry=1.57,vr=1.0,1.0,1.0");
    280                 cr.user3 = ret;
     280                cr.data->reticulopodiacreature = ret;
    281281        }
    282282}
     
    299299        var has_ret = 0;
    300300
    301         if (cr.user3 != null)
    302         {
    303                 if (Populations[2].findUID(cr.user3.uid) != null)
     301        if (cr.data->reticulopodiacreature != null)
     302        {
     303                if (Populations[2].findUID(cr.data->reticulopodiacreature.uid) != null)
    304304                {
    305305                        has_ret = 1;
     
    312312function foramGrow(cr, chamber_num)
    313313{
    314         if ((chamber_num+1) < chambers[cr.user2["species"]].size)
    315         {
    316                 var geno = createForamGenotype(cr.user2["gen"], cr.user2["species"], chamber_num+1);
     314        if ((chamber_num+1) < chambers[cr.data->lifeparams->species].size)
     315        {
     316                var geno = createForamGenotype(cr.data->lifeparams->gen, cr.data->lifeparams->species, chamber_num+1);
    317317                var cr2 = Populations[0].add(geno);
    318318
     
    320320                cr2.energy = cr2.energy0;
    321321
    322                 setGenotype({"cr" : cr2, "parent_user1" : cr.user1, "parent_user2" : cr.user2, "opt" : 2});
     322                setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : 2});
    323323                cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z);
    324                 setForamMeta(cr2, cr2.user2["gen"]);
     324                setForamMeta(cr2, cr2.data->lifeparams->gen);
    325325
    326326                if (visualization(cr))
    327327                {
    328                         Populations[2].delete(cr.user3);
     328                        Populations[2].delete(cr.data->reticulopodiacreature);
    329329                }
    330330                Populations[0].delete(cr);
     
    362362                                }
    363363                        }
    364                         else if (eating == 0 && cr.user2["hibernated"] == 0 && dist < mindist)
     364                        else if (eating == 0 && cr.data->lifeparams->hibernated == 0 && dist < mindist)
    365365                        {
    366366                                mindist = dist;
     
    369369                }
    370370
    371                 if (!eating && cr.user2["hibernated"] == 0)
     371                if (!eating && cr.data->lifeparams->hibernated == 0)
    372372                {
    373373                        mindistvec.normalize();
     
    388388function moveEnergyDec(cr)
    389389{
    390         if (cr.user2["hibernated"] == 0)
    391         {
    392                 //cr.energy_m += (ExpParams.energy_move * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)])*ExpParams.secPerStep;
     390        if (cr.data->lifeparams->hibernated == 0)
     391        {
     392                //cr.energy_m += (ExpParams.energy_move * max_chamber_energ[cr.data->lifeparams->gen][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.data->lifeparams->gen].size)-1)])*ExpParams.secPerStep;
    393393                cr.energy_m += (ExpParams.energy_move * cr.energy)*ExpParams.secPerStep;
    394394        }
     
    413413        //no nutrients in zone 2
    414414        var hibernation = 0;
    415         if (cr.user2["gen"] == 0) hibernation =  cr.user1["hibernation"];
    416         else hibernation =  cr.user1[0]["hibernation"];
     415        if (cr.data->lifeparams->gen == 0) hibernation =  cr.data->genes->hibernation;
     416        else hibernation =  cr.data->genes[0]->hibernation;
    417417        //hibernation
    418418        if (hibernation == 1)
     
    424424        else if (cr.lifespan%(dir_change/ExpParams.secPerStep) == 0)
    425425        {
    426                 cr.user2["dir"] = randomDir();
    427                 cr.localDrive = cr.user2["dir"];
     426                cr.data->lifeparams->dir = randomDir();
     427                cr.localDrive = cr.data->lifeparams->dir;
    428428                moveEnergyDec(cr);
    429429        }
    430430        else
    431431        {
    432                 cr.localDrive = cr.user2["dir"];
     432                cr.localDrive = cr.data->lifeparams->dir;
    433433        }
    434434}
     
    450450        cr2.energy_m = cr2.energy_m + e;
    451451        cr1.energy_p = cr1.energy_p + e;
    452         if (cr1.user2["hibernated"] == 1)
     452        if (cr1.data->lifeparams->hibernated == 1)
    453453        {
    454454                reverseHib(cr1);
     
    458458function reverseHib(cr)
    459459{
    460         if (cr.user2["hibernated"] == 1)
    461         {
    462                 setForamMeta(cr, cr.user2["gen"]); //unhibernate
     460        if (cr.data->lifeparams->hibernated == 1)
     461        {
     462                setForamMeta(cr, cr.data->lifeparams->gen); //unhibernate
    463463        }
    464464        else
    465465        {
    466                 //cr.idleen = (ExpParams.energy_hib * max_chamber_energ[cr.user2["gen"]][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.user2["gen"]].size)-1)])*ExpParams.secPerStep; //hibernate
     466                //cr.idleen = (ExpParams.energy_hib * max_chamber_energ[cr.data->lifeparams->gen][Math.min(lastChamberNum(cr), (max_chamber_energ[cr.data->lifeparams->gen].size)-1)])*ExpParams.secPerStep; //hibernate
    467467                cr.idleen = (ExpParams.energy_hib * cr.energy)*ExpParams.secPerStep; //hibernate
    468468        }
    469         cr.user2["hibernated"] = 1 - cr.user2["hibernated"];
     469        cr.data->lifeparams->hibernated = 1 - cr.data->lifeparams->hibernated;
    470470}
    471471
     
    475475        if (visualization(cr))
    476476        {
    477                 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"));
     477                cr.data->reticulopodiacreature.moveAbs(cr.center_x-ExpParams.zone1_range, cr.center_y-ExpParams.zone1_range, cr.center_z-ExpParams.zone1_range-getProperty(cr.data->lifeparams->gen, "chamber_proculus"));
    478478        }
    479479
     
    492492        }
    493493
    494         cr.user2["max_energy_level"] = Math.max(cr.energy, cr.user2["max_energy_level"]);
     494        cr.data->lifeparams->max_energy_level = Math.max(cr.energy, cr.data->lifeparams->max_energy_level);
    495495        if  (lastChamberNum(cr) <= chambers[0].size-1)
    496496        {
    497                 if ((cr.user2["max_energy_level"] >= max_chamber_energ[cr.user2["gen"]][lastChamberNum(cr)]))   
     497                if ((cr.data->lifeparams->max_energy_level >= max_chamber_energ[cr.data->lifeparams->gen][lastChamberNum(cr)]))         
    498498                {
    499499                        foramGrow(cr, lastChamberNum(cr));
     
    504504function deathConditions(cr)
    505505{
    506         if ((cr.energy <= getProperty(cr.user2["species"],"e_death_level")) || (Math.rnd01 < ExpParams.hunted_prob))
     506        if ((cr.energy <= getProperty(cr.data->lifeparams->species,"e_death_level")) || (Math.rnd01 < ExpParams.hunted_prob))
    507507                return 1;
    508508        else
     
    514514        if (visualization(cr))
    515515        {
    516                 Populations[2].delete(cr.user3);
     516                Populations[2].delete(cr.data->reticulopodiacreature);
    517517        }
    518518        //fossilization
    519519        var geno = GenePools[0].add(cr.genotype);
    520         geno.user1 = cr.user1;
    521         geno.user2 = cr.user2;
     520        geno.data->genes = cr.data->genes;
     521        geno.data->lifeparams = cr.data->lifeparams;
    522522        if (ExpParams.logging == 1) Simulator.print("\"" + cr.name + "\" died...");
    523523        ExpState.totaltestedcr++;
     
    555555                var nutsize = ExpParams.nutrientsize*10;
    556556                var nut = Populations[2].add("//0\np:sh=2,sx="+nutsize+",sy="+nutsize+",sz="+nutsize+",ry=1.5,vr=0.0,1.0,0.0");
    557                 cr.user3 = nut;
     557                cr.data->reticulopodiacreature = nut;
    558558                nut.moveAbs(cr.pos_x-1.5*nutsize, cr.pos_y-1.5*nutsize, 0.5);
    559559        }
     
    564564        if (visualization(cr))
    565565        {
    566                 Populations[2].delete(cr.user3);
     566                Populations[2].delete(cr.data->reticulopodiacreature);
    567567        }
    568568}
     
    635635        {
    636636                var cr = Populations[0].get(i);
    637                 var gen = cr.user2["gen"];
    638                 var species = cr.user2["species"];
     637                var gen = cr.data->lifeparams->gen;
     638                var species = cr.data->lifeparams->species;
    639639
    640640                number[species][gen] = number[species][gen] + 1;
Note: See TracChangeset for help on using the changeset viewer.