#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define POPSIZE 500
#define maximization 1
#define minimization 2
#define cmax 100
#define cmin 0
#define length1 10
#define length2 10
#define chromlength length1 + length2 // 染色体度
int functionmode = maximization; // 我们这里用遗传算法求最大值
int popsize; // 种群大小
int maxgeneragion; // 最大世代数
double pc; // 交叉率
double pm; // 变异率
struct individual{
char chrom[chromlength + 1];
double value;
double fitness; // 适应度
};
int generation; //世代数
int best_index;
int worst_index;
struct individual bestindividual; // 最佳个体
struct individual worstindividual; // 最差个体
struct individual currentbest;
struct individual population[POPSIZE];
void generateinitialpopulation();
void generatenextpopulation();
void evaluatepopulation();
long decodechromosome(char *, int, int);
void calculateobjectvalue();
void calculatefitnessvalue();
void findbestandworstindividual();
void performevolution();
void selectoperator();
void crossoveroperator();
void mutationoperator();
void input();
void outputtextrepot();
void generateinitialpopulation(){ // 种群初始化
int i, j;
for( i = 0; i < popsize; i++){
for( j = 0; j < chromlength; j++){
population[i].chrom[j] = (rand()%10 < 5) ? '0':'1';
}
population[i].chrom[chromlength] = '\0';
}
}
void generatenextpopulation(){ // 生成下一代
selectoperator();
crossoveroperator();
mutationoperator();
}
void evaluatepopulation(){ // 评价个体, 求最佳个体
calculateobjectvalue();
calculatefitnessvalue();
findbes