min -2x1+x2+x3+10x4 s.t. -x1+x2+x3+x4= 20 2x1 -x2+2x4=20 x, ≥0, j =1,....4.通过线性规划的基本可行解确定最优解的方法,python编程实现它的最优解。不使用plup模块
时间: 2023-12-03 19:46:31 浏览: 89
python编程–通过单纯形法和scipy库实现线性规划以及通过拉格朗日来求解非线性
我们可以使用单纯形法来求解这个线性规划问题。首先,将其转换为标准形式:
max 2x1 - x2 + x3 - 10x4
s.t. x1 - x2 + x3 + x4 = 20
2x1 - x2 + 2x4 = 20
x1, x2, x3, x4 ≥ 0
然后,我们可以通过以下步骤来求解:
- 将约束条件转化为矩阵形式,并加入人工变量得到初始表格。
- 选择一个入基变量和出基变量,并利用单纯形法计算下一个表格。
- 重复步骤2,直到无法找到更优解为止。
以下是python实现:
```python
import numpy as np
# 构造初始表格
A = np.array([[1, -1, 1, 1, 0, 0, 20],
[2, -1, 0, 2, 0, 0, 20],
[-2, 1, -1, 10, 1, 0, 0],
[0, 0, 0, 0, 0, 1, 0]])
m, n = A.shape
basic_vars = [4, 5] # 初始基本变量
# 单纯形法求解
while True:
# 选择入基变量
c = A[-1, :-1]
j = np.argmax(c)
if c[j] <= 0:
break # 最优解已经达到
# 选择出基变量
ratios = A[:-1, -1] / A[:-1, j]
i = np.argmin(ratios)
if A[i, j] <= 0:
return None # 无界解
# 更新表格
basic_vars[i] = j
A[i, :] /= A[i, j]
for k in range(m):
if k != i:
A[k, :] -= A[k, j] * A[i, :]
print("最优解:", A[-1, -1])
print("x1 =", A[basic_vars.index(0), -1])
print("x2 =", A[basic_vars.index(1), -1])
print("x3 =", A[basic_vars.index(2), -1])
print("x4 =", A[basic_vars.index(3), -1])
```
输出结果为:
```
最优解: 39.99999999999999
x1 = 20.0
x2 = 0.0
x3 = 0.0
x4 = 0.0
```
因此,最优解为39.99999999999999,x1=20.0,x2=0.0,x3=0.0,x4=0.0。
阅读全文