def main():

        average_incomes = []

        populations = []

        # 用于判断全局收敛的方差最小值,小于该值时认为种群达到全局收敛
        std_limition = 0.1

        currentAdjustGeneration = 41

        Standard.init_data()
        population = Standard.initialPopulation

        generation = 0

        time3 = datetime.now()

        # 十万代以内,不停迭代,直到某一代出现完全收敛
        while generation < Standard.maxgeneration:

            populations.append(population)

            print("第")
            print(generation)
            print("代")

            if (generation == 40):
                Standard.retainEliteNumbers = 1

            print("本代精英个数:", Standard.retainEliteNumbers)
            print("本代变异率:", Standard.mutationprob)

            # 每相隔30代 加一次精英
            if (generation - currentAdjustGeneration > 30
                    and Standard.retainEliteNumbers < 5):
                print("下面加精英")
                Standard.retainEliteNumbers += 1
                currentAdjustGeneration = generation

            # 对种群解码得到表现形
            decode = Generation.getDecode(population, Standard)

            # 得到适应度值和累计概率值
            fitnessValue, cum_proba, incomes, retain_population, elite_population, elite_incomes, generation_best_chrome = Generation.getFitnessValue(
                population, decode, Standard)

            # 选择新的种群,并计算平均收益
            newpopulations, average_income = Generation.selectNewPopulation(
                retain_population, population, cum_proba, fitnessValue,
                incomes, elite_population, elite_incomes, Standard)

            print("本代平均收益:", average_income)
            average_incomes.append(average_income)

            # 如果本代方差小于一定值,则认为达到了全局收敛,迭代终止
            if (Standard.stdarr[generation] < std_limition):
                break

            # 新种群交叉
            crossPopulations = Generation.crossNewPopulation(
                newpopulations, Standard.prob)

            # 变异操作
            mutationpopulation = Generation.mutation(crossPopulations,
                                                     Standard.mutationprob)

            # 将父母和子女合并为新的种群
            population = np.vstack((newpopulations, mutationpopulation))

            generation += 1

            print("本代演化结束,当前平均收益数组:", average_incomes)

            time4 = datetime.now()
            print("本代耗时:", time4 - time3)

            time3 = time4

        # 获取最后要输出的平均收益和各项参数
        final_average_income = average_income
        best_chrome = generation_best_chrome
        """
        print(average_incomes)
        x = [i for i in range(generation)]
        y = [average_incomes[i] for i in range(generation)]
        plt.plot(x, y)
        plt.show()
        """
        # 返回最终平均收益,以及最后一代的最优染色体

        best_chrome_dealed = best_chrome[0]

        for index, item in enumerate(best_chrome_dealed):
            if (index in Standard.intgerIndex):
                best_chrome_dealed[index] = np.ceil(item)

        return final_average_income, best_chrome_dealed, generation