资源简介

研一时候上智能优化算法课程,因为论文需要,通过遗传算法的代码自己改写的。通过插桩的方式,自动生成分支覆盖的测试用例,用来判断三角形的类型。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

/* Change any of these parameters to match your needs */
#define POPSIZE 500 /* 种群大小 */
#define MAXGENS 15
/* 最多生成的代数 */
#define NVARS 3 /* 变量的个数 */
#define PXOVER 0.8 /* 交叉的概率 */
#define PMUTATION 0.15 /* 突变的概率 */
#define TRUE 1
#define FALSE 0
#define branch_no  5/* 分支个数 */

int generation; /* 当前的代数 */
int cur_best; /* 最佳的个体 */
int all_branchfit[branch_no];   /*整个种群的分支覆盖情况*/

int randint = 0;

FILE *galog; /* an output file */

/* genotype (GT) a member of the population */
struct genotype 
{
double gene[NVARS]; /* a string of variables */
int branchfit[branch_no]; /* 分支覆盖情况 */
double fitness; /* GT‘s fitness */

double rfitness; /* relative fitness */
double cfitness; /* cumulative fitness */
};
struct genotype population[POPSIZE+1]; /* population */
struct genotype newpopulation[POPSIZE+1]; /* new population; */

/************被测程序***********/
void testedPro(double adouble bdouble cint* fi)
{
if(a<=0 || b<=0 || c<=0)
{
//printf(“边值无效!\n“);
fi[0] = 1;
}
else if(a+b<=c||a+c<=b||b+c<=a) 
{
//printf(“不能构成三角形!\n“);
fi[1] = 1;
}
else
{
if(a==c||a==b||b==c) 
{
if(a==c&&a==b) 
{
//printf(“等边三角形!\n“);
fi[2] = 1;
}
else 
{
//printf(“等腰三角形!\n“);
fi[3] = 1;
}
}   
else 
{
//printf(“斜三角形!\n“);
fi[4] = 1;
}
}
}


/***********************************************************/
/* Random value generator: Generates a value within bounds */
/***********************************************************/
double randval(void)
{
double val;
randint++;

val = (double)(rand()%100-10);
return(val);
}


//种群初始化
void initialize(void)
{

int i j z;
/* initialize variables within the bounds */
srand((unsigned)time(NULL));
for (i = 0; i < NVARS; i++)
{
for (j = 0; j < POPSIZE; j++)
{
population[j].fitness = 0;
population[j].rfitness = 0;
population[j].cfitness = 0;
population[j].gene[i] = randval();
for(z = 0; z < branch_no; z++)
population[j].branchfit[z] = 0;
}
}
}

/*************************************************************/
/* Evaluation function: This takes a user defined function. */
/* Each time this is changed the code has to be recompiled. */
/* The current function is:  */
/*************************************************************/
void evaluate(void)
{
int membno;
for (mem = 0; mem < POPSIZE; mem++)
{
testedPro(population[mem].gene[0]population[mem].gene[1]population[mem].gene[2]population[mem].branchfit);
}

for(bno = 0;bno < branch_no;bno++)
{
for (mem = 0; mem < POPSIZE; mem++)
{
all_branchfit[bno] +=population[mem].branchfit[bno];
}
}
for (mem = 0; mem < POPSIZE; mem++)
{
for(bno = 0;bno < branch_no;bno++)
{
if(all_branchfit[bno] != 0)
population[mem].fitness += population[mem].branchfit[bno]/doubl

评论

共有 条评论