Exemple #1
0
        //初始化聚类
        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];
                }
            }
        }
Exemple #2
0
        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];
            }
        }