另一个示例是添加与绿线平行的第二个等式约束 。这两行没有共同点,因此不会有满足这两个约束的解决方案 。
一个线性规划问题是无界的,如果它的可行区域是无界 , 将溶液不是有限 。这意味着您的变量中至少有一个不受约束,可以达到正无穷大或负无穷大,从而使目标也无限大 。
例如 , 假设您采用上面的初始问题并删除红色和黄色约束 。从问题中删除约束称为放松问题 。在这种情况下,x和y不会在正侧有界 。您可以将它们增加到正无穷大 , 从而产生无限大的z值 。
在前面的部分中,您研究了一个与任何实际应用程序无关的抽象线性规划问题 。在本小节中,您将找到与制造业资源分配相关的更具体和实用的优化问题 。
假设一家工厂生产四种不同的产品 , 第一种产品的日产量为x ? , 第二种产品的产量为x 2,依此类推 。目标是确定每种产品的利润最大化日产量,同时牢记以下条件:
数学模型可以这样定义:
目标函数(利润)在条件 1 中定义 。人力约束遵循条件 2 。对原材料 A 和 B 的约束可以从条件 3 和条件 4 中通过对每种产品的原材料需求求和得出 。
最后,产品数量不能为负,因此所有决策变量必须大于或等于零 。
与前面的示例不同 , 您无法方便地将其可视化,因为它有四个决策变量 。但是,无论问题的维度如何,原理都是相同的 。
在本教程中,您将使用两个Python 包来解决上述线性规划问题:
SciPy 设置起来很简单 。安装后,您将拥有开始所需的一切 。它的子包scipy.optimize可用于线性和非线性优化 。
PuLP 允许您选择求解器并以更自然的方式表述问题 。PuLP 使用的默认求解器是COIN-OR Branch and Cut Solver (CBC) 。它连接到用于线性松弛的COIN-OR 线性规划求解器 (CLP)和用于切割生成的COIN-OR 切割生成器库 (CGL) 。
另一个伟大的开源求解器是GNU 线性规划工具包 (GLPK) 。一些著名且非常强大的商业和专有解决方案是Gurobi、CPLEX和XPRESS 。
除了在定义问题时提供灵活性和运行各种求解器的能力外 , PuLP 使用起来不如 Pyomo 或 CVXOPT 等替代方案复杂,后者需要更多的时间和精力来掌握 。
要学习本教程,您需要安装 SciPy 和 PuLP 。下面的示例使用 SciPy 1.4.1 版和 PuLP 2.1 版 。
您可以使用pip以下方法安装两者:
您可能需要运行pulptest或sudo pulptest启用 PuLP 的默认求解器,尤其是在您使用 Linux 或 Mac 时:
或者,您可以下载、安装和使用 GLPK 。它是免费和开源的,适用于 Windows、MacOS 和 Linux 。在本教程的后面部分,您将看到如何将 GLPK(除了 CBC)与 PuLP 一起使用 。
在 Windows 上 , 您可以下载档案并运行安装文件 。
在 MacOS 上,您可以使用 Homebrew:
在 Debian 和 Ubuntu 上,使用apt来安装glpk和glpk-utils:
在Fedora,使用dnf具有glpk-utils:
您可能还会发现conda对安装 GLPK 很有用:
安装完成后 , 可以查看GLPK的版本:
有关详细信息 , 请参阅 GLPK 关于使用Windows 可执行文件和Linux 软件包进行安装的教程 。
在本节中,您将学习如何使用 SciPy优化和求根库进行线性规划 。
要使用 SciPy 定义和解决优化问题,您需要导入scipy.optimize.linprog():
现在您已经linprog()导入 , 您可以开始优化 。
让我们首先解决上面的线性规划问题:
linprog()仅解决最小化(而非最大化)问题,并且不允许具有大于或等于符号 ( ) 的不等式约束 。要解决这些问题,您需要在开始优化之前修改您的问题:
推荐阅读
- 公众号加入我们怎么做,公众号加入我们怎么写
- 有什么cpu是vga接口,vga接口什么样的
- 头条的音频怎么下载到电脑,头条的音频怎么下载到电脑上播放
- 斗鱼直播老林,斗鱼直播老林哥哥是谁
- 函数返回两个值C语言 c语言函数有两个返回值
- 怎么查看公众号是否被封,怎么看公众号有没有被投诉
- 路由器选择什么方案好呢,路由器选择哪种好
- 京东电商如何操作,电商京东怎么赚钱的
- python函数立方根 python 立方函数