/*====================================================/ / Name: generate.cc / / Author: Joy Schoenberger / / Date: April 2002 / / Purpose: Implementation of genetic algorithm for / / CS710 Masters research project: Genetic / / Algorithms for Musical Composition with / / Coherency Through Genotype / /====================================================*/ #include "composer.h" #include #include #include #include "rvgs.h" int main(int argc, char *argv[]){ bool badUsage = false; double scoreLimit = 0.85; int numGenerations = 50; int numComposers = 60; long seed = -1; int numMutations = 0; bool display = false; for(int i = 1;i=i\n"); } if((seed > 1018600000)||(seed<1)){ printf("Please select a seed from 1 to 1018600000\n"); badUsage = true; } i++; }//end else if -s flag else if(strcmp(argv[i],"-l")==0){ if(i 1)){ printf("Please select a limit between 0 and 1\n"); badUsage = true; } else numGenerations = 500; i++; }//end if -l flag else if(strcmp(argv[i],"-p")==0){ if(i 0){ for(int i = 0;i maxScore) maxScore = rawScores[comp]; scoreSum+= rawScores[comp]; } avgScore = scoreSum/(double)numComposers; printf("\n Average score = %6.4f\n",avgScore); printf(" Max Score = %6.4f\n",maxScore); if(gen>0){ improvement = avgScore-prevAvg; printf(" Improvement = %6.4f\n",improvement); imSum+=improvement; } prevAvg = avgScore; fflush(stdout); // Convert raw scores to fitness value double fitness[numComposers]; double mult = 1.5; //factor by which max fitness favored over average double slope = ((mult-1)*avgScore)/(maxScore-avgScore); double constVal = (avgScore*(maxScore-mult*avgScore))/(maxScore-avgScore); double fitAvg = 0.0; double fitSum = 0.0; /* printf("slope = %4.3f\n",slope); printf("constVal = %4.3f\n",constVal); */ for(int i = 0;i=rand){ parents[k++] = pick; selFreq[pick]-=1.0; } } // Randomly pair up parents for reproduction bool mated[numComposers]; int parentsLeft = numComposers; int osIndex = 0; for(int i = 0;i0){ int mom, dad, index; pick = Equilikely(1,parentsLeft); index = 0; for(int pindex = 1;pindex 0) printf("Number of mutations: %d\n",numMutations); if(display){ printf("Song by the best Composer of the last generation:\n"); int compIndex = 0; for(int i = 0;i