void PrintChromo(int bits[]) { printf("I AM PRINTCHROMO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); int buffer[(int)(BITLENGTH / GENELENGTH)]; int numberOfElements = ParseBits(bits, buffer); int p; for(p = 0; p < numberOfElements; p++) { PrintGeneSymbol(buffer[p]); } }
//---------------------------------PrintChromo--------------------------------------- // // decodes and prints a chromo to screen //----------------------------------------------------------------------------------- void PrintChromo(string bits){ //holds decimal values of gene sequence int buffer[(int)(CHROMO_LENGTH / GENE_LENGTH)]; //parse the bit string int num_elements = ParseBits(bits, buffer); for (int i=0; i<num_elements; i++) { PrintGeneSymbol(buffer[i]); } return; }
float AssignFitness(int bits[], float target) { int buffer[(int)(BITLENGTH / GENELENGTH)]; int numberOfElements = ParseBits(bits, buffer); float result = 0.0f; int i; for(i = 0; i < numberOfElements - 1; i += 2) { switch (buffer[i]) { case 10: result += buffer[i + 1]; break; case 11: result -= buffer[i + 1]; break; case 12: result *= buffer[i + 1]; break; case 13: result /= buffer[i + 1]; break; default: break; } } if(debug == 0) { printf("\n result %f \n", result); } if(result == (float)target) { return 999.0f; } else { return 1/(float)fabs((double)(target - result)); } }
//---------------------------------AssignFitness-------------------------------------- // // given a string of bits and a target value this function will calculate its // representation and return a fitness score accordingly //------------------------------------------------------------------------------------ float AssignFitness(string bits, int target_value) { //holds decimal values of gene sequence int buffer[(int)(CHROMO_LENGTH / GENE_LENGTH)]; int num_elements = ParseBits(bits, buffer); // ok, we have a buffer filled with valid values of: operator - number - operator - number.. // now we calculate what this represents. float result = 0.0f; for (int i=0; i < num_elements-1; i+=2){ switch (buffer[i]){ case 10: result += buffer[i+1]; break; case 11: result -= buffer[i+1]; break; case 12: result *= buffer[i+1]; break; case 13: result /= buffer[i+1]; break; }//end switch } // Now we calculate the fitness. First check to see if a solution has been found // and assign an arbitarily high fitness score if this is so. if(result == (float)target_value){ return 999.0f; }else{ return 1/(float)fabs((double)(target_value - result)); } }