def iteration(self): """ 算法迭代主程序 :return: 最后迭代完成的排序,去重的种群 """ node_count = len(self.read_json()) pop = population(self.pop_size, self.individuals_num, node_count) node_dirt = self.read_json() func_obj = MinMax2(pop, node_dirt) for i in range(self.iterations_num): copy_pop = pop.copy() selection(pop, func_obj) crossover(pop, self.cross_probability) mutation(pop, self.mutation_probability, node_count - 1) origin_pop = pop temp_pop = vstack((copy_pop, origin_pop)) func_obj = MinMax2(temp_pop, node_dirt) pop = dominanceMain(temp_pop, func_obj) print("第 %d 次迭代" % i) # estimate(pop, func_obj) pop_node = array(list(set([tuple(sorted(t)) for t in pop]))) # 个体按数值大小排序, 去重 return pop_node
for i in range(N): r = random() n = randint(0, V // 2) # 在个体的前半段随机选取一个点进行变异 m = randint(V // 2, V - 1) # 在个体的后半段随机选取一个点进行变异 if r <= belta: if population[i][n] + 1 <= max_num: population[i][n] = population[i][n] + 1 # 整数编码,随机+1或者减1 if population[i][m] - 1 >= 0: population[i][m] = population[i][m] - 1 for i in range(N): m = len(set(population[i])) # print(m) if m < V: # print(population[i],old_population[i]) population[i] = old_population[i] # 以下是测试用例 if __name__ == "__main__": from numpy import random random.seed(0) xN = 5 yN = 3 belta = 1 p = population(4, 7) print(p) mutation(p, belta, 29) print(p)
V = population.shape[1] # 列 for i in range(N - 1): r = random() if r < alfa: i_p = V // 2 for n in range(i_p, V): # 选择是在个体一半处进行交叉,交换两个个体的后半段 mid = population[i][n] population[i][n] = population[i + 1][n] population[i + 1][n] = mid # for i in range(N-1): # population[i]=np.sort(population[i]) # 个体基因大小的排序 for i in range(N): m = len(set(population[i])) if m < V: population[i] = old_population[i] # 以下是测试用例 if __name__ == "__main__": from numpy import random random.seed(0) xN = 5 yN = 3 alfa = 0.8 p = population(5, 6, 13) print(p) crossover(p, alfa) print(p)
N = ceng_population.shape[0] n = len(array(list(set([tuple(t) for t in ceng_population])))) print("第 ", i, "层的重复率:", n / N, "--该层个体数量:", N, "--不重复个体数量:", n) print(len(indicate)) # 返回新种群 return population[indicate] if __name__ == "__main__": #np.random.seed(0) #random.seed(0) # 显示此行会固定初始化的种群 #from function.funUserDefine import * #population=np.random.rand(10, 3) #print(population) #functionObject=ZDT1(population) #print(functionObject) #print(dominanceMain(population, functionObject)) print("#################################") p = population(20, 3, 94) #print(p) from function.funUserDefine import * f = MinMax2(p) #print(f.objFun_1()) #print(f.objFun_2()) #d = dominanceMain(p, f) d = dominanceMain(p, f) print(d)
monitored = monitored + float(pDirt[str(i)][3]) # 2 单以管长来计算 for i in monitorednode: monitored = monitored + float(pDirt[str(i)][2]) ''' monitored = 0 for i in monitored_node: monitored = monitored + float(node_dirt[str(i)][2]) #monitored = len(monitorednode)*(1/66383) # 1.平均概率 #monitored = len(monitorednode)/len(pDirt) unmonitored = 1 - monitored unmonitored = float('%.3f' % unmonitored) unmonitored_result.append(unmonitored) return unmonitored_result # 测试函数 如下 if __name__ == "__main__": from population_init import population import numpy as np import json jsonFile = "F:\\AWorkSpace\\data\\3628node.json" with open(jsonFile, "r") as f: nodeJson = json.load(f) nodeDirt2 = json.loads(nodeJson) p = population(500, 100, 3628) m3 = MinMax2(p, nodeDirt2) print(m3.objFun_1()) print(m3.objFun_2())