线性规划问题试求解--Python

例题:

靠近河流有两个化工厂(见图1-1),流经第一化工厂的河流流量为每天500万立方米,在两个工厂之间有一条流量为每天200万立方米的支流。

线性规划问题试求解--Python_第1张图片

(图1-1)

①化工厂每天排放含有某种有害物质的工业污水2万立方米,第二化工厂每天排放这种工业污水1.4万立方米。从第一化工厂排出的工业污水流到第二化工厂以前,有20%可自然净化。根据环保要求,河流中工业污水的含量应不大于0.2%。这两个工厂都需各自处理一部分工业污水。第一化工厂处理工业污水的成本是1000元/万立方米。

②化工厂处理工业污水的成本是800元/万立方米。现在要问在满足环保要求的条件下,每厂各应处理多少工业污水,使这两个工厂总的处理工业污水费用最小。

题解:

x_{1}为第一工厂处理污水量,x_{2}为第二工厂处理污水量

列出目标函数和约束条件:

目标函数:min z=1000x_{1}+800x_{2}

约束条件:\left\{\begin{matrix} \\ \frac{(2-x_{1})\times0.8 }{500}\leqslant 0.2\% \\ \frac{(2-x_{1})\times0.8+(1.4-x_{2})}{700}\leqslant 0.2\% \\ x_{1}\leqslant 2 \\ x_{2}\leqslant 1.4 \\ x_{1},x_{2}\geqslant 0 \end{matrix}\right.

python实现:
第一种方法
import numpy as np
from scipy.optimize import linprog

# 定义目标函数的系数(取负值,因为我们需要求解的是最大化问题)
c = np.array([1000, 800])

# 定义约束条件矩阵 A 和向量 b
A = np.array([[-0.8, -1]])
b = np.array([-1.6])

# 定义变量的边界
x_bounds = (1, 2)
y_bounds = (0, 1.4)

# 求解线性规划问题
res = linprog(c, A_ub=A, b_ub=b, bounds=(x_bounds, y_bounds))

print("Optimal value:", res.fun)
print("Optimal solution:", res.x)

输出结果为:

Optimal value: 1640.0
Optimal solution: [1.  0.8]
第二种方法:
# import package
import pulp as pl

# initialize model
model = pl.LpProblem(name='wushui', sense=pl.LpMinimize)

# define variables
x = pl.LpVariable(name='x', cat='Continuous')
y = pl.LpVariable(name='y', cat='Continuous')

# add constrains
model += (0.8 * x + y - 1.6 >= 0)
model += (x - 2 <= 0)
model += (y - 1.4 <= 0)
model += (x - 1 >= 0)
model += (y >= 0)

# add formular
model += 1000 * x + 800 * y

# run solver
status=model.solve()

# output
print(f"status: {model.status}, {pl.LpStatus[model.status]}")
print(f"objective: {model.objective.value()}")

for var in model.variables():
    print(f"{var.name}: {var.value()}")

for name, constraint in model.constraints.items():
    print(f"{name}: {constraint.value()}")

输出结果为:

status: 1, Optimal
objective: 1640.0
x: 1.0
y: 0.8
_C1: 0.0
_C2: -1.0
_C3: -0.5999999999999999
_C4: 0.0
_C5: 0.8

你可能感兴趣的:(python,python)