Esempio 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  # 非支配解集大小限制
Esempio n. 2
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  # 非支配解集大小限制
Esempio n. 3
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  # 非支配解集大小限制