import numpy as np
def pivot():
# 求转入基变量的列索引id
l = list(matrix[0][:-1])
index_intoB = l.index(max(l))#即取检验数的最大值列索引
col_inB.append(matrix[i][-1] / matrix[i][index_intoB])
index_outB = col_inB.index(min([x for x in col_inB[1:] if x > 0]))#取b/aij的最小值,否则其他约束会不可行
#index_outB代表的是换出的基变量
print(f"当前换入的基变量是{index_intoB+1},换出的基变量是{index_outB+2}")
print(matrix)
print(col_inB[1:])
#通过行变换将其他行非零元去除
#注意,这一操作对第一行也执行了,是在将表达式中的新基变量也给消除!用其他非基变量来表示!第一行的最后一个数值极为z0,即目标函数值!
for row in [x for x in range(b_num) if x != index_outB]:
cur_cell_to0 = matrix[row][index_intoB]
matrix[row] -= cur_cell_to0 * matrix[index_outB]
def solve():
flag = True
while flag:
if max(list(matrix[0][:-1])) <= 0: # 直至所有系数小于等于0
flag = False
else:
pivot()
代码中删除了一些,如果需要的话移步下载完整项目