- Timestamp:
- 03/27/16 00:12:20 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.inc
r486 r487 28 28 } 29 29 30 function createForam Genotype(gen, species, chamber_num)30 function createForamMorphology(morphotype, gen, chamber_num) 31 31 { 32 32 var rad = getProperty(gen, "chamber_proculus"); 33 var geno = "//0\np:" + chambers[ species][0] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen];34 35 chamber_num = Math.min(chamber_num, chambers[ species].size - 1);33 var geno = "//0\np:" + chambers[morphotype][0] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen]; 34 35 chamber_num = Math.min(chamber_num, chambers[morphotype].size - 1); 36 36 37 37 for (var i = 0; i < chamber_num; i++) 38 38 { 39 39 rad = getProperty(gen, "chamber_proculus") + getProperty(gen, "chamber_difference") * (i + 1); 40 geno += "\n" + "p:" + chambers[ species][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen];40 geno += "\n" + "p:" + chambers[morphotype][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen]; 41 41 } 42 42 … … 46 46 } 47 47 48 if ( species== 0) geno += "\nn:p=0,d=\"S\"";48 if (morphotype == 0) geno += "\nn:p=0,d=\"S\""; 49 49 50 50 return geno; … … 55 55 if (mode->opt == 0) //initial 56 56 { 57 mode->cr.data->genes = {"min_repro_energies" : [energyFromVolume(max_chamber_volume[0][getProperty(0, "min_repro_energ")],0), energyFromVolume(max_chamber_volume[1][getProperty(1, "min_repro_energ")],0)], "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(), "chamber_growth" : -1, "division_time" : -1};57 mode->cr.data->genes = String.deserialize(String.serialize(mode->genes)); 58 mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : 0, "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1}; 59 59 } 60 60 else if (mode->opt == 1) //child 61 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(), "chamber_growth" : -1, "division_time" : -1};63 mode->cr.data->genes = mode->parent_genes;62 mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : 1 - mode->parent_lifeparams->gen, "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1}; 63 mode->cr.data->genes = String.deserialize(String.serialize(mode->parent_genes)); 64 64 } 65 65 else //grow … … 81 81 //Simulator.print("parent: " + parent_energy + " result: " + result + " number " + number); 82 82 return {"energy" : result, "number" : number}; 83 } 84 85 function getEnergy0(radius) 86 { 87 return energyFromVolume(micronsToFrams(radius),1); 83 88 } 84 89 … … 88 93 if (clone == 1) 89 94 { 90 var offspring = gametsDivision(parent.energy,get Property(0,"energies0"));95 var offspring = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0",0)[0])); 91 96 energy0 = offspring->energy; 92 97 number = offspring->number; … … 97 102 else 98 103 { 99 var offspring1 = gametsDivision(parent.energy,get Property(1,"energies0"));100 var offspring2 = gametsDivision(parent2.energy,get Property(1,"energies0"));104 var offspring1 = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0", 0)[1])); 105 var offspring2 = gametsDivision(parent2.energy,getEnergy0(getGene(parent2,"energies0", 0)[1])); 101 106 energy0 = (offspring1->energy+offspring2->energy); 102 107 number = ExpProperties.gametSuccessRate*(offspring1->number+offspring2->number)/2; … … 109 114 for (var j = 0; j < number; j++) 110 115 { 111 createOffspring(createForam Genotype(gen, parent.data->lifeparams->species, 0), energy0, new_genes, parent.data->lifeparams);116 createOffspring(createForamMorphology(getGene(parent, "morphotype", 0), gen, 0), energy0, new_genes, parent.data->lifeparams); 112 117 } 113 118 } … … 115 120 function reproduce_diploid(parent) 116 121 { 117 var energy0 = getProperty(0,"energies0");122 var energy0 =getEnergy0( getGene(parent,"energies0", 0)[0]); 118 123 var number = ((1 - (getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent.energy) / energy0; 119 124 … … 132 137 for (var k = 0; k < 2; k++) 133 138 { 134 createOffspring(createForam Genotype(1 - parent.data->lifeparams->gen, parent.data->lifeparams->species, 0), energy0, parent.data->genes[0], parent.data->lifeparams);139 createOffspring(createForamMorphology(getGene(parent, "morphotype", 0), 1 - parent.data->lifeparams->gen, 0), energy0, parent.data->genes[0], parent.data->lifeparams); 135 140 } 136 141 … … 236 241 } 237 242 238 239 240 243 function foramReproduce(cr) 241 244 { 242 var properEnergy = 0; 243 var reproduced = 0; 244 245 if (cr.data->lifeparams->gen == 0) 246 { 247 properEnergy = ( cr.energy >= cr.data->genes->min_repro_energies[cr.data->lifeparams->gen] ); 248 } 249 else 250 { 251 properEnergy = ( cr.energy >= cr.data->genes[0]->min_repro_energies[cr.data->lifeparams->gen] ); //TODO gene selection 252 } 245 var properEnergy = cr.energy >= energyFromVolume(max_chamber_volume[0][getGene(cr, "min_repro_energies",0)[cr.data->lifeparams->gen]],0); 246 var reproduced = 0; 253 247 254 248 //if creature has proper energy … … 289 283 cr.energy0 = energy; 290 284 cr.energy = cr.energy0; 291 setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1 });285 setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1, "energy0" : cr.energy0}); 292 286 placeRandomlyNotColliding(cr); 293 287 }
Note: See TracChangeset
for help on using the changeset viewer.