动机

动机

任何优化模型的核心都是一组决策变量。找到一种方便的方法来存储和访问这些变量通常是实现模型的主要挑战。虽然一些模型中的变量可以自然地映射到简单的编程语言结构(例如,x[我]对于连续整数值),其他模型可能面临更大的挑战。例如,考虑一个优化多个不同商品在供应网络中的流动的模型。你可能有一个变量x['彭斯','丹佛','纽约']它捕获了一个制成品(本例中的笔)从丹佛到纽约的流动。与此同时,你可能会想要一个变量x(“铅笔”,“掘金”,“西雅图”),因为并不是所有商品、源城市和目的地城市的组合都代表了网络中的有效路径。在典型的编程语言中表示稀疏的决策变量集可能很麻烦。

为了加剧这个挑战,您通常需要构建包含这些决策变量子集的约束。例如,在我们的网络流模型中,您可能希望设置进入特定城市的总流量的上限。您当然可以通过遍历所有可能的城市来收集相关的决策变量,并只选择那些能够捕获从源城市到期望目的地城市的可能流量的变量。然而,如果不是所有的起点-目的地对都是有效的,这显然是浪费。在大型网络问题中,这种方法的低效可能会导致主要的性能问题。有效地处理这个问题需要复杂的数据结构。

Gurobi Python接口的设计使我们刚刚描述的问题变得非常容易管理。稍后,我们将给出一个具体的示例来说明如何做到这一点。不过,在此之前,我们需要描述几个重要的Python结构:列表,元组,字典,列表理解,生成器表达式.这些是标准的Python概念,在我们的接口中特别重要。我们还会介绍tuplelisttupledict类,它们是我们已添加到Gurobi Python接口的自定义类。

提醒一下,你可以查阅在线Python文档manbet体育手机客户端,以获取关于此处提到的任何Python数据结构的额外信息。