www.pudn.com > dgpc.rar > lang.cfc
#define PRINT_CASES 1
void PrintCases(void) {
int case_num;
int index;
for (case_num = 0; case_num < MAX_NUM_FIT_CASES; case_num++) {
for (index = 0; index < fitness_cases[case_num].length; index++) {
printf("%d", fitness_cases[case_num].string[index]);
}
printf("\t\t %d\n", fitness_cases[case_num].valid);
}
}
/* Ends in 101 */
/*
int IsValid(int string[], int length) {
if (length < 3) return FALSE;
if ((string[length-3] == 1) &&
(string[length-2] == 0) &&
(string[length-1] == 1))
return TRUE;
return FALSE;
}
*/
/* 4 0s then 4 1s */
int IsValid(int string[], int length) {
int i;
int num_zeros = 0;
int num_ones = 0;
int got_3_zeros = 0;
for (i = 0; i < length; i++) {
if (string[i] == 0) {
num_ones = 0;
num_zeros++;
if (num_zeros == 4) got_3_zeros = TRUE;;
}
else {
num_zeros = 0;
num_ones++;
if ((num_ones == 4) && got_3_zeros) return TRUE;
}
}
return FALSE;
}
/* (10)* */
/*
int IsValid(int string[], int length) {
int match = 1;
int i;
if ((length % 2) != 0) return FALSE;
for (i = 0; i < length; i++) {
if (string[i] != match) return FALSE;
match = (match + 1) % 2;
}
return TRUE;
}
*/
/* pairwise, an even sum of 01s and 10s */
/*
int IsValid(int string[], int length) {
int last = 2;
int i;
int num = 0;
for (i = 0; i < length; i++) {
if (string[i] == 0) {
if (last == 1) num++;
last = 0;
}
else {
if (last == 0) num++;
last = 1;
}
}
if ((num % 2) == 0) return TRUE;
return FALSE;
}
*/
void Alternate(int case_num, int length) {
int index;
int next = 1;
for (index = 0; index < length; index++) {
fitness_cases[case_num].string[index] = next;
next = (next + 1) %2;
}
}
/* even 0s and 1s */
/*
int IsValid(int string[], int length) {
int i;
int num_ones = 0;
int num_zeros = 0;
for (i = 0; i < length; i++) {
if (string[i] == 0) num_zeros++;
else num_ones++;
}
if ((num_zeros % 2) != 0) return FALSE;
if ((num_ones % 2) != 0) return FALSE;
return TRUE;
}
*/
/* #1s - #0s = 3n */
/*
int IsValid(int string[], int length) {
int i;
int diff;
int num_ones = 0;
int num_zeros = 0;
for (i = 0; i < length; i++) {
if (string[i] == 0) num_zeros++;
else num_ones++;
}
diff = num_ones - num_zeros;
if (diff < 0) diff = -diff;
if ((diff % 3) == 0) return TRUE;
else return FALSE;
}
*/
/* TL3 - no odd 0s after odd 1s */
/*
int IsValid(int string[], int length) {
int i;
int last = 0;
int cur0 = 0;
int cur1 = 0;
for (i = 0; i < length; i++) {
if (string[i] == 1) {
if (last == 0) {
if ((cur1 == 1) && (cur0 == 1)) return FALSE;
cur1 = 1;
}
else cur1 = (cur1 + 1) % 2;
last = 1;
}
else {
if (last == 1) cur0 = 1;
else cur0 = (cur0 + 1) %2;
last = 0;
}
}
if ((last == 0) && (cur1 == 1) && (cur0 == 1)) return FALSE;
return TRUE;
}
*/
/* TL7- 0*1*0*1* */
/*
int IsValid(int string[], int length) {
int i;
int state = 0;
for (i = 0; i < length; i++) {
if ((state == 0) && (string[i] == 1)) state = 1;
else if ((state == 1) && (string[i] == 0)) state = 2;
else if ((state == 2) && (string[i] == 1)) state = 3;
else if ((state == 3) && (string[i] == 0)) return FALSE;
}
return TRUE;
}
*/
int Equal(int string1[], int string2[], int length) {
int i;
for (i = 0; i < length; i++) {
if (string1[i] != string2[i])
return FALSE;
}
return TRUE;
}
int Unique(int case_num) {
int i;
for (i = 0; i < case_num; i++) {
if (fitness_cases[i].length == fitness_cases[case_num].length) {
if (Equal( fitness_cases[i].string,
fitness_cases[case_num].string,
fitness_cases[case_num].length)) {
return FALSE;
}
}
}
return TRUE;
}
void CreateFitnessCases (Population *pop)/*;*/ /*funcdef*/
{
int case_num;
int length;
int index;
int num_valid = 0;
int num_invalid = 0;
long int temp = GetSeed(pop);
int alternate = 0;
/* SetSeed(pop, (long)43); */
SetSeed(pop, (long)60);
case_num = 0;
while (case_num < MAX_NUM_FIT_CASES) {
length = RandomInt(MAX_STRING_LENGTH) + 1;
fitness_cases[case_num].length = length;
/*alternate = (num_invalid == (MAX_NUM_FIT_CASES / 2));*/
if (!alternate) {
for (index = 0; index < length; index++) {
fitness_cases[case_num].string[index] = RandomInt(2);
}
}
else {
Alternate(case_num, length);
}
fitness_cases[case_num].valid = IsValid(fitness_cases[case_num].string,
fitness_cases[case_num].length);
if (fitness_cases[case_num].valid) {
if (num_valid < (MAX_NUM_FIT_CASES/2)) {
if (Unique(case_num)) {
num_valid++;
case_num++;
}
}
}
else {
if (num_invalid < (MAX_NUM_FIT_CASES/2)) {
if (Unique(case_num)) {
num_invalid++;
case_num++;
}
}
}
}
/*PrintCases();*/
SetSeed(pop, (long)temp);
}
/*
fitness_cases[0].length = 4;
fitness_cases[0].string[0] = INPUT_B;
fitness_cases[0].string[1] = INPUT_B;
fitness_cases[0].string[2] = INPUT_A;
fitness_cases[0].string[3] = INPUT_B;
fitness_cases[0].string[4] = INPUT_X;
fitness_cases[0].string[5] = INPUT_X;
fitness_cases[0].string[6] = INPUT_X;
fitness_cases[0].string[7] = INPUT_X;
fitness_cases[0].valid = TRUE;
fitness_cases[1].length = 8;
fitness_cases[1].string[0] = INPUT_B;
fitness_cases[1].string[1] = INPUT_A;
fitness_cases[1].string[2] = INPUT_B;
fitness_cases[1].string[3] = INPUT_A;
fitness_cases[1].string[4] = INPUT_B;
fitness_cases[1].string[5] = INPUT_B;
fitness_cases[1].string[6] = INPUT_A;
fitness_cases[1].string[7] = INPUT_B;
fitness_cases[1].valid = TRUE;
fitness_cases[2].length = 8;
fitness_cases[2].string[0] = INPUT_B;
fitness_cases[2].string[1] = INPUT_B;
fitness_cases[2].string[2] = INPUT_A;
fitness_cases[2].string[3] = INPUT_B;
fitness_cases[2].string[4] = INPUT_B;
fitness_cases[2].string[5] = INPUT_B;
fitness_cases[2].string[6] = INPUT_A;
fitness_cases[2].string[7] = INPUT_B;
fitness_cases[2].valid = TRUE;
fitness_cases[3].length = 7;
fitness_cases[3].string[0] = INPUT_B;
fitness_cases[3].string[1] = INPUT_B;
fitness_cases[3].string[2] = INPUT_A;
fitness_cases[3].string[3] = INPUT_B;
fitness_cases[3].string[4] = INPUT_B;
fitness_cases[3].string[5] = INPUT_A;
fitness_cases[3].string[6] = INPUT_B;
fitness_cases[3].string[7] = INPUT_X;
fitness_cases[3].valid = TRUE;
fitness_cases[4].length = 8;
fitness_cases[4].string[0] = INPUT_A;
fitness_cases[4].string[1] = INPUT_A;
fitness_cases[4].string[2] = INPUT_A;
fitness_cases[4].string[3] = INPUT_A;
fitness_cases[4].string[4] = INPUT_B;
fitness_cases[4].string[5] = INPUT_B;
fitness_cases[4].string[6] = INPUT_A;
fitness_cases[4].string[7] = INPUT_B;
fitness_cases[4].valid = TRUE;
fitness_cases[5].length = 8;
fitness_cases[5].string[0] = INPUT_A;
fitness_cases[5].string[1] = INPUT_B;
fitness_cases[5].string[2] = INPUT_A;
fitness_cases[5].string[3] = INPUT_A;
fitness_cases[5].string[4] = INPUT_B;
fitness_cases[5].string[5] = INPUT_B;
fitness_cases[5].string[6] = INPUT_A;
fitness_cases[5].string[7] = INPUT_A;
fitness_cases[5].valid = FALSE;
fitness_cases[6].length = 3;
fitness_cases[6].string[0] = INPUT_B;
fitness_cases[6].string[1] = INPUT_A;
fitness_cases[6].string[2] = INPUT_B;
fitness_cases[6].string[3] = INPUT_X;
fitness_cases[6].string[4] = INPUT_X;
fitness_cases[6].string[5] = INPUT_X;
fitness_cases[6].string[6] = INPUT_X;
fitness_cases[6].string[7] = INPUT_X;
fitness_cases[6].valid = FALSE;
fitness_cases[7].length = 5;
fitness_cases[7].string[0] = INPUT_B;
fitness_cases[7].string[1] = INPUT_B;
fitness_cases[7].string[2] = INPUT_A;
fitness_cases[7].string[3] = INPUT_B;
fitness_cases[7].string[4] = INPUT_B;
fitness_cases[7].string[5] = INPUT_X;
fitness_cases[7].string[6] = INPUT_X;
fitness_cases[7].string[7] = INPUT_X;
fitness_cases[7].valid = FALSE;
fitness_cases[8].length = 8;
fitness_cases[8].string[0] = INPUT_B;
fitness_cases[8].string[1] = INPUT_B;
fitness_cases[8].string[2] = INPUT_A;
fitness_cases[8].string[3] = INPUT_A;
fitness_cases[8].string[4] = INPUT_B;
fitness_cases[8].string[5] = INPUT_B;
fitness_cases[8].string[6] = INPUT_A;
fitness_cases[8].string[7] = INPUT_A;
fitness_cases[8].valid = FALSE;
fitness_cases[9].length = 4;
fitness_cases[9].string[0] = INPUT_A;
fitness_cases[9].string[1] = INPUT_A;
fitness_cases[9].string[2] = INPUT_A;
fitness_cases[9].string[3] = INPUT_A;
fitness_cases[9].string[4] = INPUT_X;
fitness_cases[9].string[5] = INPUT_X;
fitness_cases[9].string[6] = INPUT_X;
fitness_cases[9].string[7] = INPUT_X;
fitness_cases[9].valid = FALSE;
*/