ドリフトのアレル頻度変化のグラフ作成
ごく大雑把なつくりのドリフトシミュレーションソース
package popGenet;public class Drift {
/**
* @param args
*/
int initpopsize;
double mutrate;
int numgen;
//int popsizepattern;//0 constant, 1 exponential
double expcoeff;
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int initpopsize = 100;
double mutrate = 0.1;
int numgen =100;
double expcoef=1;
int initvarnum=1;
Drift df=new Drift(initpopsize,numgen,initvarnum,expcoef);}
public Drift(int initpopsize_,int numgen_,int initvarnum,double expcoef_){
initpopsize=initpopsize_;
mutrate=0;
numgen=numgen_;
//popsizepattern=0;
expcoeff=expcoef_;
int[] ch = new int[initpopsize];
for(int i=0;i<initvarnum;i++){
ch[i]=1;
}
int x =10000000;
Utils.MersenneTwisterFast mz=new Utils.MersenneTwisterFast((int)(Math.random()*x));
for(int i=0;i<numgen;i++){
double af=0;
for(int j=0;j<ch.length;j++){
if(ch[j]==1){
af++;
}
}
af/=(double)ch.length;
int popsize = (int)(ch.length*expcoeff);
System.out.println("popsize\t"+popsize + "\taf\t"+af);
int[] tmpch=new int[popsize];
for(int j=0;j<tmpch.length;j++){
double r=mz.nextDouble();
if(r<af){
tmpch[j]=1;
}
}
ch = StatUtils.MiscUtil.DeepCopyInt1(tmpch);
}
}
public Drift(int initpopsize_,int numgen_,int initvarnum){
expcoeff=0;
Drift df = new Drift(initpopsize_,numgen_,initvarnum,expcoeff);
}}