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 # 非支配解集大小限制
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 # 非支配解集大小限制
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 # 非支配解集大小限制