//初始化聚类 private void earlistsCluster_modthree(Individual[] individuals, ref Individual[] population, int populationIndex) { //首先评估每个个体之间的MOD3指标 for (int i = 0; i < individuals.Length; i++) { FNModthreeEvaluation(ref individuals[i]); FAModthreeEvaluation(ref individuals[i]); } //聚类,将个体聚类 Kmeans c = new Kmeans(); c.population = individuals; c.gsmnum = gSectorNum; c.ClusterMain(subPopSize, individuals.Length); for (int i = 0; i < c.K; i++) { int curIndivIndex = populationIndex * subPopSize + i; double minmodN = 0.0; int index = 0; for (int j = 0; j < c.classter[i].Count; j++) { if (j == 0) { minmodN = c.population[c.classter[i][j]].fitness_FNmod; index = j; } else { if (c.population[c.classter[i][j]].fitness_FNmod < minmodN) { minmodN = c.population[c.classter[i][j]].fitness_FAmod3; index = j; } } } for (int k = 0; k < population[i].gene.Length; k++) { population[curIndivIndex].gene[k] = c.population[c.classter[i][index]].gene[k]; } } }
private void earlistsCluster(Individual[] individuals, ref Individual[] population, int populationIndex) { //首先评估每个个体之间的MOD3指标 //for (int i = 0; i < individuals.Length; i++) //{ // FNModthreeEvaluation(ref individuals[i]); //} //聚类,将个体聚类 Kmeans c = new Kmeans(); c.population = individuals; c.gsmnum = gSectorNum; c.ClusterMain(subPopSize, individuals.Length); for (int i = 0; i < c.K; i++) { int curIndivIndex = populationIndex * subPopSize + i; double minF = double.MaxValue; int index = 0; //index = rand.Next(c.classter[i].Count); for (int j = 0; j < c.classter[i].Count; j++) { int curIndex = c.classter[i][j]; c.population[curIndex].totalFitness = 0; for (int k = 0; k < objectNum; k++) c.population[curIndex].totalFitness += weightMatrix[populationIndex, k] * c.population[curIndex].fitnessVec[k] / c.population[curIndex].fitnessVecOri[k]; if (c.population[curIndex].totalFitness < minF) { minF = c.population[curIndex].totalFitness; index = j; } } for (int k = 0; k < population[i].gene.Length; k++) population[curIndivIndex].gene[k] = c.population[c.classter[i][index]].gene[k]; } }