python约束函数 约束unique

万字教你如何用 Python 实现线性规划想象一下,您有一个线性方程组和不等式系统 。这样的系统通常有许多可能的解决方案 。线性规划是一组数学和计算工具,可让您找到该系统的特定解,该解对应于某些其他线性函数的最大值或最小值 。
混合整数线性规划是线性规划的扩展 。它处理至少一个变量采用离散整数而不是连续值的问题 。尽管乍一看混合整数问题与连续变量问题相似 , 但它们在灵活性和精度方面具有显着优势 。
整数变量对于正确表示自然用整数表示的数量很重要,例如生产的飞机数量或服务的客户数量 。
一种特别重要的整数变量是二进制变量。它只能取零或一的值 , 在做出是或否的决定时很有用,例如是否应该建造工厂或者是否应该打开或关闭机器 。您还可以使用它们来模拟逻辑约束 。
线性规划是一种基本的优化技术,已在科学和数学密集型领域使用了数十年 。它精确、相对快速,适用于一系列实际应用 。
混合整数线性规划允许您克服线性规划的许多限制 。您可以使用分段线性函数近似非线性函数、使用半连续变量、模型逻辑约束等 。它是一种计算密集型工具,但计算机硬件和软件的进步使其每天都更加适用 。
通常 , 当人们试图制定和解决优化问题时,第一个问题是他们是否可以应用线性规划或混合整数线性规划 。
以下文章说明了线性规划和混合整数线性规划的一些用例:
随着计算机能力的增强、算法的改进以及更多用户友好的软件解决方案的出现,线性规划,尤其是混合整数线性规划的重要性随着时间的推移而增加 。
解决线性规划问题的基本方法称为 , 它有多种变体 。另一种流行的方法是 。
混合整数线性规划问题可以通过更复杂且计算量更大的方法来解决,例如,它在幕后使用线性规划 。这种方法的一些变体是,它涉及使用 切割平面,以及 。
有几种适用于线性规划和混合整数线性规划的合适且众所周知的 Python 工具 。其中一些是开源的,而另一些是专有的 。您是否需要免费或付费工具取决于问题的规模和复杂性 , 以及对速度和灵活性的需求 。
值得一提的是,几乎所有广泛使用的线性规划和混合整数线性规划库都是以 Fortran 或 C 或 C++ 原生和编写的 。这是因为线性规划需要对(通常很大)矩阵进行计算密集型工作 。此类库称为求解器 。Python 工具只是求解器的包装器 。
Python 适合围绕本机库构建包装器,因为它可以很好地与 C/C++ 配合使用 。对于本教程,您不需要任何 C/C++(或 Fortran),但如果您想了解有关此酷功能的更多信息,请查看以下资源:
基本上,当您定义和求解模型时,您使用 Python 函数或方法调用低级库,该库执行实际优化工作并将解决方案返回给您的 Python 对象 。
几个免费的 Python 库专门用于与线性或混合整数线性规划求解器交互:
在本教程中,您将使用SciPy和PuLP来定义和解决线性规划问题 。
在本节中,您将看到线性规划问题的两个示例:
您将在下一节中使用 Python 来解决这两个问题 。
考虑以下线性规划问题:
你需要找到X和?使得红色,蓝色和黄色的不平等,以及不平等X0和?0,是满意的 。同时,您的解决方案必须对应于z的最大可能值 。
您需要找到的自变量(在本例中为x和y)称为决策变量。要最大化或最小化的决策变量的函数(在本例中为z)称为目标函数、成本函数或仅称为目标。您需要满足的不等式称为不等式约束。您还可以在称为等式约束的约束中使用方程 。

推荐阅读