例题
首先,我们通过单纯法来求解该例题
新建“data.txt”文件存放
2 1 1 0 0 0 0
0 2 -1 1 0 0 -2
1 -1 1 0 1 0 2
0 1 -1 0 0 1 1
import numpy as npdef pivot(d,bn):l = list(d[0][:-2])jnum = l.index(max(l)) #转入编号m = []for i in range(bn):if d[i][jnum] == 0:m.append(0.)else:m.append(d[i][-1]/d[i][jnum])inum = m.index(min([x for x in m[1:] if x!=0])) #转出下标s[inum-1] = jnumr = d[inum][jnum]d[inum] /= rfor i in [x for x in range(bn) if x !=inum]:r = d[i][jnum]d[i] -= r * d[inum] def solve(d,bn):flag = Truewhile flag:if max(list(d[0][:-1])) <= 0: #直至所有系数小于等于0flag = Falseelse:pivot(d,bn) def printSol(d,cn):for i in range(cn - 1):if i in s:print("x"+str(i)+"=%.2f" % d[s.index(i)+1][-1])else:print("x"+str(i)+"=0.00")print("objective is %.2f"%(-d[0][-1]))d = np.loadtxt("data", dtype=np.float)(bn,cn) = d.shapes = list(range(cn-bn,cn-1)) #基变量列表solve(d,bn)printSol(d,cn)
结果如下图
接下来我们通过python包来解该例题
#导入包from scipy import optimizeimport numpy as np#确定c,A_ub,B_ubc = np.array([2,1,1])A_ub = np.array([[0,-2,1],[0,1,-1]])B_ub = np.array([-2,1])#求解res =optimize.linprog(-c,A_ub,B_ub)print(res)
结果如下图