Exemplo n.º 1
0
    def __init__(self, problem, population):
        ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
        if str(type(population)) != "<class 'Population.Population'>":
            raise RuntimeError('传入的种群对象必须为Population类型')
        self.name = 'awGA'
        self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
        if population.Encoding == 'P':
            self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
            self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
        elif population.Encoding == 'BG':
            self.recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
            self.mutOper = ea.Mutbin(
                Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
        elif population.Encoding == 'RI':
            self.recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
            self.mutOper = ea.Mutuni(Pm=1 / self.problem.Dim,
                                     Alpha=False,
                                     MutShrink=1,
                                     Middle=False)  # 生成均匀变异算子对象
            self.extraMutOper = ea.Mutgau(
                Pm=1 / self.problem.Dim,
                Sigma3=False,
                MutShrink=3,
                Middle=False)  # 额外生成一个高斯变异算子对象,对标准差放大3倍
        else:
            raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')

        self.MAXSIZE = population.sizes  # 非支配解集大小限制
Exemplo n.º 2
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'GGAP-SGA'
     self.selFunc = 'rws'  # 轮盘赌选择算子
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=1)  # 生成两点交叉算子对象
             if population.Encodings[i] == 'BG':
                 mutOper = ea.Mutbin(
                     Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
             elif population.Encodings[i] == 'RI':
                 mutOper = ea.Mutbga(Pm=1 / self.problem.Dim,
                                     MutShrink=0.5,
                                     Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.GGAP = 0.9  # 代沟,表示使用多少个子代替换父代来形成新一代种群
Exemplo n.º 3
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'MOEA/D'
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1, Half_N=True)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1, Half_N=True)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(
             Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20,
                                  Half_N=True)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                    DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
     self.neighborSize = None  # 邻域大小,当设置为None时,将会自动设置为等于种群规模
     if self.problem.M <= 2:
         self.decomposition = ea.tcheby  # 采用切比雪夫权重聚合法
     else:
         self.decomposition = ea.pbi  # 采用pbi权重聚合法
     self.Ps = 0.9  # (Probability of Selection)表示进化时有多大的概率只从邻域中选择个体参与进化
Exemplo n.º 4
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'psy-NSGA3'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS  # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS  # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
             mutOper = ea.Mutbin(
                 Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encodings[i] == 'RI':
             recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
             mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                   DisI=20)  # 生成多项式变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
Exemplo n.º 5
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'psy-RVEA'
     self.selFunc = 'urs'  # 选择方式,采用无约束随机选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
             mutOper = ea.Mutbin(Pm=1)  # 生成二进制变异算子对象
         elif population.Encodings[i] == 'RI':
             recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
             mutOper = ea.Mutpolyn(Pm=1, DisI=20)  # 生成多项式变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.a = 2  # RVEA算法中的参数alpha
     self.fr = 0.1  # RVEA算法中的参数fr
     self.Gamma = None  # RVEA算法中的Gamma(详见参考文献的公式10),在每次更新参考点后Gamma要重置为None以便重新计算
Exemplo n.º 6
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'psy-studGA'
     self.problem = problem
     self.population = population
     self.selFunc = 'tour'  # 锦标赛选择算子
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=1)  # 生成两点交叉算子对象
             if population.Encodings[i] == 'BG':
                 mutOper = ea.Mutbin(Pm=1)  # 生成二进制变异算子对象
             elif population.Encodings[i] == 'RI':
                 mutOper = ea.Mutbga(Pm=1, MutShrink=0.5,
                                     Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS, MAXSIZE, logTras, verbose, outFunc, drawing, dirName)
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'NSGA2-archive'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS  # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS  # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim, DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
     self.MAXSIZE = 10 * population.sizes  # 全局非支配解存档的大小限制,默认为10倍的种群个体数
Exemplo n.º 8
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if population.ChromNum == 1:
         raise RuntimeError('传入的种群对象必须是多染色体的种群类型。')
     self.name = 'psy-EGA'
     self.selFunc = 'tour'  # 锦标赛选择算子
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=0.7)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=0.5)  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=0.7)  # 生成两点交叉算子对象
             if population.Encodings[i] == 'BG':
                 mutOper = ea.Mutbin(
                     Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
             elif population.Encodings[i] == 'RI':
                 mutOper = ea.Mutbga(Pm=1 / self.problem.Dim,
                                     MutShrink=0.5,
                                     Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
Exemplo n.º 9
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if population.ChromNum == 1:
         raise RuntimeError('传入的种群对象必须是多染色体的种群类型。')
     self.name = 'psy-awGA'
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
             mutOper = ea.Mutbin(
                 Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encodings[i] == 'RI':
             recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
             mutOper = ea.Mutuni(Pm=1 / self.problem.Dim,
                                 Alpha=False,
                                 Middle=False)  # 生成均匀变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.extraMutOper = ea.Mutgau(Pm=1 / self.problem.Dim,
                                   Sigma3=False,
                                   Middle=False)  # 额外生成一个高斯变异算子对象,对标准差放大3倍
     self.MAXSIZE = population.sizes  # 非支配解集大小限制
Exemplo n.º 10
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'psy-RVEA-RES'
     self.ndSort = ea.ndsortESS # 设置非支配排序算子
     self.selFunc = 'urs' # 选择方式,采用无约束随机选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR = 1) # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm = 1) # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR = 1) # 生成均匀交叉算子对象
             mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encodings[i] == 'RI':
             recOper = ea.Recsbx(XOVR = 1, n = 20) # 生成模拟二进制交叉算子对象
             mutOper = ea.Mutpolyn(Pm = 1/self.problem.Dim, DisI = 20) # 生成多项式变异算子对象
         else:
             raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.a = 2 # RVEA算法中的参数alpha
     self.fr = 0.1 # RVEA算法中的参数fr
Exemplo n.º 11
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'PsyPopulation.PsyPopulation'>":
         raise RuntimeError('传入的种群对象必须为PsyPopulation类型')
     self.name = 'psy-awGA'
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
             mutOper = ea.Mutbin(Pm=1)  # 生成二进制变异算子对象
         elif population.Encodings[i] == 'RI':
             recOper = ea.Xovud(XOVR=1)  # 生成部均匀交叉算子对象
             mutOper = ea.Mutuni(Pm=1,
                                 Alpha=False,
                                 MutShrink=1,
                                 Middle=False)  # 生成均匀变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.extraMutOper = ea.Mutgau(Pm=1,
                                   Sigma=False,
                                   MutShrink=3,
                                   Middle=False)  # 额外生成一个高斯变异算子对象,对标准差放大3倍
     self.MAXSIZE = population.sizes  # 非支配解集大小限制
Exemplo n.º 12
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if type(population) != list:
         raise RuntimeError('传入的种群对象列表必须为list类型')
     self.name = 'multi-SEGA'
     self.PopNum = len(population)  # 种群数目
     self.selFunc = 'tour'  # 锦标赛选择算子
     self.migFr = 5  # 发生种群迁移的间隔代数
     self.migOpers = ea.Migrate(MIGR=0.2, Structure=2, Select=1, Replacement=2)  # 生成种群迁移算子对象
     # 为不同的种群设置不同的重组、变异算子
     self.recOpers = []
     self.mutOpers = []
     Pms = np.linspace(1 / self.problem.Dim, 1, self.PopNum)  # 生成变异概率列表,为不同的种群分配不同的变异概率
     Pcs = np.linspace(0.7, 1, self.PopNum)  # 生成重组概率列表,为不同的种群分配不同的重组概率
     for i in range(self.PopNum):  # 遍历种群列表
         pop = population[i]  # 得到当前种群对象
         if pop.Encoding == 'P':
             recOper = ea.Xovpmx(XOVR=Pcs[i])  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=float(Pms[i]))  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=Pcs[i])  # 生成两点交叉算子对象
             if pop.Encoding == 'BG':
                 mutOper = ea.Mutbin(Pm=float(Pms[i]))  # 生成二进制变异算子对象
             elif pop.Encoding == 'RI':
                 mutOper = ea.Mutbga(Pm=float(Pms[i]), MutShrink=0.5, Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
Exemplo n.º 13
0
    def __init__(self, problem, population, xovr=1, pm=1):
        ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
        if str(type(population)) != "<class 'Population.Population'>":
            raise RuntimeError('传入的种群对象必须为Population类型')
        self.name = 'SEGA'
        self.selFunc = 'rws'  # 'tour'为锦标赛选择算子,'rws'(RouletteWheelSelection)为轮盘赌算法

        self.recOper = ea.Xovpmx(xovr)  # 生成部分匹配交叉算子对象
        self.mutOper = ea.Mutinv(pm)  # 生成逆转变异算子对象
Exemplo n.º 14
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              trappedValue=None,
              maxTrappedCount=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing,
                      trappedValue, maxTrappedCount, dirName)
     if type(population) != list:
         raise RuntimeError('传入的种群对象列表必须为list类型')
     self.name = 'multi-SEGA'
     self.PopNum = len(population)  # 种群数目
     self.selFunc = 'tour'  # 锦标赛选择算子
     self.migFr = 5  # 发生种群迁移的间隔代数
     self.migOpers = ea.Migrate(MIGR=0.2,
                                Structure=2,
                                Select=1,
                                Replacement=2)  # 生成种群迁移算子对象
     # 为不同的种群设置不同的重组、变异算子
     self.recOpers = []
     self.mutOpers = []
     Pms = np.linspace(1 / self.problem.Dim, 1,
                       self.PopNum)  # 生成变异概率列表,为不同的种群分配不同的变异概率
     Pcs = np.linspace(0.7, 1, self.PopNum)  # 生成重组概率列表,为不同的种群分配不同的重组概率
     for i in range(self.PopNum):  # 遍历种群列表
         pop = population[i]  # 得到当前种群对象
         if pop.Encoding == 'P':
             recOper = ea.Xovpmx(XOVR=Pcs[i])  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=float(Pms[i]))  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=Pcs[i])  # 生成两点交叉算子对象
             if pop.Encoding == 'BG':
                 mutOper = ea.Mutbin(Pm=float(Pms[i]))  # 生成二进制变异算子对象
             elif pop.Encoding == 'RI':
                 mutOper = ea.Mutbga(Pm=float(Pms[i]),
                                     MutShrink=0.5,
                                     Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
Exemplo n.º 15
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'studGA'
     self.selFunc = 'tour' # 锦标赛选择算子
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR = 0.7) # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm = 0.5) # 生成逆转变异算子对象
     else:
         self.recOper = ea.Xovdp(XOVR = 0.7) # 生成两点交叉算子对象
         if population.Encoding == 'BG':
             self.mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encoding == 'RI':
             self.mutOper = ea.Mutbga(Pm = 1/self.problem.Dim, MutShrink = 0.5, Gradient = 20) # 生成breeder GA变异算子对象
         else:
             raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
Exemplo n.º 16
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if str(type(population)) != "<class 'Population.Population'>":
         raise RuntimeError('传入的种群对象必须为Population类型')
     self.name = 'steadyGA'
     self.selFunc = 'etour' # 锦标赛选择算子
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR = 1) # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm = 1) # 生成逆转变异算子对象
     else:
         self.recOper = ea.Xovdp(XOVR = 1) # 生成两点交叉算子对象
         if population.Encoding == 'BG':
             self.mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encoding == 'RI':
             self.mutOper = ea.Mutbga(Pm = 1/self.problem.Dim, MutShrink = 0.5, Gradient = 20) # 生成breeder GA变异算子对象
         else:
             raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
Exemplo n.º 17
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              trappedValue=None,
              maxTrappedCount=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing,
                      trappedValue, maxTrappedCount, dirName)
     if population.ChromNum == 1:
         raise RuntimeError('传入的种群对象必须是多染色体的种群类型。')
     self.name = 'GGAP-SGA'
     self.selFunc = 'rws'  # 轮盘赌选择算子
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=0.7)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=0.5)  # 生成逆转变异算子对象
         else:
             recOper = ea.Xovdp(XOVR=0.7)  # 生成两点交叉算子对象
             if population.Encodings[i] == 'BG':
                 mutOper = ea.Mutbin(
                     Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
             elif population.Encodings[i] == 'RI':
                 mutOper = ea.Mutbga(Pm=1 / self.problem.Dim,
                                     MutShrink=0.5,
                                     Gradient=20)  # 生成breeder GA变异算子对象
             else:
                 raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.GGAP = 0.9  # 代沟,表示使用多少个子代替换父代来形成新一代种群
Exemplo n.º 18
0
 def __init__(self, problem, population):
     ea.SoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'Population.Population'>":
         raise RuntimeError('传入的种群对象必须为Population类型')
     self.name = 'GGAP-SGA'
     self.selFunc = 'rws'  # 轮盘赌选择算子
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     else:
         self.recOper = ea.Xovdp(XOVR=1)  # 生成两点交叉算子对象
         if population.Encoding == 'BG':
             self.mutOper = ea.Mutbin(Pm=1)  # 生成二进制变异算子对象
         elif population.Encoding == 'RI':
             self.mutOper = ea.Mutbga(Pm=1, MutShrink=0.5,
                                      Gradient=20)  # 生成breeder GA变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
     self.GGAP = 0.9  # 代沟,表示使用多少个子代替换父代来形成新一代种群
Exemplo n.º 19
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing, dirName)
     if population.ChromNum == 1:
         raise RuntimeError('传入的种群对象必须是多染色体的种群类型。')
     self.name = 'psy-NSGA2'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS  # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS  # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
             mutOper = ea.Mutbin(
                 Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encodings[i] == 'RI':
             recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
             mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                   DisI=20)  # 生成多项式变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
Exemplo n.º 20
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing, dirName)
     if population.ChromNum == 1:
         raise RuntimeError('传入的种群对象必须是多染色体的种群类型。')
     self.name = 'psy-RVEA'
     self.selFunc = 'urs'  # 选择方式,采用无约束随机选择
     # 由于有多个染色体,因此需要用多个重组和变异算子
     self.recOpers = []
     self.mutOpers = []
     for i in range(population.ChromNum):
         if population.Encodings[i] == 'P':
             recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
             mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
         elif population.Encodings[i] == 'BG':
             recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
             mutOper = ea.Mutbin(
                 Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encodings[i] == 'RI':
             recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
             mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                   DisI=20)  # 生成多项式变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
         self.recOpers.append(recOper)
         self.mutOpers.append(mutOper)
     self.a = 2  # RVEA算法中的参数alpha
     self.fr = 0.1  # RVEA算法中的参数fr
     self.Gamma = None  # RVEA算法中的Gamma(详见参考文献的公式10),在每次更新参考点后Gamma要重置为None以便重新计算
Exemplo n.º 21
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if str(type(population)) != "<class 'Population.Population'>":
         raise RuntimeError('传入的种群对象必须为Population类型')
     self.name = 'RVEA'
     self.selFunc = 'urs' # 选择方式,采用无约束随机选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR = 1) # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm = 1) # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR = 1) # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR = 1, n = 20) # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm = 1/self.problem.Dim, DisI = 20) # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
     self.a = 2 # RVEA算法中的参数alpha
     self.fr = 0.1 # RVEA算法中的参数fr
     self.Gamma = None # RVEA算法中的Gamma(详见参考文献的公式10),在每次更新参考点后Gamma要重置为None以便重新计算
Exemplo n.º 22
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'NSGA2'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour' # 选择方式,采用锦标赛选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR = 1) # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm = 1) # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR = 1) # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR = 1, n = 20) # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm = 1/self.problem.Dim, DisI = 20) # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if str(type(population)) != "<class 'Population.Population'>":
         raise RuntimeError('传入的种群对象必须为Population类型')
     self.name = 'NSGA2-20p-toZero'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS  # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS  # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour'  # 选择方式,采用锦标赛选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(Pm=1)  # 生成二进制变异算子对象
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1, DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
Exemplo n.º 24
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing, dirName)
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'MOEA/D-archive'
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1, Half_N=True)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1, Half_N=True)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(
             Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20,
                                  Half_N=True)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                    DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
     self.neighborSize = None  # 邻域大小,当设置为None时,将会自动设置为等于种群规模
     if self.problem.M <= 2:
         self.decomposition = ea.tcheby  # 采用切比雪夫权重聚合法
     else:
         self.decomposition = ea.pbi  # 采用pbi权重聚合法
     self.Ps = 0.9  # (Probability of Selection)表示进化时有多大的概率只从邻域中选择个体参与进化
     self.MAXSIZE = None  # 全局非支配解存档的大小限制,这里设为None,表示后面将默认设为10倍的种群个体数
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population)  # 先调用父类构造方法
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'RVEA-RES'
     self.ndSort = ea.ndsortESS  # 设置非支配排序算子
     self.selFunc = 'urs'  # 选择方式,采用无约束随机选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(
             Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                    DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
     self.a = 2  # RVEA算法中的参数alpha
     self.fr = 0.1  # RVEA算法中的参数fr
Exemplo n.º 26
0
 def __init__(self, problem, population):
     ea.MoeaAlgorithm.__init__(self, problem, population) # 先调用父类构造方法
     if str(type(population)) != "<class 'Population.Population'>":
         raise RuntimeError('传入的种群对象必须为Population类型')
     self.name = 'NSGA2-archive'
     if self.problem.M < 10:
         self.ndSort = ea.ndsortESS # 采用ENS_SS进行非支配排序
     else:
         self.ndSort = ea.ndsortTNS # 高维目标采用T_ENS进行非支配排序,速度一般会比ENS_SS要快
     self.selFunc = 'tour' # 选择方式,采用锦标赛选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR = 1) # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm = 1) # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR = 1) # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(Pm = None) # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR = 1, n = 20) # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm = 1/self.problem.Dim, DisI = 20) # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为''BG''、''RI''或''P''.')
     self.MAXSIZE = 10 * population.sizes # 全局非支配解存档的大小限制,默认为10倍的种群个体数
Exemplo n.º 27
0
def geat_method(dist, NIND=500, Encoding='P', MAXGEN=300, XOVR=0.2, Pm=0.5):
    '''NIND:种群规模
    Encoding:编码方式
    MAXGEN:最大进化代数
    XOVR:交叉算子
    Pm:变异算子'''
    problem = MyProblem(dist)  # 生成问题对象
    """=================================种群设置================================="""
    Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges,
                      problem.borders)  # 创建区域描述器
    population = ea.Population(Encoding, Field,
                               NIND)  # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)
    """===============================算法参数设置==============================="""
    myAlgorithm = ea.soea_SEGA_templet(problem, population)  # 实例化一个算法模板对象
    myAlgorithm.MAXGEN = MAXGEN  # 最大进化代数
    myAlgorithm.recOper = ea.Xovox(XOVR=XOVR)  # 设置交叉算子
    myAlgorithm.mutOper = ea.Mutinv(Pm=Pm)  # 设置变异算子
    myAlgorithm.drawing = 1  # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制过程动画)
    """==========================调用算法模板进行种群进化=========================="""
    [population, obj_trace,
     var_trace] = myAlgorithm.run()  # 执行算法模板,得到最后一代种群以及进化记录器
    population.save()  # 把最后一代种群的信息保存到文件中
    # 输出结果
    best_gen = np.argmin(obj_trace[:, 1])  # 记录最优种群是在哪一代
    best_ObjV = np.min(obj_trace[:, 1])
    print('最短路程为:%s' % (best_ObjV))
    print('最佳路线为:')
    best_journey, edges = problem.decode(var_trace[best_gen, :])
    print(best_journey)
    for i in range(len(best_journey)):
        print(int(best_journey[i]), end=' ')
    print()
    print('有效进化代数:%s' % (obj_trace.shape[0]))
    print('最优的一代是第 %s 代' % (best_gen + 1))
    print('评价次数:%s' % (myAlgorithm.evalsNum))
    print('时间已过 %s 秒' % (myAlgorithm.passTime))
    info = ["Geat Method", str(MAXGEN) + " times", str(int(best_ObjV)) + " Km"]
    return best_journey, info, myAlgorithm.passTime
Exemplo n.º 28
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              trappedValue=None,
              maxTrappedCount=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing,
                      trappedValue, maxTrappedCount, dirName)
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'studGA'
     self.selFunc = 'tour'  # 锦标赛选择算子
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=0.7)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=0.5)  # 生成逆转变异算子对象
     else:
         self.recOper = ea.Xovdp(XOVR=0.7)  # 生成两点交叉算子对象
         if population.Encoding == 'BG':
             self.mutOper = ea.Mutbin(
                 Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
         elif population.Encoding == 'RI':
             self.mutOper = ea.Mutbga(Pm=1 / self.problem.Dim,
                                      MutShrink=0.5,
                                      Gradient=20)  # 生成breeder GA变异算子对象
         else:
             raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
Exemplo n.º 29
0
 def __init__(self,
              problem,
              population,
              MAXGEN=None,
              MAXTIME=None,
              MAXEVALS=None,
              MAXSIZE=None,
              logTras=None,
              verbose=None,
              outFunc=None,
              drawing=None,
              dirName=None,
              **kwargs):
     # 先调用父类构造方法
     super().__init__(problem, population, MAXGEN, MAXTIME, MAXEVALS,
                      MAXSIZE, logTras, verbose, outFunc, drawing, dirName)
     if population.ChromNum != 1:
         raise RuntimeError('传入的种群对象必须是单染色体的种群类型。')
     self.name = 'RVEA-RES'
     self.ndSort = ea.ndsortESS  # 设置非支配排序算子
     self.selFunc = 'urs'  # 选择方式,采用无约束随机选择
     if population.Encoding == 'P':
         self.recOper = ea.Xovpmx(XOVR=1)  # 生成部分匹配交叉算子对象
         self.mutOper = ea.Mutinv(Pm=1)  # 生成逆转变异算子对象
     elif population.Encoding == 'BG':
         self.recOper = ea.Xovud(XOVR=1)  # 生成均匀交叉算子对象
         self.mutOper = ea.Mutbin(
             Pm=None)  # 生成二进制变异算子对象,Pm设置为None时,具体数值取变异算子中Pm的默认值
     elif population.Encoding == 'RI':
         self.recOper = ea.Recsbx(XOVR=1, n=20)  # 生成模拟二进制交叉算子对象
         self.mutOper = ea.Mutpolyn(Pm=1 / self.problem.Dim,
                                    DisI=20)  # 生成多项式变异算子对象
     else:
         raise RuntimeError('编码方式必须为' 'BG' '、' 'RI' '或' 'P' '.')
     self.a = 2  # RVEA算法中的参数alpha
     self.fr = 0.1  # RVEA算法中的参数fr
Exemplo n.º 30
0

if __name__ == "__main__":
    problem = MyProblem()  # 生成问题对象
    """=================================种群设置================================="""
    Encoding = 'P'  # 编码方式
    NIND = 4  # 种群规模
    Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges,
                      problem.borders)  # 创建区域描述器
    population = ea.Population(Encoding, Field,
                               NIND)  # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)
    """===============================算法参数设置==============================="""
    myAlgorithm = ea.soea_SEGA_templet(problem, population)  # 实例化一个算法模板对象
    myAlgorithm.MAXGEN = 10  # 最大进化代数
    myAlgorithm.recOper = ea.Xovox(XOVR=0.8)  # 设置交叉算子
    myAlgorithm.mutOper = ea.Mutinv(Pm=0.1)  # 设置变异算子
    myAlgorithm.drawing = 1  # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制过程动画)
    """==========================调用算法模板进行种群进化=========================="""
    [population, obj_trace,
     var_trace] = myAlgorithm.run()  # 执行算法模板,得到最后一代种群以及进化记录器
    population.save()  # 把最后一代种群的信息保存到文件中
    # 输出结果
    best_gen = np.argmin(obj_trace[:, 1])  # 记录最优种群是在哪一代
    best_ObjV = np.min(obj_trace[:, 1])
    print('最短路程为:%s' % (best_ObjV))
    print('最佳路线为:')
    best_journey, edges = problem.decode(var_trace[best_gen, :])
    for i in range(len(best_journey)):
        print(int(best_journey[i]), end=' ')
    print()
    print('有效进化代数:%s' % (obj_trace.shape[0]))