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

invalid index error fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.