动机

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

复合的挑战,你通常需要建立约束涉及这些决策变量的子集。例如,在我们的网络流模型你可能想要把一个上限总流进入一个特定的城市。你当然可以收集相关决策变量通过遍历所有可能的城市,只选择那些变量捕获可能的流从源到目的地城市。然而,这显然是浪费的,如果不是所有的求解算法是有效的。在一个大型网络的问题,这种方法的效率可能会导致重大的性能问题。有效处理可能需要复杂的数据结构。

Gurobi Python接口设计使我们刚刚描述的问题很容易管理。我们来举一个具体的例子,这是如何实现的。但我们做之前,我们需要描述一些重要的Python构造:列表,元组,字典,列表理解,生成器表达式。这些标准的Python概念是特别重要的在我们的界面。我们还将介绍tuplelisttupledict类,我们添加到定制类Gurobi Python接口。

一个快速提示:你可以参考在线Python文档manbet体育手机客户端附加信息在这里提到的任何Python数据结构。