使用 Python 进行线性规划
解决线性规划问题的基本方法称为单纯形法,它有多种变体。另一种流行的方法是内点法。
混合整数线性规划问题可以通过更复杂且计算量更大的方法来解决,例如分支定界法,它在幕后使用线性规划。这种方法的一些变体是分支和切割方法,它涉及使用切割平面,以及分支和价格方法。
有几种适用于线性规划和混合整数线性规划的合适且众所周知的Python工具。其中一些是开源的,而另一些是专有的。您是否需要免费或付费工具取决于问题的规模和复杂性,以及对速度和灵活性的需求。
值得一提的是,几乎所有广泛使用的线性规划和混合整数线性规划库都是以Fortran或C或C++原生和编写的。这是因为线性规划需要对(通常很大)矩阵进行计算密集型工作。此类库称为求解器。Python工具只是求解器的包装器。
Python适合围绕本机库构建包装器,因为它可以很好地与C/C++配合使用。对于本教程,您不需要任何C/C++(或Fortran),但如果您想了解有关此酷功能的更多信息,请查看以下资源:
构建PythonC扩展模块
CPython内部
用C或C++扩展Python
基本上,当您定义和求解模型时,您使用Python函数或方法调用低级库,该库执行实际优化工作并将解决方案返回给您的Python对象。
几个免费的Python库专门用于与线性或混合整数线性规划求解器交互:
SciPyOptimizationandRootFinding
PuLP
Pyomo
CVXOPT
不可行的线性规划问题
如果没有解,线性规划问题是不可行的。当没有解决方案可以同时满足所有约束时,通常会发生这种情况。
例如,考虑如果添加约束x+y≤−1会发生什么。那么至少有一个决策变量(x或y)必须是负数。这与给定的约束x≥0和y≥0相冲突。这样的系统没有可行的解决方案,因此称为不可行的。
另一个示例是添加与绿线平行的第二个等式约束。这两行没有共同点,因此不会有满足这两个约束的解决方案。
无界线性规划问题
一个线性规划问题是无界的,如果它的可行区域是无界,将溶液不是有限。这意味着您的变量中至少有一个不受约束,可以达到正无穷大或负无穷大,从而使目标也无限大。
例如,假设您采用上面的初始问题并删除红色和黄色约束。从问题中删除约束称为放松问题。在这种情况下,x和y不会在正侧有界。您可以将它们增加到正无穷大,从而产生无限大的z值。
资源分配问题
在前面的部分中,您研究了一个与任何实际应用程序无关的抽象线性规划问题。在本小节中,您将找到与制造业资源分配相关的更具体和实用的优化问题。
假设一家工厂生产四种不同的产品,第一种产品的日产量为x₁,第二种产品的产量为x2,依此类推。目标是确定每种产品的利润最大化日产量,同时牢记以下条件:
第一种、第二种、第三种和第四种产品的每单位产品利润分别为20美元、12美元、40美元和25美元。
由于人力限制,每天生产的总数量不能超过五十台。
对于每单位第一个产品,消耗三个单位的原材料A。每单位第二产品需要两单位原料A和一单位原料B。每单位第三产品需要一单位A和两单位B。最后,每单位第四产品需要三B的单位
由于运输和储存的限制,工厂每天最多可以消耗一百单位的原材料A和九十单位的B。
以上内容为大家介绍了使用Python进行线性规划,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>python并集是什么意思?
python并集是什么意思?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。以属于A或属于B的元素为元素的集合成为A与B的并集。1、概念...详情>>
2023-11-14 16:44:05python框架是什么
python框架是什么1、说明Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定。2、框架类型...详情>>
2023-11-14 14:57:51pythonlstrip()截掉字符
python中lstrip()截掉字符说明1、lstrip()方法用于截掉字符串左边的空格或指定的字符。语法str.lstrip([chars])2、参数分为str、chars。str:原...详情>>
2023-11-14 07:58:15python删除文档的方法
python中删除文档的方法1、delete_one()方法删除文档。delete_one()需要一个查询对象参数。它只删除了第一次出现。2、在删除大量文档时,使用de...详情>>
2023-11-14 06:54:49