【问题标题】:How to declare dynamic variables inside FOR loop in OR-TOOLS如何在 OR-TOOLS 中的 FOR 循环内声明动态变量
【发布时间】:2019-06-20 21:10:11
【问题描述】:

我开始使用 Google 的 OR-TOOLS,但我不知道如何动态声明变量。

OR-TOOLS 网站中的一个非常简单的示例如下所示

x = solver.NumVar(0, 10, 'x')
y = solver.NumVar(0, 10, 'y')
solver.Add(x + 7 * y <= 17.5)
solver.Maximize(x + 10 * y)`

因为我正在对 Benders 分解进行建模,所以我试图在循环中声明一些变量。因此,我可以动态创建它的变量。

我尝试过类似的方法:

for i in range(3):
    x[i] = solver.NumVar(0, 10, 'x[i]')
    y[i] = solver.IntVar(0, 10, 'y[i]')
    solver.Add(x[i] + 7 * y[i] <= 17.5)

但是,这显然行不通。

有人可以帮帮我吗?谢谢!

【问题讨论】:

    标签: python optimization or-tools mixed-integer-programming


    【解决方案1】:

    这种方法确实有效,并且可能在很多 examples 中都有体现。

    如果不进行测试,您的想法可能如下所示:

    # prepare some data-structure to hold variables returned
    x = [None] * 3
    y = [None] * 3
    
    for i in range(3):
        x[i] = solver.NumVar(0, 10, 'x[{}]'.format(i))
        y[i] = solver.IntVar(0, 10, 'y[{}]'.format(i))
        solver.Add(x[i] + 7 * y[i] <= 17.5)  # invariant is important!
                                             # we only access available indices
    

    从概念上来说没有错。

    您的变量现在可以通过访问您的列表来使用/消耗。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多