调用ReadFile()函数。从GivenPoints.txt中把点读出来存入GivenPoints[POINUM];
3.生成初始群体
调用CreateSpe()函数。产生1到POINUM-1之间的随机数,将GivenPoints[POINUM]中的点依次按随机数写入群体spe中,并将spe的初始每一分类的起始位置StartP[N]设为1,31,61,91,121。重复此步骤,直到生成指定个数的初始群体。调用calculate()函数,计算群体的适应值。
4.计算群体的适应值
求出群体中每一类的点的x、y值之和sumx和sumy,进而求出每一类的中心点。计算每一类中的点到其中心点的距离之和Distances[N],将每一类的Distances[N]相加,即得到该群体的适应值。
5.按照适应值将各群体排序
采用起泡法,按各群体的适应值进行升序排序。将适应值最好的一个群体写入QualitySpe.txt。
6.选择作为下一代群体的各个个体
将经过排序后排在最后的适应值最差的ELIMINATE个群体淘汰掉,并将最好的ELIMINATE个群体复制一份到最后。本文来自辣.文~论~文·网原文请找腾讯32,49114
7.交换操作
保留前RESERVENUMBER个群体不参与交换操作,从第RESERVENUMBER+1个群体开始。产生随机数r,若r< CHANGERATE即交换概率,则进行交换。将该群体复制给TempSpe,在TempSpe上做交换操作。随机选择两个类,在两个类中各选一个点作为交换点进行交换,计算交换两点之后该群体的适应值,若适应值有改进,则立即更新原来的群体,若适应值没有改进,则继续做交换两点的操作,直到连续M次都没有改进则停止交换。若适应值一次也没有改进过,则将原来的群体更新为最后一次没有改进的群体。
8.突变操作
保留前RESERVENUM个群体不参与突变操作,从第RESERVENUM+1个群体开始。产生随机数r,若r< MUTATIONRATE即突变概率,则进行突变。将该群体复制给TempSpe,在TempSpe上做突变操作。随机选择两个类,在两个类中各选一个点进行突变操作,更新群体每个类的起始位置。计算突变之后该群体的适应值,若适应值有改进,则立即更新原来的群体,若适应值没有改进,则继续做突变操作,直到连续M次都没有改进则停止突变。若适应值一次也没有改进过,则将原来的群体更新为最后一次没有改进的群体。
3.2实现技术
3.2.1主要参数
#define POINUM 151 //点的个数+1
#define SPENUM 51 //种群规模+1
#define N 6 //聚类的个数+1
#define ELIMINATE 5 //淘汰数
#define RESERVENUMBER 2 //不参与交换操作的群体个数
#define RESERVENUM 1 //不参与突变操作的群体个数
#define CHANGERATE 0.5 //交换概率
#define MUTATIONRATE 0.1 //突变概率
#define GENERATION 10000 //
论文网http://www.751com.cn/ 最大进化代数
#define M 3 //交换突变适应值连续没有改进的次数
3.2.2数据存储
1.点的结构体
typedef struct point{
float x; //x坐标
float y; //y坐标
}POINT;
2.种群的结构体
typedef struct species{
double TotalDists; // 该群体的适应值
POINT points[POINUM]; //该群体中的点
int StartP[N]; //每一类的起始位置
}SPECIES;本文来自辣.文~论~文·网原文请找腾讯324.9114
3.变量
POINT GivenPoints[POINUM]; //已知的点
SPECIES spe[SPENUM]; //初始种群
POINT CentralPoints[N]={0}; //一个群体中每一个类的中心点
double Distances[N]; //每一类中所有的点到中心点的距离之和
int gen; //进化代数
上一页 [1] [2] [3] [4] [5] [6] [7]
基于遗传算法的聚类分析算法 第7页下载如图片无法显示或论文不完整,请联系qq752018766