import numpy as np from test import test # # lenchrom = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] # print(type(lenchrom)) # 假设重复的行为 [1, 2, 3, 4] # n = 40 # repeated_row = np.array([1, 8]) # bound = np.repeat([repeated_row], n, axis=0) def Code(lenchrom, bound, subregion_v_bus_mean): n = len(subregion_v_bus_mean) repeated_row = np.array([1, 8]) bound = np.repeat([repeated_row], n, axis=0) adr = np.load('adr.npy') # 初始化标志变量 flag 为 0,用于控制循环。 flag = 0 while flag == 0: subregion_v_bus_mean_split = np.array_split(subregion_v_bus_mean, 8) # 初始化一个空的列表,用于存储每个子数组的随机元素的对应值 random_elements_values = [] # 从每个子数组中随机选择一个元素 for sub_array in subregion_v_bus_mean_split: random_element_index = np.random.choice(np.arange(sub_array.shape[0])) # 获取随机元素的索引 random_element_value = sub_array[random_element_index, 1] # 获取随机元素的对应值 random_elements_values.append(random_element_value) # 将结果转换为numpy数组 a = np.array( random_elements_values) a = a.astype(int) # 创建一个长度为限制条件 bound 中的第一列元素数量的零数组 ret ret = np.zeros(len(bound[:, 0]), dtype=int) # 计算数组 ret 中 0 的数量,并将结果赋值给变量 x x = np.sum(ret == 0) # 将 i 赋值给 ret 中索引为 a(i) 的元素 for i in range(len(a)): ret[a[i]-1] = i+1 while x > 0: for i in range(len(a)): try: # 从数组 adr 中选择满足条件 ret==i 的行 add = adr[np.where(ret == i+1)[0], :] # 找到 add 中非零元素的位置,将它们存储在 m 和 n m, n = np.where(add != 0) # 找到 n 中唯一的元素,并将它们存储在 add 中 add = np.unique(n) # 找到数组 ret 中为 0 的位置,并将它们存储在 addc 中 addc = np.where(ret == 0)[0] add = np.intersect1d(add, addc) # 随机生成一个长度为 add 数组长度的排列,并将结果存储在变量 m 中 m = np.random.permutation(np.arange(len(add))) add = add[m[0]] ret[add] = i+1 except: continue x = np.sum(ret == 0) flag = test(lenchrom, bound, ret) return ret # aaa=Code(lenchrom,bound)