for _index in range(len(input_Data)): # 遍历查找优选的值
sum_value sum_value input_Data[_index]
if random_value sum_value:
out_data_index.append(_index)
break
else:
continue
return out_data_index
def cross_variation(self,init_groups, opt_chose):
opt_chose_data [] # 优选的后的结果
for opt_flag in opt_chose:
opt_chose_data.append(init_groups[opt_flag,:])
cross_Data copy.deepcopy(opt_chose_data)
# 分组
index_groups list(range(0,len(init_groups)))
np.random.shuffle(index_groups) #分组是随机的 按顺序排完之后 再次打乱
# 染色体 交叉
# 1. 交叉的位置是随机的
for index in range(0,int(len(index_groups)/2)):
index index*2
variation_site np.random.choice(list(range(0,np.shape(init_groups)[-1]))[1:]) # 变异的起始位置 是随机的
try:
variation_data opt_chose_data[index_groups[index]][variation_site:] # 保存 中间变量
except:
a 10
cross_Data[index_groups[index]][variation_site:] opt_chose_data[index_groups[index 1]][variation_site:]
cross_Data[index_groups[index 1]][variation_site:] variation_data
# 染色体 变异
# 1. 变异的位置是随机的
# 2. 变异是否 发生是随机的
variation_Data copy.deepcopy(cross_Data)
variation_value 1/np.shape(init_groups)[-1]
for index in range(len(variation_Data)):
variation_random_value np.random.rand(1)
if variation_random_value variation_value:
variation_site np.random.choice(list(range(0, np.shape(init_groups)[-1]))[1:]) #变异发生的位置
variation_Data[index][variation_site] 1 - variation_Data[index][variation_site]
return np.array(variation_Data)
def run(self):
init_groups self._groups
data_collect []
for epochs in range(100):
y_group [] # 转十进制
for Binary in init_groups:
y_group.append(self.Binary2Decimal(Binary,True))
if y_group[0] nan :
a 10
y_suit self.calculate_suitability(y_group)
opt_chose self.optimize_choose(y_suit)
cross_variation_data self.cross_variation(init_groups, opt_chose)
init_groups copy.deepcopy(cross_variation_data)
y_get list(map(lambda x: f(self.Binary2Decimal(x,True)), init_groups))
data_collect.append(np.max(y_get))
print( epoch: %d 当前最优值为%f %(epochs,np.max(data_collect)))
# print( epoch: %d 当前最优值为%f %(epochs,np.max(y_get)))
# if __name__ __mian__ :
obj genetic_algorithms(N 4,Bit_num 9)
obj.run()
四、可提供算法的讲解 加我微信