import os
import re
import numpy as np
import time
"""
输入线性规划模型到一个文档中,程序读取线性规划模型,化其为标准型。
找到初始可行基,建立单纯形表,迭代求解,判断解的类型,输出结果。
"""
#读取线性规划模型,并返回字符串列表
def inPut():
# 读取线性规划模型
model_str = []
with open("2.10.txt",'r') as f: #建立一个文本文档 储存线性规划模型
lines = f.readlines()
for element in lines:
element = element[:-1]
model_str.append(element)
return(model_str)
#得到价值向量c
def find_C(model_str):
x_temple = re.findall(r"-?\d+\.?\d*",model_str[-1])
x_temple = [int(i) for i in x_temple]
x_max = max(x_temple)
c_temple = re.findall(r"-?\d+\.?\d*",model_str[0])
c_temple = [float(i) for i in c_temple]
c_list_1 = c_temple[1::2]
c_list_2 = c_temple[::2]
c=[]
for i in range(x_max+1):
c.append(0)
for i in range(len(c_list_1)):
c[int(c_list_1[i])] = c_list_2[i]
c = np.array(c)
return c
#求系数矩阵+资源向量
def find_A(model_str):
b = []
x_temple = re.findall(r"-?\d+\.?\d*",model_str[-1])
x_temple = [int(i) for i in x_temple]
x_max = max(x_temple)
A = [[0 for i in range(x_max+1)] for i in range(len(model_str)-2)]
k = 0
for element in model_str[1:-1]:
x_temple = re.findall(r"-?\d+\.?\d*",element)
x_temple = [float(i) for i in x_temple]
x_list_1 = x_temple[1::2]
x_list_2 = x_temple[:-1:2]
x=[]
b.append(x_temple[-1])
for i in range(x_max+1):
x.append(0)
for i in range(len(x_list_1)):
x[int(x_list_1[i])] = x_list_2[i]
for num in range(len(x)):
A[k][num] = x[num]
k += 1
for num in range(len(b)):
A[num][0] = b[num]
A = np.array(A,dtype = np.float_)
return A
#由以上三个函数可得到 1.系数+资源向量矩阵 2.价值向量 A c b 三个变量
#为进行资源向量非负化,约束条件等式化,记录每个约束的形式( =记为0,>记为1,<记为-1)
python实现单纯形法(大M法)
最新推荐文章于 2024-09-28 08:00:00 发布