65 lines
2.7 KiB
Python
65 lines
2.7 KiB
Python
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) |