geatpy icon indicating copy to clipboard operation
geatpy copied to clipboard

多种群进化案例中最后一个种群的变异率设置为1是否过大?是否因为使用了压缩变异算子导致变异率要设置较大。具体原理老师能否解释一下

Open zzzmmp opened this issue 2 years ago • 1 comments

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)

zzzmmp avatar Dec 18 '21 01:12 zzzmmp

这个只是个算法模板展示。目的是展示算法怎么实现。而不是以封装调用为目的。你可以根据待求解的问题特性,修改算法。

geatpy-dev avatar Dec 20 '21 11:12 geatpy-dev