Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
    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]])
Exemple #4
0
 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