def stat(self, population, id_1): # 用于分析记录 # 进行进化记录 feasible = np.where(np.all(population.CV <= 0, 1))[0] # 找到可行解的下标 np.all返回T/F,对T的下标进行记录 if len(feasible) > 0: # 若可行解的个数超过0的话,那么 # 将可行解取出来,是tempPop tempPop = population[feasible] id_1_1 = id_1[feasible] bestIdx = np.argmax(tempPop.FitnV) # 获取最优个体的下标 # 可行解的适应度的下标 self.obj_trace[self.currentGen, 0] = np.sum( tempPop.ObjV) / tempPop.sizes # 记录种群个体平均目标函数值 # print('obj_trace:', self.obj_trace) self.obj_trace[self.currentGen, 1] = tempPop.ObjV[bestIdx] # 记录当代目标函数的最优值 self.var_trace[self.currentGen, :] = tempPop.Phen[ bestIdx, :] # 记录当代最优的决策变量值 self.id_trace[self.currentGen, :] = id_1_1[ bestIdx, :] # 记录当代最优的决策变量值 self.forgetCount = 0 # “遗忘策略”计数器清零 self.passTime += time.time() - self.timeSlot # 更新用时记录 if self.drawing == 2: self.ax = ea.soeaplot(self.obj_trace[:, [1]], '种群最优个体目标函数值', False, self.ax, self.currentGen) # 绘制动态图 self.timeSlot = time.time() # 更新时间戳 else: self.currentGen -= 1 # 忽略这一代 self.forgetCount += 1 # “遗忘策略”计数器加1
def stat(self, population): # 分析记录 # 进行进化记录 feasible = np.where(np.all(population.CV <= 0, 1))[0] # 找到可行解的下标 if len(feasible) > 0: tempPop = population[feasible] bestIdx = np.argmax(tempPop.FitnV) # 获取最优个体的下标 self.obj_trace[self.currentGen,0] = np.sum(tempPop.ObjV) / tempPop.sizes # 记录种群个体平均目标函数值 self.obj_trace[self.currentGen,1] = tempPop.ObjV[bestIdx] # 记录当代目标函数的最优值 self.var_trace[self.currentGen,:] = tempPop.Phen[bestIdx, :] # 记录当代最优的决策变量值 self.forgetCount = 0 # “遗忘策略”计数器清零 self.passTime += time.time() - self.timeSlot # 更新用时记录 if self.drawing == 2: self.ax = ea.soeaplot(self.obj_trace[:,[1]],'种群最优个体目标函数值', False, self.ax, self.currentGen) # 绘制动态图 self.timeSlot = time.time() # 更新时间戳 else: self.currentGen -= 1 # 忽略这一代 self.forgetCount += 1 # “遗忘策略”计数器加1
def draw(self, pop, EndFlag=False): """ 描述: 该函数用于在进化过程中进行绘图。该函数在stat()以及finishing函数里面被调用。 输入参数: pop : class <Population> - 种群对象。 EndFlag : bool - 表示是否是最后一次调用该函数。 输出参数: 无输出参数。 """ if not EndFlag: self.passTime += time.time() - self.timeSlot # 更新用时记录,不计算画图的耗时 # 绘制动画 if self.drawing == 2: metric = np.array(self.trace['f_best']).reshape(-1, 1) self.ax = ea.soeaplot(metric, Label='Objective Value', saveFlag=False, ax=self.ax, gen=self.currentGen, gridFlag=False) # 绘制动态图 elif self.drawing == 3: self.ax = ea.varplot(pop.Phen, Label='decision variables', saveFlag=False, ax=self.ax, gen=self.currentGen, gridFlag=False) self.timeSlot = time.time() # 更新时间戳 else: # 绘制最终结果图 if self.drawing != 0: metric = np.vstack([self.trace['f_avg'], self.trace['f_best']]).T ea.trcplot(metric, [['种群个体平均目标函数值', '种群最优个体目标函数值']], xlabels=[['Number of Generation']], ylabels=[['Value']], gridFlags=[[False]])
def stat(self, population): # 分析记录,更新进化记录器,population为传入的种群对象 # 进行进化记录 feasible = np.where( np.all(population.CV <= 0, 1))[0] if population.CV is not None else np.arange( population.sizes) # 找到可行解个体的下标 if len(feasible) > 0: tempPop = population[feasible] bestIdx = np.argmax(tempPop.FitnV) # 获取最优个体的下标 self.obj_trace[self.currentGen, 0] = np.sum( tempPop.ObjV) / tempPop.sizes # 记录种群个体平均目标函数值 self.obj_trace[self.currentGen, 1] = tempPop.ObjV[bestIdx] # 记录当代目标函数的最优值 self.var_trace[self.currentGen, :] = tempPop.Phen[ bestIdx, :] # 记录当代最优的决策变量值 self.forgetCount = 0 # “遗忘策略”计数器清零 if np.abs(self.preObjV - self.obj_trace[self.currentGen, 1]) < self.trappedValue: self.trappedCount += 1 else: self.trappedCount = 0 # 重置进化停滞计数器 self.passTime += time.time() - self.timeSlot # 更新用时记录 if self.drawing == 2: self.ax = ea.soeaplot(self.obj_trace[:, [1]], Label='Objective Value', saveFlag=False, ax=self.ax, gen=self.currentGen, gridFlag=False) # 绘制动态图 elif self.drawing == 3: self.ax = ea.varplot(tempPop.Phen, Label='decision variables', saveFlag=False, ax=self.ax, gen=self.currentGen, gridFlag=False) self.timeSlot = time.time() # 更新时间戳 else: self.currentGen -= 1 # 忽略这一代 self.forgetCount += 1 # “遗忘策略”计数器加1