ドリフトのアレル頻度変化のグラフ作成



ごく大雑把なつくりのドリフトシミュレーションソース


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);

}

}