Python 优化代码:解决 linprog 中的 IndexError: index 1196 is out of bounds for axis 0 with size 520 错误
这段代码使用了 scipy.optimize.linprog 来解决机车分配问题,但遇到了 IndexError: index 1196 is out of bounds for axis 0 with size 520 错误。这个错误是由于数组索引越界引起的。具体来说,A_ub 数组的第一个维度的大小为 2*m*n,而第四个约束条件的循环中,A_ub[(2*m+n)*n+i*m+j, i*m+j] 的索引可能超出了这个范围。
为了解决这个问题,需要检查循环中的索引是否正确,并确保它们不会超出数组的范围。以下是可能的解决方案:
- 重新计算数组大小: 仔细检查
A_ub数组的第一个维度的大小。确保它足够大以容纳所有可能的索引。 - 调整循环范围: 检查第四个约束条件的循环中,
i和j的取值范围是否合理。确保它们不会超出数组的范围。 - 检查索引计算: 检查
(2*m+n)*n+i*m+j的计算结果是否正确。
在修改代码时,务必仔细检查每个索引的计算过程,确保它们在数组的范围内。以下是一些代码修改建议:
# 约束:列车必须按照时间顺序安排,且牵引列车的机车必须在列车到站时间之前到达
for i in range(n):
for j in range(m):
if train_type[i] == 'arr':
# 修改索引
A_ub[(2*m+n)*i+j, i*m+j] = 1
for k in range(n):
if dep[k] <= arr[i]:
A_ub[(2*m+n)*i+j, k*m+j] = -1
b_ub[(2*m+n)*i+j] = 0
break
else:
# 修改索引
A_ub[(2*m+n)*i+j, i*m+j] = 1
for k in range(n):
if arr[k] >= dep[i]-time_limit:
A_ub[(2*m+n)*i+j, k*m+j] = -1
b_ub[(2*m+n)*i+j] = 0
break
通过修改代码,并仔细检查索引计算,你应该可以解决 IndexError 错误并成功运行代码。
原文地址: https://www.cveoy.top/t/topic/mGDl 著作权归作者所有。请勿转载和采集!