C = np.array([[4, 8, 7, 15, 12], [7, 9, 17, 14, 10], [6, 9, 12, 8, 7], [6, 7, 14, 6, 10], [6, 9, 12, 10, 6]]) C_matrix = copy.deepcopy(C) '系数矩阵归一化处理' C_matrix = preprocessing(C_matrix) # 确定独立零元素和划线操作 while True: zeroArray = find_independent_zeros(C_matrix) if np.count_nonzero(zeroArray == 1) == C.shape[0]: # 当独立零元素的个数等于系数方阵时,找到最优解 break C_matrix = draw_line(zeroArray, C_matrix) '结果输出' result = np.where(zeroArray == 1) cost = 0 for i in range(C.shape[0]): cost += C[result[0][i], result[1][i]] print('事件', str(result[1][i] + 1), '分配给工人', str(result[0][i] + 1)) print('总成本为:', cost) 优化代码
时间: 2024-04-17 09:28:49 浏览: 185
浅谈numpy中np.array()与np.asarray的区别以及.tolist
import copy
def preprocessing(C):
# 对系数矩阵进行归一化处理
C_normalized = C / np.sum(C, axis=1, keepdims=True)
return C_normalized
def draw_line(zeroArray, C_matrix):
# 找到0元素所在的行和列
rows, cols = np.where(zeroArray == 1)
# 划线操作,将所在行和列的元素置为最大值
C_matrix[rows, :] = np.max(C_matrix)
C_matrix[:, cols] = np.max(C_matrix)
return C_matrix
C = np.array([[4, 8, 7, 15, 12],
[7, 9, 17, 14, 10],
[6, 9, 12, 8, 7],
[6, 7, 14, 6, 10],
[6, 9, 12, 10, 6]])
C_matrix = copy.deepcopy(C)
# 系数矩阵归一化处理
C_matrix = preprocessing(C_matrix)
# 确定独立零元素和划线操作
while True:
zeroArray = find_independent_zeros(C_matrix)
if np.count_nonzero(zeroArray == 1) == C.shape[0]: # 当独立零元素的个数等于系数方阵时,找到最优解
break
C_matrix = draw_line(zeroArray, C_matrix)
# 结果输出
result = np.where(zeroArray == 1)
cost = 0
for i in range(C.shape[0]):
cost += C[result[0][i], result[1][i]]
print('事件', str(result[1][i] + 1), '分配给工人', str(result[0][i] + 1))
print('总成本为:', cost)
# 优化了代码的结构,并将函数化处理,使得代码更加清晰和易于理解。如果有其他方面的要求或者问题,请告诉我。
阅读全文