單純形法求解線性規劃問題python代碼
輸入格式代碼中可見
import pdb
def printJZ(rect_raw):
for each in rect_raw:
print(each)
def simple_method(begin_Matrix):
flag = 0
tmp_value = 0
count = 0
column = 0
for value in begin_Matrix[len(begin_Matrix)-1][:-1]:
if value < 0:
flag = 1
if max(abs(value),tmp_value) == abs(value):
column = count
tmp_value = abs(value)
count = count + 1
if flag == 0:
print('輸出結果狀態:')
printJZ(begin_Matrix)
print('最優解:',begin_Matrix[len(begin_Matrix)-1][len(begin_Matrix[len(begin_Matrix)-1])-1])
else:
flag = 0
tmp_value = 10000
row = 0
count = 0
for value in begin_Matrix:
if value[column] > 0:
flag = 1
if value[len(value)-1]/value[column] == min(value[len(value)-1]/value[column],tmp_value):
tmp_value = value[len(value)-1]/value[column]
row = count
count = count + 1
if flag == 0:
print('算法無界終止!')
else:
new_Matrix = []
for i in range(0,len(begin_Matrix)):
new_Matrix.append([])
for j in range(0,len(begin_Matrix[i])):
if i == row:
new_Matrix[i].append(begin_Matrix[i][j]/begin_Matrix[row][column])
else:
if begin_Matrix[i][column] > 0:
new_Matrix[i].append(begin_Matrix[i][j]-begin_Matrix[row][j]/begin_Matrix[row][column]*begin_Matrix[i][column])
else:
new_Matrix[i].append(begin_Matrix[i][j] - begin_Matrix[row][j] / begin_Matrix[row][column] * begin_Matrix[i][column])
simple_method(new_Matrix)
def simplex(imputMatrix):
print('輸入矩陣:')
printJZ(imputMatrix)
begin_Matrix =[]
for i in range(0,len(imputMatrix)):
begin_Matrix.append(imputMatrix[i][:-1])
for j in range(0,len(imputMatrix)-1):
if j==i:
begin_Matrix[i].append(1)
elif i == len(imputMatrix) -1:
begin_Matrix[i].append(0)
else:
begin_Matrix[i].append(0)
begin_Matrix[i].append(imputMatrix[i][len(imputMatrix[i])-1])
print('構造初始單純形表:')
printJZ(begin_Matrix)
simple_method(begin_Matrix)
if __name__=='__main__':
print('請按格式輸入約束條件和所求目標信息')
Glist=input().split('@')
rect_raw=[]
for item in Glist:
row=item.split(',')
g=[int(i) for i in row]
rect_raw.append(g)
simplex(rect_raw)