这段代码使用了 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] 的索引可能超出了这个范围。

为了解决这个问题,需要检查循环中的索引是否正确,并确保它们不会超出数组的范围。以下是可能的解决方案:

  1. 重新计算数组大小: 仔细检查 A_ub 数组的第一个维度的大小。确保它足够大以容纳所有可能的索引。
  2. 调整循环范围: 检查第四个约束条件的循环中,ij 的取值范围是否合理。确保它们不会超出数组的范围。
  3. 检查索引计算: 检查 (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 错误并成功运行代码。

Python 优化代码:解决 linprog 中的 IndexError: index 1196 is out of bounds for axis 0 with size 520 错误

原文地址: https://www.cveoy.top/t/topic/mGDl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录