Python学习之单纯形法1.0
一、效果图
二、单纯形法的实现
1.准备一个txt文件,里面放置一个矩阵,将文件导入PyCharm中
2.代码
注意:记得将路径改为自己存放txt文件的路径!!!
import numpy as np
#定义线性回归系数模型
def pivot(d,b):
l = list(d[0][:-2])
num = l.index(max(l)) #转入编号
m = []
for i in range(b):
if d[i][num] == 0:
m.append(0.)
else:
m.append(d[i][-1] / d[i][num])
inum = m.index(min([x for x in m[1:] if x!=0])) #转出下标
s[inum-1] = num
r = d[inum][num]
d[inum] /= r
for i in [x for x in range(b) if x != inum]:
r = d[i][num]
d[i] -= r * d[inum]
#定义基变量函数
def solve(d,b):
flag = True
while flag:
if max(list(d[0][:-1])) <= 0: #直至所有系数小于等于0
flag = False
else:
pivot(d, b)
#输出变量
def printSol(d,c):
for i in range(c - 1):
if i in s:
print("x"+str(i)+"=%.2f" % d[s.index(i)+1][-1])
else:
print("x"+str(i)+"=0.00")
print("目标 is %.2f"%(-d[0][-1]))
d = np.loadtxt("D:\\Users\\Admin\\PycharmProjects\\learn_torch\\hh.txt", dtype=np.float)
(b, c) = d.shape
s = list(range(c - b, c - 1)) #基变量列表
solve(d, b)
printSol(d, c)
from scipy import optimize
import numpy as np
c = np.array([2,3])
A = np.array([[1,2], [4,1],[4,0]])
B = np.array([8,16,12])
r =optimize.linprog(-c, A, B)
print(r)