Ignore:
Timestamp:
08/01/15 16:32:10 (9 years ago)
Author:
oriona
Message:

invalid index error fixed

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

Legend:

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

    r416 r418  
    2424- added "S" receptor to visualize the difference between diplo and haplo generations
    2525- signal.value is a MechPart (a reference) so it does not have to be updated after changing the object location
    26 */
    27 
    28 /* TODO fix
    29 [ERROR] Population.kill: Invalid index 35 (allowed range is 0..34)
    30 [ERROR] Population.kill: ... called from reproduce_haploid()  <foraminifera.inc:54>
    31 [ERROR] Population.kill: ... called from onStep()  <foraminifera.inc:228>
    3226*/
    3327
     
    6963        pop.othermask = 0x10000;
    7064
     65        //TODO remove unused params
     66
    7167        //radius of the chamber
    7268        ExpParams.rads = [1.2, 0.6];
     69        //ExpParams.rads = [2, 2];
    7370        //inital genotypes
    7471        ExpParams.genh = "//0\np:sh=1,sx=" + ExpParams.rads[0] + ",sy=" + ExpParams.rads[0] + ",sz=" + ExpParams.rads[0] + ", rz=3.14159265358979";
     
    8077        ExpParams.feedtrans = 3;
    8178        ExpParams.creath = -0.99; //just above the bottom
    82         ExpParams.foodgen = "//0\np:sh=2,sx=0.1,sy=0.1,sz=0.1\nn:d=T,p=0";
     79        ExpParams.foodgen = "//0\np:sh=2,sx=0.1,sy=0.1,sz=0.1\nn:d=T,p=0"; //TODO food size as param
    8380        ExpParams.autorestart = 0;
    8481        ExpParams.psize = 10;
     
    10299
    103100        //grwoth speed in time steps
    104         ExpParams.growth_step = 50;
     101        ExpParams.growth_step = 50; //50
    105102
    106103        ExpState.totaltestedcr = 0;
     
    308305                else
    309306                {
    310                         properSize = cr.user2["Va"] >= cr.user1[0]["vamin"];
     307                        properSize = cr.user2["Va"] >= cr.user1[0]["vamin"]; //TODO gene selection
    311308                }
    312309
     
    333330        geno.user1 = cr.user1;
    334331        geno.user2 = cr.user2;
    335         Simulator.print("\"" + cr.name + "\" died...");
     332        if (ExpParams.logging == 1) Simulator.print("\"" + cr.name + "\" died...");
    336333        ExpState.totaltestedcr++;
    337334}
     
    422419id:growth_step
    423420name:Growth step
    424 type:d 10 10000 1000
     421type:d -1 10000 1000
    425422
    426423prop:
  • experiments/frams/foraminifera/data/scripts/foraminifera.inc

    r416 r418  
    44// -------------------------------- step begin --------------------------------
    55
    6 function reproduce_haploid(repro_list)
     6function reproduce_haploid(parent, parent2)
    77{
    8         var len = repro_list.size;
    9         if (len % 2 != 0) len = repro_list.size - 1;
     8        var number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd;
    109
    11         for (var i = 0; i < len - 2 ; i = i + 2)
     10        for (var j = 0; j < number; j++)
    1211        {
    13                 var parent = Populations[0].get(repro_list[i]);
    14                 var parent2 = Populations[0].get(repro_list[i + 1]);
    15 
    16                 var number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd;
    17 
    18                 for (var j = 0; j < number; j++)
    19                 {
    20                         createOffspring(ExpParams.gend, ExpParams.ofnumd, [parent.user1, parent2.user1], {"Va" : ExpParams.ofnumd, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": ExpParams.rads[1], "vinit": ExpParams.ofnumd}); //TODO genes from both generations in user1
    21                 }
     12                createOffspring(ExpParams.gend, ExpParams.ofnumd, [parent.user1, parent2.user1], {"Va" : ExpParams.ofnumd, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": ExpParams.rads[1], "vinit": ExpParams.ofnumd}); //TODO genes from both generations in user1
    2213        }
    23         killParents(repro_list);
    2414}
    2515
    26 function reproduce_diploid(repro_list)
     16function reproduce_diploid(parent)
    2717{
    28         for (var i = 0; i < repro_list.size; i++)
     18        var number = parent.user2["Va"] / ExpParams.ofnumh;
     19        for (var j = 0; j < number / 2; j++)
    2920        {
    30                 var parent = Populations[0].get(repro_list[i]);
    31 
    32                 if (parent.user2["gen"] != 1)
     21                var crossed = 0;
     22                //crossover
     23                if (Math.rnd01 < ExpParams.crossprob)
    3324                {
    34                         Simulator.print("gen: " + parent.user2["gen"]);
     25                        crossover(parent, "vamin");
     26                        crossed = 1;
    3527                }
    3628
    37                 if (parent.user2["gen"] == 1)
     29                for (var k = 0; k < 2; k++)
    3830                {
    39                         var number = parent.user2["Va"] / ExpParams.ofnumh;
    40                         for (var j = 0; j < number / 2; j++)
    41                         {
    42                                 var crossed = 0;
    43                                 //crossover
    44                                 if (Math.rnd01 < ExpParams.crossprob)
    45                                 {
    46                                         crossover(parent, "vamin");
    47                                         crossed = 1;
    48                                 }
     31                        createOffspring(ExpParams.genh, ExpParams.ofnumh, {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}, {"Va" : ExpParams.ofnumh, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit": ExpParams.ofnumh});
     32                }
    4933
    50                                 for (var k = 0; k < 2; k++)
    51                                 {
    52                                         createOffspring(ExpParams.genh, ExpParams.ofnumh, {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}, {"Va" : ExpParams.ofnumh, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit": ExpParams.ofnumh});
    53                                 }
    54 
    55                                 //reverse of crossover for fossilization
    56                                 if (crossed == 1)
    57                                 {
    58                                         crossover(parent, "vamin");
    59                                         crossed = 0;
    60                                 }
    61                         }
     34                //reverse of crossover for fossilization
     35                if (crossed == 1)
     36                {
     37                        crossover(parent, "vamin");
     38                        crossed = 0;
    6239                }
     40                       
    6341        }
    64         killParents(repro_list);
    6542}
    6643
     
    7249}
    7350
    74 function killParents(repro_list)
    75 {
    76         for (var j = 0; j < repro_list.size; j++)
    77         {
    78                 Populations[0].kill(repro_list[j]);
    79         }
    80 }
    8151
    8252function createOffspring(geno, energy, new_user1, new_user2)
     
    164134        {
    165135                reprocounter = 0;
    166                 var to_repro_h = [];
    167                 var to_repro_d = [];
    168                 for (var i = 0; i < Populations[0].size; i++)
     136                var parent1 = null;
     137                var parent2 = null;
     138                var pop = Populations[0];
     139                for (var i = pop.size-1; i >= 0; i--)
    169140                {
    170                         var cr = Populations[0].get(i);
    171                         if (cr.signals.size > 0)
    172                         {
    173                                 if (cr.user2["gen"] == 0)
     141                        if (pop[i].signals.size > 0)
     142                        {
     143                                if (pop[i].user2["gen"]==1)
    174144                                {
    175                                         to_repro_h.add(i);
     145                                        reproduce_diploid(pop[i]);
     146                                        pop.kill(i);
    176147                                }
    177                                 if (cr.user2["gen"] == 1)
     148                                else if (parent1 == null)
    178149                                {
    179                                         to_repro_d.add(i);
     150                                        parent1 = pop[i];
    180151                                }
    181                         }
    182                 }
    183                 if (to_repro_h.size > 1)
    184                 {
    185                         reproduce_haploid(to_repro_h);
    186                 }
    187                 if (to_repro_d.size > 0)
    188                 {
    189                         reproduce_diploid(to_repro_d);
     152                                else if (parent2 == null)
     153                                {
     154                                        parent2 = pop[i];
     155                                } 
     156                                else
     157                                {
     158                                        reproduce_haploid(parent1, parent2);
     159                                        pop.kill(parent1);
     160                                        pop.kill(parent2);
     161                                        parent1 = null;
     162                                        parent2 = null;
     163                                }
     164               
     165                        }
    190166                }
    191167        }
Note: See TracChangeset for help on using the changeset viewer.