/* Primer classification genetic algorithm. Using finite state machines to divide primers into two classes. Modified to perform hybridization. Modified to use two classifications. */ #include #include #include #include #include #include #include #include #include "vaut.h" //data file for training data #define TrainingData "primer2000.dat" //population size #define Popsize 600 //number of generations #define gen 1000 //number of runs #define runs 100 //maximum number of training examples #define texm 4200 //number of states per automaton #define NS 64 //number of goodies #define hybrids 100 //payoff[i][j] for automata of type i, state j int pay[2][3]={{ 1,-1, 0}, //pay[good,bad][good,bad,duh?] {-1, 1, 0} }; int nt; //number of training examples aut pop[Popsize]; //population of variable automata int fit[Popsize]; //fitness of population members int dx[Popsize]; //sorting index int tp[texm]; //primer type int *pr[texm]; //primer int pl[texm]; //primer length int bdex; //index of best classifier int CGAT(char c); //numerate a character void ReadData(char *fn); //read in a data set with NS sequences of length SL int fitness(aut &a); //compute the quality of an arrangement void initialize(int run); //initialize population void mutate(aut &a); //glue together the vaut primitive mutations void breed(); //breed configurations void report(ostream &aus); //report results void classification(aut &a, //run the classifier on the inputs ostream &aus ); main(){ int g,r; fstream best,aus; char fn[60]; srand48(121461); ReadData(TrainingData); best.open("classAut.dat",ios::out); for(r=0;r0){ tp[nt]=atoi(buf); j=0; for(i=0;i0){ hyb.open("BestClA.dat",ios::in); for(i=0;i> pop[i]; //cout << pop[i]; for(j=0;j<3;j++)hyb.getline(buf,255); } hyb.close(); } for(i=0;ifit[j])return(1); return(0); } void shuffle4(int *fit,int * dx,int popz){ int i,rp; for(i=0;iwh[pt])pt=j; C[tp[i]][pt]++; } for(i=0;i<2;i++){ for(j=0;j<2;j++){ sprintf(Q,"%5d ",C[i][j]); aus << Q; } aus << endl; } }