📌  相关文章
📜  Python|纸浆中的线性规划

📅  最后修改于: 2022-05-13 01:55:13.710000             🧑  作者: Mango

Python|纸浆中的线性规划

线性规划 (LP),也称为线性优化,是一种数学规划技术,用于在其要求由线性关系表示的数学模型中获得最佳结果或结果,例如最大利润或最小成本。线性规划是数学规划的一种特殊情况,也称为数学优化。
一般来说,一个组织或一个公司主要有两个目标,第一个是最小化,另一个是最大化。最小化意味着最小化生产的总成本,而最大化意味着最大化他们的利润。所以借助线性规划图解法,我们可以找到最优解。

线性规划的基本术语

  • 目标函数:问题的主要目标是最大化或最小化,是线性规划的目标函数。在下面显示的问题中,Z(最小化)是目标函数。
  • 决策变量:用于决定输出的变量作为决策变量。它们是数学规划模型的未知数。在下面的问题中,我们要确定 x 和 y 的值以最小化 Z。这里,x 和 y 是决策变量。
  • 约束:这些是对决策变量的限制。在以下问题的约束下给出的决策变量的限制是线性规划的约束。
  • 非负限制:在线性规划中,决策变量的值总是大于或等于 0。

注意:对于线性规划问题,目标函数、约束和非负性限制必须是线性的。

示例 1:考虑以下问题:

Minimize :  Z = 3x + 5y
Subject to the constraints: 
2x + 3y >= 12
-x + y <= 3
x >= 4
y <= 3
x, y >= 0

在Python中解决上述线性规划问题:
PuLP 是Python生态系统中用于解决优化问题的众多库之一。您可以在 Jupyter notebook 中安装 PuLp,如下所示:

import sys !{sys.executable} -m pip install pulp

代码:在Python中解决上述线性规划问题:

# import the library pulp as p
import pulp as p
  
# Create a LP Minimization problem
Lp_prob = p.LpProblem('Problem', p.LpMinimize) 
  
# Create problem Variables 
x = p.LpVariable("x", lowBound = 0)   # Create a variable x >= 0
y = p.LpVariable("y", lowBound = 0)   # Create a variable y >= 0
  
# Objective Function
Lp_prob += 3 * x + 5 * y   
  
# Constraints:
Lp_prob += 2 * x + 3 * y >= 12
Lp_prob += -x + y <= 3
Lp_prob += x >= 4
Lp_prob += y <= 3
  
# Display the problem
print(Lp_prob)
  
status = Lp_prob.solve()   # Solver
print(p.LpStatus[status])   # The solution status
  
# Printing the final solution
print(p.value(x), p.value(y), p.value(Lp_prob.objective))  

解释 :

现在,让我们逐步了解代码:

  • 第 1-2 行:首先将库纸浆导入为 p。
  • 第 4-5 行:通过给您的问题起一个合适的名称来定义问题,这里我给了“问题”这个名称。此外,指定目标函数的目标是最大化还是最小化。
  • 第 7-9 行:定义 LpVariable 来保存目标函数的变量。下一个参数指定定义变量的下限,即0,上限默认为none。您也可以指定上限。
  • 第 11-12 行:用定义的变量表示目标函数。
  • 第 14-18 行:这些是对变量的约束。
  • 第 21 行:这将在输出屏幕中显示问题。
  • 第 23 行:这是问题解决者。
  • 第 24 行:将显示问题的状态。
  • 第 27 行:将打印 x 和 y 的值以及目标函数的最小值。

查看输出

# Display the problem
print(Lp_prob)

输出

status = Lp_prob.solve()   # Solver
print(p.LpStatus[status])   # The solution status

输出

Optimal
# Printing the final solution
print(p.value(x), p.value(y), p.value(Lp_prob.objective))

输出

6.0 0.0 18.0

x 和 y 的最佳值分别为6.0 和 0.0 。优化后的目标函数值为18.0。